Розсувні столиці


11

Фон

Уявіть англійський алфавіт, виписаний рядом з великої літери - ABCDEFGHIJKLMNOPQRSTUVWXYZ. Припустимо, у нас є спеціальний об'єктив змінної ширини, такий, що, розміщуючи його над рядком, він показує певне "вікно" алфавіту, з літерами поза об'єктивом, прихованими від зору. Крім того, ця лінза має форму викривлення, так що перша буква всередині лінзи та кожна друга літера після цього є нижньою літерою, але решта літер все ще відображається з великої літери.

Наприклад, ми могли б мати об'єктив довжиною 5 розташований де - то в середині алфавіту і ми бачимо тільки б . jKlMn(випереджаюче період тут , щоб забезпечити пробільні шоу) - зверніть увагу , Kі Mпо - , як і раніше капіталізуються, в той час як j, lі nвсе нижче -укладений. Коли ми пересуваємо цю лінзу зліва направо по алфавіту, відображатимуться різні літери, а різні літери - з великої літери. Завдання тут - вивести отримані літери, коли об'єктив ковзає по алфавіту.

Змагання

Напишіть програму або функцію, яка приймає ціле число введення 0 < n < 27та виводить або повертає рядки, які видно, як об'єктив, описаний вище, ковзає по алфавіту.

Для значень, nбільших за 1, об'єктив починається з "звисання" з лівої частини алфавіту, тому Aв самому правому прорізі об'єктива показано лише значення "лінза". Таким чином, перший рядок будь-якого виходу буде одиничним A, великим або малим, залежно від довжини об'єктива.

Аналогічно, об'єктив закінчує ковзання, коли Zзнаходиться в самому лівому слоті об'єктива (це означає, що в останньому рядку в будь-якому виході завжди буде 25 пробілів, а за ними - нижній регістр z).

Приклади

Вхід: 1

Вихід:

a
 b
  c
   d
    e
     f
      g
       h
        i
         j
          k
           l
            m
             n
              o
               p
                q
                 r
                  s
                   t
                    u
                     v
                      w
                       x
                        y
                         z

Вхід: 4

Вихід:

A
aB
AbC
aBcD
 bCdE
  cDeF
   dEfG
    eFgH
     fGhI
      gHiJ
       hIjK
        iJkL
         jKlM
          kLmN
           lMnO
            mNoP
             nOpQ
              oPqR
               pQrS
                qRsT
                 rStU
                  sTuV
                   tUvW
                    uVwX
                     vWxY
                      wXyZ
                       xYz
                        yZ
                         z

Вхід: 26

Вихід:

A
aB
AbC
aBcD
AbCdE
aBcDeF
AbCdEfG
aBcDeFgH
AbCdEfGhI
aBcDeFgHiJ
AbCdEfGhIjK
aBcDeFgHiJkL
AbCdEfGhIjKlM
aBcDeFgHiJkLmN
AbCdEfGhIjKlMnO
aBcDeFgHiJkLmNoP
AbCdEfGhIjKlMnOpQ
aBcDeFgHiJkLmNoPqR
AbCdEfGhIjKlMnOpQrS
aBcDeFgHiJkLmNoPqRsT
AbCdEfGhIjKlMnOpQrStU
aBcDeFgHiJkLmNoPqRsTuV
AbCdEfGhIjKlMnOpQrStUvW
aBcDeFgHiJkLmNoPqRsTuVwX
AbCdEfGhIjKlMnOpQrStUvWxY
aBcDeFgHiJkLmNoPqRsTuVwXyZ
 bCdEfGhIjKlMnOpQrStUvWxYz
  cDeFgHiJkLmNoPqRsTuVwXyZ
   dEfGhIjKlMnOpQrStUvWxYz
    eFgHiJkLmNoPqRsTuVwXyZ
     fGhIjKlMnOpQrStUvWxYz
      gHiJkLmNoPqRsTuVwXyZ
       hIjKlMnOpQrStUvWxYz
        iJkLmNoPqRsTuVwXyZ
         jKlMnOpQrStUvWxYz
          kLmNoPqRsTuVwXyZ
           lMnOpQrStUvWxYz
            mNoPqRsTuVwXyZ
             nOpQrStUvWxYz
              oPqRsTuVwXyZ
               pQrStUvWxYz
                qRsTuVwXyZ
                 rStUvWxYz
                  sTuVwXyZ
                   tUvWxYz
                    uVwXyZ
                     vWxYz
                      wXyZ
                       xYz
                        yZ
                         z

Правила

  • Застосовуються стандартні правила введення / виводу
  • Стандартні лазівки заборонені
  • Стандартні правила коди полів застосовуються
  • Потрібний провідний пробіл, як показано, щоб ми знали, де ми в алфавіті.
  • Кожен рядок не може мати пробіли пробілу (як показано - вихід не є прямокутником).
  • Одинарна нова строка не є обов'язковою.

Відповіді:



2

JavaScript (ES6), 130 байт

n=>[...Array(n+25)].map(_=>[...Array(26)].map(_=>String.fromCharCode(j++<i|i+n<j?32:j+(j-i)%2*32),++i,j=64).join``,i=64-n).join`\n`

Де \nпредставляє буквальний символ нового рядка. Працює шляхом циклічного виведення прямокутника та виведення пробілів за межами діагоналі, додаючи 32 до коду символів для зменшення великого регістру в альтернативних квадратах. replaceЗдається, що використання на 1 байт довше:

n=>[...Array(n+25)].map(_=>' '.repeat(26).replace(/./g,s=>j++<i|i+n<j?s:String.fromCharCode(j+(j-i)%2*32),++i,j=64),i=64-n).join`\n`

1

AWK, 160 байт

{d=-$1
m=25
for(;i<m+$1;i++){f="%"(++d<0?0:d<m?d:m)"s"
c=u=65
l=97
printf f,""
for(j=++E-$1;j<E&&j<26;j++){c=c==u?l:u
if(j<0)continue
printf("%c",j+c)}print""}}

Це приблизно так щільно, як я можу придумати AWK. Маючи 3 різних prints і continueдійсно додайте до підрахунку байтів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.