Алфавит Лестница


30

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

Ваша задача - создать программу или функцию, которая выводит следующее без ввода:

a
bb
ccc
dddd
eeeee
ffffff
ggggggg
hhhhhhhh
iiiiiiiii
jjjjjjjjjj
kkkkkkkkkkk
llllllllllll
mmmmmmmmmmmmm
nnnnnnnnnnnnnn
ooooooooooooooo
pppppppppppppppp
qqqqqqqqqqqqqqqqq
rrrrrrrrrrrrrrrrrr
sssssssssssssssssss
tttttttttttttttttttt
uuuuuuuuuuuuuuuuuuuuu
vvvvvvvvvvvvvvvvvvvvvv
wwwwwwwwwwwwwwwwwwwwwww
xxxxxxxxxxxxxxxxxxxxxxxx
yyyyyyyyyyyyyyyyyyyyyyyyy
zzzzzzzzzzzzzzzzzzzzzzzzzz

счет

Это , поэтому выигрывает самый короткий ответ на каждом языке.


4
Вывести как список строк?
полностью человек

5
Можем ли мы использовать заглавные буквы вместо?
Уриэль

9
Мне не хватало азбуки! (но не позволяйте Лики Монахиня знать)
Луис Мендо

9
Я очень усердно работал, проверяя, был ли это обман, и, очевидно, это не так
Blue

4
@totallyhuman это решать тебе.
SpookyGengar

Ответы:


14

05AB1E , 2 байта

Попробуйте онлайн!

Обратите внимание, что это выводит в виде списка строк, так как OP явно разрешен. Ссылка использует версию с pretty-print (к ней добавляются переводы строк).

Как это работает

  • A дает строчный алфавит.
  • ƶ поднимает алфавит (умножает каждый элемент на его индекс).
  • » присоединяется к новым строкам


9

APL (Dyalog) , 12 8 5 байтов SBCS

3 байта сохранены благодаря @ngn

4 байта сохранены благодаря @ Adám

⍴⍨⌸⎕A

OP выяснены прописные буквы действительны, а также выход в виде массива строк.

Попробуйте онлайн!

Как?

дает нам каждую букву в ⎕Aалфавите с индексами в ней, переданную в функцию ⍴⍨с буквой в качестве левого аргумента и индексом es в качестве правого аргумента.

⍴⍨переставляет свой правый аргумент в длину, указанную его левым. переключается влево и вправо (следовательно, символ этого, похожий на лицо человека, читающего это объяснение).


819⌶↑⎕A⍴¨⍨⍳26
Адам

@ Adám спасибо! Я перепробовал все варианты / и \, полностью игнорируя форму ⍨
Уриэль

Вы можете удалить тоже.
Адам

@ Адам, но это выглядело бы ужаснее U
Уриэль,

Включи бокс!
Адам

8

Haskell , 27 байт

[c<$['a'..c]|c<-['a'..'z']]

Попробуйте онлайн! Возвращает список строк. (Спасибо @totallyhuman за указание, что теперь это разрешено)

Объяснение:

             c<-['a'..'z']  -- for each character c from 'a' to 'z'
[           |c<-['a'..'z']] -- build the list of
[   ['a'..c]|c<-['a'..'z']] -- the lists from 'a' to c, e.g. "abcd" for c='d'
[c<$['a'..c]|c<-['a'..'z']] -- with each element replaced by c itself, e.g. "dddd"

* поклоны * Объяснение для нуб? <$Повторяет ли первый аргумент n раз, где n - длина второго аргумента?
полностью человек

@totallyhuman Вот, пожалуйста. Не стесняйтесь спрашивать в Monads and Men, если у вас есть дополнительные вопросы.
Лайкони

В Prelude есть несколько очень интересных операторов ... Спасибо за объяснение!
полностью человек

7

брейкфук , 74 байта

++++++++[>+>+++>++++++++++++<<<-]>++>++>+>+<<[->>[->+<<.>]>[-<+>]<+<+<<.>]

