Абетка сходи


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
Мені не вистачало проблем із алфавітом! (але не повідомляйте Leaky Nun про це)
Луїс Мендо

9
Я дуже важко працював, перевіряючи, чи це дур, і, мабуть, це не так
Синій

4
@totallyhuman це залежить від вас.
SpookyGengar

Відповіді:


14

05AB1E , 2 байти

Спробуйте в Інтернеті!

Зауважте, що це виводиться у вигляді списку рядків, як явно дозволено ОП. Посилання використовує версію з симпатичним друком (приєднався до нових рядків).

Як це працює

  • A виходить з малої букви.
  • ƶ піднімає алфавіт (множує кожен елемент на його індекс).
  • » приєднується за новими лініями.


9

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

3 байти збережено завдяки @ngn

4 байти збережено завдяки @ Adám

⍴⍨⌸⎕A

ОП уточнили прописні букви дійсні, а також вихід в вигляді масиву рядків.

Спробуйте в Інтернеті!

Як?

дає нам кожну букву в ⎕Alphabet із вписаними в ній індексами, переданими у функцію ⍴⍨з буквою як лівим аргументом та індексом es як правильним аргументом.

⍴⍨Resha ес його правий аргумент довжини , наданої її лівої. перемикає ліворуч і праворуч (тому його символ, схожий на обличчя того, хто читає це пояснення).


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

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

Ти можеш видалити .
Адам

@ Adám, але це виглядатиме потворніше ⍨
Уріель

Увімкніть бокс!
Адам

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"

* луки * Пояснення для noob? Чи <$повторює свій перший аргумент 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з попередніх)
  • $$- Викиньте перші два значення - тепер є лише Nзначення(N+64)
  • >:#,_- Друкує кожне найвище значення, поки воно не потрапить до 0- це означає Nкопії(N+64) будуть надруковані
  • $- Відкидає 0- Тепер стек простоN
  • a, - Друкує запис

І це повторюється


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


@JamesHolderness Так. Дякуємо, що це зробили!
MildlyMilquetoast



6

Excel VBA, 38 байт

Використання негайного вікна. :)

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

Ага. Моє ліжко. Я думав, що це Excel, тому що я використовував функції Excel за допомогою негайного вікна.
remoel

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


5

Рубін, 38 байт

Повертає масив рядків

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

-5 байт завдяки абсолютнолюдському

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



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 входом (те саме =, >і деякі інші)
Луїс Мендо


4

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

підлість зловживання впровадженням Python

-1 байт завдяки Adám (вихід списку рядків дозволено; так як зараз є написання функції, а не програми)

Ø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)


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

програма або функція
Adám

4

MATL , 11 байт

2Y2t!g*!YRc

Спробуйте в Інтернеті!

Використовує трансляцію множення з одиницями, щоб отримати матрицю великої площі 26х26 потрібних літер. Далі береться нижня трикутна частина і неявно друкується.

Також 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та остаточну крапку з комою. також, будь ласка, зробіть свій заголовок дещо чіткішим, вказавши мову - побічний рахунок, з префіксом #.
steenbergh

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

@steenbergh ще раз дякую, як ви добрі, що допоможете мені.
NTCG

4

Япт , 9 7 байт

Виводить масив рядків

;C¬Ëp°E

Спробуй це


Пояснення

Розділіть ( ¬) невеликий алфавіт ( ;C) на масив символів, наведіть на масив ( Ë) і повторіть ( p) поточний елемент на поточний індекс ( E), збільшений ( °) разів.


Саме те, що я мав, крім того, що я використав®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)це набагато коротше ...
Джузеппе

@Giuseppe Га! Як я вже сказав, "хтось розумніший за мене", безумовно, потрібен.
rturnbull



3

PHP, 47 46 bytes

for($c=a;$i<26;)echo"
",str_pad($c,++$i,$c++);

or

for($c=a;$i<26;)echo str_pad("
",++$i+1,$c++);

Run with -nr or try it online.


3

J, 18 17 bytes

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

Explanation:

              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:

Try it online!



3

Octave, 25 24 bytes

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

Try it online!

Saved one byte thanks to Giuseppe who informed me that OP allows upper case letters.

Explanation:

Create a vector x with the ASCII-values of the upper case alphabet, and transpose it. Add the negated x (thus 26 zeros, in a row vector, in order to create a grid with (the ASCII-values of):

AAAA
BBBB
CCCC

Take the lower triangular matrix and convert to characters by concatenating with the empty string.


3

C (gcc), 48 bytes 50 bytes

Re-runnable version, as per cleblanc and Steadybox in the comments below.

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

Try it online!


1
Nice answer. I think your function will fail the next time it's called and according to this link it should be re-useable; codegolf.meta.stackexchange.com/questions/4939/…
cleblanc

Here's a fixed version in 50 bytes: s[9];main(i){for(;i<27;)puts(memset(s,i+95,i++));} Still beats my answer by a few bytes :)
Steadybox


3

Japt, 17 16 11 bytes

-5 bytes thanks to Oliver

In ISO-8859-1

;26ÆCgX pXÄ

Not the best score, but I'm still a novice. Any suggestions are very welcome.

Outputs list of lines, as OP allowed. Link contains 3 bytes more for newlines.

Try it online!

;                      - 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
Nice! 1oBÊÄ can be replaced by 26õ. You can save a couple more bytes by doing something like ;26ÆCgX pXÄ
Oliver

@Oliver How the heck I didn't see that 26 is shorter than alphabet length?! Thanks. Also, my bad I didn't found that o takes the f argument...
RedClover
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.