Заплутана сходи алфавіту


25

З огляду на відсутність вводу, виведіть цей цікавий алфавітний шаблон в будь-якому випадку (випадок має бути узгодженим) за допомогою прийнятого способу виводу :

А
AB
ACBC
ADBDCD
AEBECEDE
AFBFCFDFEF
AGBGCGDGEGFG
AHBHCHDHEHFHGH
AIBICIDIEIFIGIHI
AJBJCJDJEJFJGJHJIJ
AKBKCKDKEKFKGKHKIKJK
ALBLCLDLELFLGLHLILJLKL
AMBMCMDMEMFMGMHMIMJMKMLM
ANBNCNDNENFNGNHNINJNKNLNMN
AOBOCODOEOFOGOHOIOJOKOLOMONO
APBPCPDPEPFPGPHPIPJPKPLPMPNPOP
AQBQCQDQEQFQGQHQIQJQKQLQMQNQOQPQ
ARBRCRDRERFRGRHRIRJRKRLRMRNRORPRQR
ASBSCSDSESFSGSHSISJSKSLSMSNSOSPSQSRS
ATBTCTDTETFTGTHTITJTKTLTMTNTOTPTQTRTST
AUBUCUDUEUFUGUHUIUJUKULUMUNUOUPUQURUSUTU
AVBVCVDVEVFVGVHVIVJVKVLVMVNVOVPVQVRVSVTVUV
AWBWCWDWEWFWGWHWIWJWKWLWMWNWOWPWQWRWSWTWUWVW
AXBXCXDXEXFXGXHXIXJXKXLXMXNXOXPXQXRXSXTXUXVXWX
AYBYCYDYEYFYGYHYIYJYKYLYMYNYOYPYQYRYSYTYUYVYWYXY
AZBZCZDZEZFZGZHZIZJZKZLZMZNZOZPZQZRZSZTZUZVZWZXZYZ

Додаткові пробіли та нові рядки прийнятні, стандартні лазівки заборонені, і це, як правило, , тому найкоротша відповідь у байтах виграє!



До речі, якщо я побачу дивовижну відповідь, я
зароблю

13
Ведучий Aнасправді псує речі для мене ...
ETHproductions

2
Деякі люди просто не люблять подібні виклики, я думаю.
Джонатан Аллан

1
@ETHproductions Це спрощує речі для мене!
Ніл

Відповіді:


5

Полотно , 7 байт

Z[K*¹+]

Спробуйте тут!

Пояснення:

Z[     ] for each prefix of the uppercase alphabet
    K        pop off the last letter
     *       and join the rest of the string with that character
      ¹+     and append the current iterated character to it

Чому ви не відредагували попередню відповідь?
Ніл

@Neil гарне запитання. Не впевнений
dzaima

Прийнято! Ви биєте желе і вугілля двома байтами!
FantaC

8

Желе , 9 байт

ØAjṪ$Ƥż¹Y

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

Як це працює

ØAjṪ$Ƥż¹Y  Main link. No arguments.

ØA         Yield "ABCDEFGHIJKLMNOPQRSTUVWXYZ".
     Ƥ     Map the link to the left over all prefixes, i.e., ["A", "AB", ...].
    $        Combine the two links to the left into a chain.
   Ṫ           Tail; yield and remove the last letter of each prefix.
  j            Join the remainder, using that letter as separator.
      ż¹   Zip the resulting strings and the letters of the alphabet.
        Y  Separate the results by linefeeds.

2
О, ха-ха, і я ось-ось збирався відправити повідомлення ØAjṪ$ƤżØAY: D
Джонатан Аллан


6

R , 50 байт