Попробуйте онлайн!

объяснение

++++++++[>+>+++>++++++++++++<<<-]>++>++>+>+
TAPE:
  000
  010   C_NEWLINE
  026   V_ITERCOUNT
  097   V_ALPHA
 >001<  V_PRINTCOUNT
  000   T_PRINTCOUNT

V_ITERCOUNT TIMES:      <<[-   

  V_PRINTCOUNT TIMES:     >>[-
    INC T_PRINTCOUNT        >+
    OUTPUT V_ALPHA          <<.
                          >]

  RESTORE V_PRINTCOUNT    >[-<+>]
  INC V_PRINTCOUNT        <+
  INC V_ALPHA             <+
  OUTPUT C_NEWLINE        <<.
                        >]

Попробуйте онлайн!


7

Befunge-98 (FBBI) , 27 байт

1+:0\::'`j'@+\k:$$>:#,_$a,

где символ подстановки (ASCII 26)

Попробуйте онлайн!

Используются заглавные буквы и завершающий перевод строки.

объяснение

Код работает путем сохранения счетчика (изначально 0) и в каждом цикле:

  • 1+ - Увеличивает его на 1
  • :0\:: - толкает вещи так, чтобы стек выглядел так: bottom [N, 0, N, N, N] top
  • '`j'@ - Проверяет, больше ли счетчик, чем 26
    • j'@- Если это так, мы перепрыгиваем через 'и выходим, используя@
    • j'@- Если это не так, мы выполняем ', который помещает значение ASCII @в стек

Теперь стек выглядит так: bottom [N, 0, N, N, 64] top

  • +\- Добавляет, а затем переключает верхнюю часть 2. bottom [N, 0, (N+64), N] top Первый раз, это ASCII 65, илиA
  • k:- Дублирует второе из верхних (N+1)времен - теперь в стеке есть (N+2)значения (N+64)(плюс Nи 0ранее)
  • $$- выбросить 2 верхних значения - теперь есть только Nзначения(N+64)
  • >:#,_- печатает каждое верхнее значение, пока оно не достигнет 0- это означает, что Nкопии (N+64)будут напечатаны
  • $- выбрасывает 0- теперь стек простоN
  • a, - печатает ввод

И это повторяется


Мне нравится, как я использовал @как для завершения программы и для добавления в счетчик.


@JamesHolderness Да. Спасибо, что поймали это!
MildlyMilquetoast

7

Рубин , 32 30 байт

-2 байта благодаря @EricDuminil.

27.times{|n|puts (n+96).chr*n}

Попробуйте онлайн!


1
Превосходно. Согласно комментарию OP, трейлинг / ведущие новые строки разрешены. В таком случае 27.times{|n|puts (n+96).chr*n}было бы правильно с 30 байтами
Эрик


6

Excel VBA, 38 байт

Используя Немедленное Окно. :)

[A1:A26]="=REPT(CHAR(96+ROW()),ROW())"

Ах. Виноват. Я думал, что это Excel, потому что я использовал функции Excel, используя Immediate Window.
перематывать

Вы можете сбросить байт, удалив терминал"
Тейлор Скотт


5

Рубин, 38 байт

Возвращает массив строк

->{(a=*?a..?z).map{|x|x*-~a.index(x)}}

-5 байт благодаря полностью человеческому

* -11 байт благодаря отличной игре в гольф от Джордана.


По моим подсчетам это всего 48 байт .
Иордания

1
Вам не нужно "\n"вообще; putsделает это для вас (хотя для дальнейшего использования $/это на 2 байта короче), но вы можете putsполностью избавиться от него, если сделаете это лямбда-выражением, которое просто возвращает массив строк. Вы также можете изменить a=[*?a..?z];puts a.mapв puts (a=*?a..?z).mapи x*(a.index(x)+1)к x*-~a.index(x). Все вместе это 38 байтов .
Иордания

