Скользящие столицы

11

Фон

Представьте себе английский алфавит, написанный в ряд заглавными буквами ABCDEFGHIJKLMNOPQRSTUVWXYZ. Предположим, у нас есть специальный объектив с переменной шириной, так что при расположении над строкой он показывает некое «окно» алфавита, а буквы вне объектива скрыты от глаз. Кроме того, у этой линзы есть характеристика деформации, так что первая буква внутри линзы, а затем каждая вторая буква в нижнем регистре, но остальные буквы по-прежнему заглавными.

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

Соревнование

Напишите программу или функцию, которая принимает входное целое число 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

Правила

  • Применяются стандартные правила ввода / вывода
  • Стандартные лазейки запрещены
  • Применяются стандартные правила игры в гольф
  • Требуемый начальный пробел, как показано, необходим, чтобы мы знали, где мы находимся в алфавите.
  • Каждая строка не может иметь конечные пробелы (как показано - выходные данные не являются прямоугольниками).
  • Одиночный завершающий перевод строки не является обязательным.
AdmBorkBork
источник
1
Связанные
Алекс А.

Ответы:

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 разных printс и continueдействительно добавить к числу байтов.

Роберт Бенсон
источник