l=LETTERS
for(i in 0:25)cat(l[0:i],"
",sep=l[i+1])

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

Можливо, найрозумніша частина тут використовується letters[0]для порожнього рядка, щоб дістати cat(character(0),'\n',sep="A")до друку першого рядка.




4

Рутинна машина-код 6502 (C64), 39 байт

A9 41 20 D2 FF AA A8 84 FB E4 FB B0 0B 8A 20 D2 FF 98 20 D2 FF E8 D0 F1 A9 0D
20 D2 FF A2 41 C0 5A F0 03 C8 D0 E1 60

Підпрограма машинного коду, незалежна від позиції, клобери A, X та Y.

Демонстрація в Інтернеті

Демо-версія завантажується $C000, тому використовуйте SYS49152для виклику звичайної програми.


Прокоментували розбирання:

A9 41       LDA #$41            ; 'A'
20 D2 FF    JSR $FFD2           ; Kernal CHROUT (output character)
AA          TAX                 ; copy to X (current pos)
A8          TAY                 ; copy to Y (current endpos)
  .outerloop:
84 FB       STY $FB             ; endpos to temporary
  .innerloop:
E4 FB       CPX $FB             ; compare pos with endpos
B0 0B       BCS .eol            ; reached -> do end of line
8A          TXA                 ; current pos to accu
20 D2 FF    JSR $FFD2           ; and output
98          TYA                 ; endpos to accu
20 D2 FF    JSR $FFD2           ; and output
E8          INX                 ; next character
D0 F1       BNE .innerloop      ; (repeat)
  .eol:
A9 0D       LDA #$0D            ; load newline
20 D2 FF    JSR $FFD2           ; and output
A2 41       LDX #$41            ; re-init current pos to 'A'
C0 5A       CPY #$5A            ; test endpos to 'Z'
F0 03       BEQ .done           ; done when 'Z' reached
C8          INY                 ; next endpos
D0 E1       BNE .outerloop      ; (repeat)
  .done:
60          RTS

3

Java 8, 93 91 90 байт

v->{String t="";for(char c=64;++c<91;t+=c)System.out.println(t.join(c+"",t.split(""))+c);}

-1 байт завдяки @ OlivierGrégoire , друкуючи безпосередньо замість повернення

Пояснення:

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

v->{                     // Method with empty unused parameter and String return-type
  String t="";           //  Temp-String, starting empty
  for(char c=64;++c<91;  //  Loop over the letters of the alphabet:
      t+=c)              //    After every iteration: append the letter to the temp-String
    System.out.println(  //   Print with trailing new-line:
       r.join(c+"",t.split(""))
                         //    The temp-String with the current letter as delimiter
       +c);}             //    + the current letter as trailing character 

2
90 байт (просто використовуючи stdout замість повернення).
Олів'є Грегоар

Гарна відповідь! Я переніс до C #, щоб побачити, чи він коротший, і я отримав 91 (більше, якщо я включаю System.) :)
aloisdg каже: Відновити Моніку

3

SNOBOL4 (CSNOBOL4) , 169 143 байт

i &ucase len(x) . r len(1) . s
 o =
 i =
t r len(i) len(1) . k :f(o)
 o =o s k
 i =i + 1 :(t)
o o s =
 output =o s
 x =lt(x,25) x + 1 :s(i)
end

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

i &ucase len(x) . r len(1) . s	;* set r to the first x characters and s to the x+1th.
 o =				;* set o,i to empty string
 i =
t r len(i) len(1) . k :f(o)	;* set k to the ith letter of r. on failure (no match), go to o.
 o =o s k			;* concatenate o,s,k
 i =i + 1 :(t)			;* increment i, goto t
o o s =				;* remove the first occurrence of s (the first character for x>1, and nothing otherwise)
 output =o s			;* output o concatenated with s
 x =lt(x,25) x + 1 :s(i)	;* increment x, goto i if x<25.
end

Проблема тут - перший рядок

використання o s kдодасть додатковий sсимвол епаратора на початку кожного рядка, а також не матиме sнаприкінці. Це нормально, оскільки рядок tбуде переходити через наступні два рядки, коли x=0. Це означає, що oвсе ще буде порожнім. Отже, o s =буде видалено перший sсимвол із o, і тоді ми можемо просто надрукувати, o sщоб мати відповідний останній s.


2

JavaScript (ES6), 81 байт

f=
_=>[..."ABCDEFGHIJKLMNOPQRSTUVWXYZ"].map((c,i,a)=>a.slice(0,i).join(c)+c).join`
`
;document.write('<pre>'+f());

Збережіть 9 байт, якщо прийнятне значення масиву рядків є прийнятним.


2

Japt ( -Rпрапор), 14 12 байт

-2 байти завдяки @Shaggy

;B¬
ËiU¯E qD

Перевірте це в Інтернеті!


Якби тільки був ярлик для s0,! ; p
Кудлатий

12 байт . Але чому ти тут не рахуєш -R?
Кудлатий

@Shaggy О, ух, я знав, що мені щось не вистачає: P iТрюк чудовий, дякую! Щодо прапора, то, мабуть, існує новий консенсус щодо того, що кожне унікальне виклик програми слід вважати окремою мовою. (через що система прапора Джапта здається наче хитрою ...)
ETHproductions


2

PowerShell , 56 байт

"A";65..89|%{([char[]](65..$_)-join[char]++$_)+[char]$_}

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

Цикл 65для 89кожної ітерації, що створює charмасив з 65поточного числа $_, потім -joins, що збирає масив, в рядок із наступним символом, а потім вписується на цей символ в кінці.

Змініть номер 89на якийсь інший номер ASCII, щоб побачити поведінку краще.


2

> <> , 44 34 байт

"BA"oao"ZA"\=?;1+40.
o1+:{::o}=?\:

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

> <> , 44 байти

"A"o10ao\55*=?;1+40.
1+:{:}=?\:"A"+o{:}"A"+o

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

Оскільки я використовую інший маршрут для отримання результату, я розмістив свою власну відповідь; Іншу відповідь можна знайти тут.

Велика подяка Джо Кінгу за те, що він помітив, мені не потрібно було продовжувати ставити "А" на стек, якщо я просто порівняв зі "Z" замість 26. (-10 байт)

Пояснення

Пояснення буде слідувати потоку коду.

"BA"                 : Push "BA" onto the stack;
                       [] -> [66, 65]
    oao              : Print the stack top then print a new line;
                       [66, 65] -> [66]
       "ZA"\         : Push "ZA" onto the stack then move down to line 2;
                       [66, 90, 65]
o          \:        : Duplicate the stack top then print
 1+:                 : Add one to the stack top then duplicate;
                       [66, 90, 65, 65]
    {::              : Shift the stack right 1 place then duplicate the stack top twice;
                       [90, 65, 65, 66, 66]
       o}            : Print the stack top then shift the stack left 1 place;
                       [66, 90, 65, 65, 66]
         =?\         : Comparison for equality on the top 2 stack items then move to line 1 if equal otherwise continue on line 2;
                       [66, 90, 65]
           \=?;      : Comparison for equality on the top 2 stack items then quit if equal else continue on line 1;
                       [66]
               1+    : Add 1 to the stack top;
                       [67]
                 40. : Move the code pointer to column 4 row 0 of the code box and continue execution of code. 

36 байт . Ваш метод набагато кращий, ніж мій
Джо Кінг

inb4 "закреслено 44 все ще 44; ("
Jo King

@JoKing Відмінне місце в порівнянні з Z, лише покращення, яке я зробив, - це переміщення логіки ліній і розміщення Z посередині елементів стека, щоб зберегти використання цих лапок знову.
Тілі пелікан



1

Желе , 13 байт

ØA¹Ƥ+"¹Ṗ€Yṭ”A

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

Пояснення

ØA¹Ƥ+"¹Ṗ€Yṭ”A  Main Link
ØA              Uppercase Alphabet
  ¹Ƥ            Prefixes
    +"¹         Doubly-vectorized addition to identity (uppercase alphabet) (gives lists of lists of strings)
       Ṗ€      a[:-1] of each (get rid of the double letters at the end)
         Y     Join on newlines
          ṭ”A  "A" + the result

частково зловживає тим, як рядки та списки символів відрізняються в Jelly


Це було швидко!
FantaC

@tfbninja ehhh, 11 хвилин добре для Jelly. спасибі хоч: P
HyperNeutrino

Ви можете замінити другий ØAз ¹(наприклад , Дениса)
Jonathan Allan

@JonathanAllan о здорово, спасибі!
HyperNeutrino


1

APL + WIN, 51 байт

⍎∊'a←⎕av[65+⍳26]⋄a[n←1]',25⍴⊂'⋄,⊃a[⍳n-1],¨a[n←n+1]'

Пояснення:

a←⎕av[65+⍳26] create a vector of upper case letters

a[n←1] first A

25⍴⊂'⋄,⊃a[⍳n-1],¨a[n←n+1]' create an implicit loop to concatenate subsequent letters

1

> <> , 47 байт

d2*:1-v
-&$:?!\$:&$:1
1-:?!v\69*-$1-:
+*88~< 1o

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

Як це працює:

d2*:1-v Initialise the stack with 26 (outer loop counter) and 26-1 (inner loop counter)
....
....
....

....
-&$:?!\$:&$:1 Repeatedly make copies of both counters
....          And decrement the inner loop counter
....          Go to third line when inner loop counter is 0

....            Add -54 to the stack (for the newline) and decrement the outer loop counter
....            Initialise the inner loop counter as outer-1
1-:?!v\69*-$1-: If the inner counter is 0, go to the fourth line, else back to the second.
....

....
....      
....      Transform numbers and -54s into letters and newlines by adding 64
+*88~< 1o Output each character until it runs out of stack and errors



1

GNU M4, 119 байт

Найгірше поки що. Ну, час уже витрачено ...

define(f,`ifelse($1,$2,,`format(%c%c,$1,$2)`'f(incr($1),$2)')')define(g,`f(65,$1)ifelse($1,90,,`
g(incr($1))')')A
g(66)

1

Лушпиння , 13 байт

Γ·:mhSzJḣ…"AZ

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

Пояснення

Цей ведучий Aдійсно псує речі до -.-

          "AZ  -- string literal: "AZ"
         …     -- fill gaps: "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
     S         -- with alphabet and
        ḣ      -- | alphabet rangified: ["A","AB","ABC",…,"AB……XYZ"]
      zJ       -- : zipWith join: ["A","ABB","ACBCC","ADBDCDD",…,"AZB……ZYZZ"]
Γ              -- pattern match (x:xs) with the following function (x is "A" and xs ["ABB","ACBCC",…,"A……ZYZZ"]
 · mh          -- | drop the last element of each element of xs: ["AB","ACBC",…,"A……ZYZ"]
  :            -- | cons (construct list): ["A","AB","ACBC",…,"A……ZYZ"]
               -- : strings are printed implicitly

1

C # (.NET Core)

Порт від Кевіна Cruijssen в відповідь :

91 90 байт

_=>{var t="";for(char c='@';++c<91;t+=c)Console.WriteLine(string.Join(c+"",t.Skip(0))+c);}

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

132 122 110 109 104 103 байт

_=>"ABCDEFGHIJKLMNOPQRSTUVWXYZ".Select((c,i)=>string.Join(""+c,"ABCDEFGHIJKLMNOPQRSTUVWXYZ".Take(i))+c)

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

  • Замініть ()на, _щоб показати, що ми оголошуємо невикористану змінну. Дякую Кевін Кройсейсен.

Ви також можете зменшити його до 90 байт, використовуючи порожній невикористаний параметр, як я це робив у своїй відповіді на Java. Так o=>{...}замість ()=>{...}. Спробуйте в Інтернеті: 90 байт .
Кевін Кройсейсен

@KevinCruijssen я не знав! Дякую!
aloisdg повідомляє відновити Моніку


1

Желе , 22 байти

ØAż€Ð€`F€µJ’Ḥ»1ż@¹ḣ/€Y

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

Як це працює:

                       take argument implicitly
ØA                     the uppercase alphabet
    Ѐ`                for C in the alphabet
  ż€                     appends C to every letter in the alphabet
       F€              flatten every sublist
          J            get indices
           ’           subtract 1
            Ḥ          and double
             »1        take max([n, 1])
         µ     ż@¹     interleave alphabet list and indices
                  ḣ/€  reduce on head() for each element
                     Y join on newline
                       implicitly output




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