38-байтовая версия прекрасно работает на TiO (см. Ссылку в предыдущем комментарии). Обратите внимание, что (a=*?a..?z)внутри блока, а не в аргументах лямбда.
Иордания


4

MATL , 9 байт

2Y2"@X@Y"

Попробуйте онлайн!

объяснение

2Y2     % Push string 'abc...z'
"       % For char in that string each
  @     %   Push current char
  X@    %   Push iteration index (1-based)
  Y"    %   Run-length decoding: repeat char that many times
        % Implicit end. Implicit display

Знаете ли вы, почему &нельзя использовать для дублирования и транспонирования2Y2 ?
Стьюи Гриффин

@StewieGriffin на &самом деле не дублирует и не транспонирует, хотя иногда дает тот же результат, что и этот. Что он делает, так это изменяет количество входов / выходов следующей функции. Например, если вы используете &+, +функция теперь берет один вход вместо двух и выводит сумму входа с самим транспонированием. Но это только потому , что это как + работа с 1 входом ( то же самое для =, >и некоторые другие)
Луис Mendo


4

Желе ,  5  4 байта

подлый злоупотребление реализацией Python

-1 байт благодаря Адаму ( разрешен вывод списка строк; так как теперь имеется функция, а не программа)

Øa×J

Ниладная ссылка, которая возвращает список строк, строк
(чтобы напечатать его с символами новой строки в виде полной программы, просто добавьте Yобратно ).

Попробуйте онлайн! (нижний колонтитул вызывает ссылку как nilad (¢) и получаетясноепредставление результата (ŒṘ)в Python,поскольку поведение полной программы по умолчанию будет разбивать результат вместе, какabbccc...)

Как?

Øa×J - main link: no arguments
Øa   - yield the alphabet = ['a','b','c',...,'z']
   J - range of length    = [1,2,3,...,26]
  ×  - multiplication     = ["a","bb","ccc",...,"zzzzzzzzzzzzzzzzzzzzzzzzzz"]
     - (Python multiplication lengthens chars to strings - not usually a Jelly thing)


хм, может быть - мы можем «вывести» список строк, но мы должны «создать программу» - при запуске в качестве программы вывод четырех байтов разбивается, чтобы не указывать на его характер списка.
Джонатан Аллан

программа или функция
Адам

4

MATL , 11 байт

2Y2t!g*!YRc

Попробуйте онлайн!

Использует умножение широковещания с единицами, чтобы получить большую квадратную матрицу желаемых букв 26x26. Далее берется нижняя треугольная часть и неявно печатается.

Также 11 байтов:

2Y2!t~!+YRc  % Using broadcast addition with zeroes
2Y2!l26X"YR  % Using 'repmat'

@ StewieGriffin Я на самом деле уже на полпути комментировал ваш ответ от Octave о совпадении с тем же решением.
Санчиз

4

Javascript, 87 байтов , 72 байта (большое спасибо @steenbergh)

Мой первый ответ тоже:

for(i=1,j=97;j<123;){console.log(String.fromCharCode(j++).repeat(i++))};

Добро пожаловать! Похоже, вы можете немного сократить его, удалив пробелы вокруг ind=1в начале, точку с запятой после i<123и последнюю точку с запятой. также, пожалуйста, сделайте свой заголовок немного более понятным, указав язык - bytecount, с префиксом #.
Стинберг

Вы можете сэкономить шесть байтов, сбросив в jцелом:for(i=1;i<27;){console.log(String.fromCharCode(i+96).repeat(i++))}
steenbergh

@steenbergh спасибо еще раз, как вы любезны помочь мне.
NTCG

4

Japt , 9 7 байт

Выводит массив строк

;C¬Ëp°E

Попытайся


объяснение

Разделите ( ¬) строчный алфавит ( ;C) на массив символов, отобразите массив ( Ë) и повторите ( p) текущий элемент с текущим Eприращением index ( ) ( °).


Именно то, что я имел, кроме того, что я использовал®p°Y
ETHproductions

3

Пип , 9 байт

