Запутанная Алфавитная Лестница


25

При отсутствии ввода выведите этот интересный алфавитный шаблон в любом случае (случай должен быть согласованным) с помощью принятого метода вывода :

A
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

Почему вы не отредактировали свой предыдущий ответ?
Нил

@ Хороший вопрос. Не уверен
Дзайма

Принято! Вы победили Желе и Древесный уголь на два байта!
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 байтов (просто используя стандартный вывод вместо возврата).
Оливье Грегуар

Хороший ответ! Я портировал на C #, чтобы посмотреть, был ли он короче, и я получил 91 (больше, если я System.
включу

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здесь?
Лохматый

@ Шэгги Ого, я знал, что что-то упустил: P iТрюк отличный, спасибо! Что касается флага, то, как представляется, существует новый консенсус в отношении того, что каждый уникальный вызов программы следует рассматривать как отдельный язык. (из-за чего система флагов Джапта кажется обманчивой ...)
ETHproductions


2

PowerShell , 56 байт

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

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

Петли , 65чтобы 89, каждая итерацию построения charмассива 65с текущим номером $_, а затем -joinс , что массив вместе в строку с следующим символом, а затем Гвозди на этом символ в конце.

Измените на 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; ("
Джо Кинг

@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 Эххх, 11 минут для Желе. хотя спасибо: 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)

Порт от ответа Кевина Круйссена :

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 говорит восстановить Монику

@KevinCruijssen Я добавил этот совет к советам по игре в код на C #
aloisdg говорит восстановить Monica

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.