FczPcX++i

Попробуйте онлайн!

В псевдокоде это

For-each c in z
    Print (c string-multiply ++i)

где zзадан строчный алфавит и iзадано 0.


Решения на основе карт занимают один дополнительный байт, потому что им нужно, чтобы -nфлаг отображался в нескольких строках:

{aX++i}Mz
B X_+1MEz



3

R , 38 байт

Относительно неинтересный ответ. Выполните итерацию iот 1 до 26, выведите iбукву алфавита iраз (с неявным переводом строки).

for(i in 1:26)print(rep(letters[i],i))

Попробуйте онлайн!

Более интересным подходом может быть использование чего-то вроде следующего:

cat(letters[(1:351*2)^.5+.5])

Это дает нам все буквы в нужном количестве, но без разрывов строк. Возможно, кто-то умнее меня сможет найти способ использовать это, чтобы получить ответ гольфиста.


2
Я не уверен, как использовать ваш второй подход, но я знаю, что rep(letters, 1:26)это намного короче ...
Джузеппе

@ Джузеппе Ха! Как я уже сказал, «кто-то умнее меня» определенно нужен.
rturnbull




3

J , 18 17 байт

a.{~(#"0+&96)i.27

Объяснение:

              i.27      - list of integers 0 - 26
     (   +&96)          - adds 96 to the above list (starting offset of 'a')
      #"0               - copies the right argument left argument times  
  {~                    - select items from a list (arguments reversed)
a.                      - the whole alphabet


#"0 +&96 is a hook, which means that at first +96 is applied to the list i.27,
resulting in a list 96, 97, 98... 122, then #"0 is applied to this result. 
So it is evaluated as ((i.27)#"0(96+i.27)){a:

Попробуйте онлайн!



3

Октава , 25 24 байта

['',tril((x=65:90)'+~x)]

Попробуйте онлайн!

Сохранение одного байта благодаря Джузеппе, который сообщил мне, что OP допускает заглавные буквы.

Объяснение:

Создайте вектор xс ASCII-значениями алфавита верхнего регистра и транспонируйте его. Добавьте отрицательный x(то есть 26 нулей в строке вектора), чтобы создать сетку с (значениями ASCII):

AAAA
BBBB
CCCC

Возьмите нижнюю треугольную матрицу и преобразуйте в символы путем объединения с пустой строкой.


3

C (gcc) , 48 байтов 50 байтов

Перезапускаемая версия, согласно cleblanc и Steadybox в комментариях ниже.

s[9];main(i){for(;i<27;)puts(memset(s,i+95,i++));}

Попробуйте онлайн!


1
Хороший ответ. Я думаю, что ваша функция потерпит неудачу при следующем вызове, и по этой ссылке она должна быть повторно использована; codegolf.meta.stackexchange.com/questions/4939/…
cleblanc

Вот исправленная версия в 50 байтов: s[9];main(i){for(;i<27;)puts(memset(s,i+95,i++));}Все еще бьет мой ответ несколькими байтами :)
Steadybox


3

Japt, 17 16 11 байт

-5 байт благодаря Оливеру

В ИСО-8859-1

;26ÆCgX pXÄ

Не лучший результат, но я все еще новичок. Любые предложения очень приветствуются.

Выводит список строк, так как OP разрешен. Ссылка содержит еще 3 байта для новых строк.

Попробуйте онлайн!

;                      - Use string variables
 26                    - Literal 26
   Æ                   - For range 0..26
    C                  - Alphabet
     gX                -         . character at index X
        pXÄ            - Duplicate X+1 times
                       - End function (implicit)

1
Ницца! 1oBÊÄможно заменить на 26õ. Вы можете сэкономить еще пару байтов, сделав что-то вроде;26ÆCgX pXÄ
Оливер

@ Оливер Какого черта я не видел, что 26 короче длины алфавита ?! Спасибо. Кроме того, мой плохой я не нашел, что oпринимает fаргумент ...
RedClover
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.