Tangga Alfabet


30

Tantangan

Tugas Anda adalah membuat program atau fungsi yang menampilkan yang berikut tanpa input:

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

Mencetak gol

Ini adalah , jadi jawaban tersingkat di setiap bahasa menang.


4
Keluaran sebagai daftar baris?
— totallyhuman

5
Bisakah kita menggunakan huruf besar sebagai gantinya?
— Uriel

9
Saya melewatkan tantangan alfabet! (tapi jangan biarkan Leaky Nun tahu)
— Luis Mendo

9
Saya bekerja sangat keras memeriksa apakah itu adalah penipuan dan ternyata tidak
— Biru

4
@ sebenarnya manusia itu terserah Anda.
— SpookyGengar

Jawaban:


14

05AB1E , 2 byte

Aƶ

Cobalah online!

Perhatikan bahwa output ini sebagai daftar garis, sebagaimana OP secara eksplisit diizinkan. Tautan menggunakan versi dengan cetak cantik (bergabung dengan baris baru).

Bagaimana itu bekerja

  • A menghasilkan alfabet huruf kecil.
  • ƶ mengangkat alfabet (mengalikan setiap elemen dengan indeksnya).
  • » bergabung dengan baris baru.


9

APL (Dyalog) , 12 8 5 byte SBCS

3 byte disimpan berkat @ngn

4 byte disimpan berkat @ Adám

⍴⍨⌸⎕A

OP huruf besar yang diklarifikasi adalah valid, serta output sebagai array string.

Cobalah online!

Bagaimana?

⌸memberi kita setiap huruf dalam ⎕Alphabet dengan indeks-nya di dalamnya, diserahkan ke fungsi ⍴⍨dengan huruf sebagai argumen kiri dan indeks es sebagai argumen yang tepat.

⍴⍨resha ⍴ es argumen kanan dengan panjang yang disediakan oleh yang kirinya. ⍨beralih ke kiri dan kanan (karena itu simbolnya, tampak seperti wajah seseorang yang membaca penjelasan ini).


819⌶↑⎕A⍴¨⍨⍳26
— Adem

@ Adam terima kasih! Saya mencoba semua variasi dari / dan \, bentuk yang sepenuhnya diabaikan ⍨
— Uriel

Anda juga bisa menghapusnya ↑.
— Adem

@ Adam tapi akan terlihat lebih buruk ⍨
— Uriel

Nyalakan tinju!
— Adem

8

Haskell , 27 byte

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

Cobalah online! Mengembalikan daftar garis. (Terima kasih kepada @totallyhuman untuk menunjukkan bahwa ini sekarang diperbolehkan)

Penjelasan:

             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"

* busur * Penjelasan untuk noob? Apakah <$mengulangi argumen pertamanya n kali, di mana n adalah panjang argumen kedua?
— totallyhuman

@totallyhuman Ini dia. Silakan bertanya di Monads and Men jika Anda memiliki pertanyaan lebih lanjut.
— Laikoni

Ada beberapa operator yang sangat menarik di Prelude ... Terima kasih atas penjelasannya!
— totallyhuman

7

brainfuck , 74 byte

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

Cobalah online!

Penjelasan

++++++++[>+>+++>++++++++++++<<<-]>++>++>+>+
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        <<.
                        >]

Cobalah online!


7

Befunge-98 (FBBI) , 27 byte

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

di mana karakter substitusi (ASCII 26)

Cobalah online!

Menggunakan huruf besar, dan memiliki baris tambahan.

Penjelasan

Kode berfungsi dengan menyimpan penghitung (awalnya 0), dan pada setiap loop:

  • 1+ - Menambahnya dengan 1
  • :0\:: - Mendorong sesuatu sehingga tumpukan terlihat seperti ini: bottom [N, 0, N, N, N] top
  • '`j'@ - Cek apakah penghitung lebih besar dari 26
    • j'@- Jika ya, kita melompati 'dan keluar menggunakan@
    • j'@- Jika tidak, kami menjalankan ', yang mendorong nilai ASCII @ke stack

Sekarang tumpukan terlihat seperti ini: bottom [N, 0, N, N, 64] top

  • +\- Tambah, lalu alihkan 2 teratas: bottom [N, 0, (N+64), N] top Pertama kali lewat, ini adalah ASCII 65, atauA
  • k:- Gandakan yang kedua dari waktu teratas (N+1)- sekarang ada (N+2)nilai (N+64)pada stack (ditambah Ndan 0dari sebelumnya)
  • $$- Buang nilai 2 teratas - sekarang hanya ada Nnilai(N+64)
  • >:#,_- Mencetak setiap nilai teratas hingga 0- ini berarti Nsalinan (N+64)cetak
  • $- Membuang 0- Sekarang tumpukan itu adilN
  • a, - Mencetak enter

Dan itu berulang


Saya suka bagaimana saya menggunakan @keduanya untuk mengakhiri program dan untuk menambah penghitung.


@JamesHolderness Yap. Terima kasih telah menangkap itu!
— MildlyMilquetoast

7

Ruby , 32 30 byte

-2 byte terima kasih kepada @EricDuminil.

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

Cobalah online!


1
Luar biasa. Menurut komentar oleh OP, mengikuti / memimpin baris baru diizinkan. Dalam hal ini 27.times{|n|puts (n+96).chr*n}akan benar dengan 30 byte
— Eric Duminil

6

JavaScript (ES6), 54 byte

f=(n=9)=>++n<36?n.toString(36).repeat(n-9)+`
`+f(n):''

O.innerText = f()
<pre id=O></pre>


6

Excel VBA, 38 byte

Menggunakan Jendela Segera. :)

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

Ah. Salahku. Saya pikir itu Excel karena saya menggunakan Fungsi Excel menggunakan Jendela Segera.
— remoel

Anda dapat menjatuhkan byte dengan menghapus terminal"
— Taylor Scott


5

Ruby, 38 byte

Mengembalikan Array string

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

-5 Bytes terima kasih untuk benar-benar manusia

* -11 byte berkat beberapa golf yang sangat baik dari Jordan.


Ini hanya 48 byte menurut hitungan saya .
— Jordan

1
Anda tidak perlu "\n"sama sekali; putsapakah itu untuk Anda (meskipun untuk referensi di masa depan $/adalah 2 byte lebih pendek) —tetapi Anda dapat menyingkirkan putsseluruhnya jika Anda menjadikan ini lambda yang baru saja mengembalikan array baris. Anda juga dapat mengubah a=[*?a..?z];puts a.mapke puts (a=*?a..?z).mapdan x*(a.index(x)+1)ke x*-~a.index(x). Secara keseluruhan itu 38 byte .
— Jordan

Versi 38-byte berfungsi dengan baik pada TiO (lihat tautan di komentar sebelumnya). Perhatikan bahwa (a=*?a..?z)ada di dalam blok, bukan bagian argumen dari lambda.
— Jordan


4

MATL , 9 byte

2Y2"@X@Y"

Cobalah online!

Penjelasan

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

Apakah Anda tahu mengapa &tidak dapat digunakan untuk menggandakan dan memindahkan2Y2 ?
— Stewie Griffin

@StewieGriffin &tidak benar-benar menggandakan dan memindahkan, meskipun terkadang menghasilkan hasil yang sama seperti itu. Apa yang dilakukannya adalah memodifikasi jumlah input / output dari fungsi selanjutnya. Misalnya, jika Anda menggunakan &+, +fungsi sekarang mengambil satu input, bukan dua, dan output jumlah input dengan dirinya sendiri ditransformasikan. Tapi itu hanya karena itulah cara + kerja dengan 1 input (sama untuk =, >dan beberapa lainnya)
— Luis Mendo


4

Jelly ,  5  4 byte

penyalahgunaan implementasi Python licik

-1 byte terima kasih kepada Adám (mengeluarkan daftar baris telah diizinkan; seperti, sekarang, telah menulis fungsi daripada program)

Øa×J

Tautan niladik yang mengembalikan daftar string, garis
(untuk mencetaknya dengan baris baru sebagai program lengkap, tambahkan Ykembali ).

Cobalah online! (footer memanggil tautan sebagai nilad (¢) dan mendapatkan representasi Python dari hasilnya (ŒṘ) untuk kejelasan karena perilaku program penuh default akan menghancurkan hasilnya bersama sepertiabbccc... )

Bagaimana?

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

1
Øa×J harus cukup .
— Adem

hmm, mungkin - kita dapat "menampilkan" daftar baris, tetapi kita harus "membuat program" - ketika berjalan sebagai program, output dari empat byter dihancurkan untuk tidak memiliki indikasi sifat daftar itu.
— Jonathan Allan

program atau fungsi
— Adám

4

MATL , 11 byte

2Y2t!g*!YRc

Cobalah online!

Menggunakan siaran multiplikasi dengan yang mendapatkan matriks besar 26x26 dari huruf yang diinginkan. Selanjutnya, bagian segitiga bawah diambil, dan dicetak secara implisit.

Juga 11 byte:

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

@StewieGriffin Saya sebenarnya setengah mengomentari jawaban Oktaf Anda tentang kebetulan datang dengan solusi yang sama.
— Sanchises

4

Javascript, 87 byte , 72 byte (Banyak terima kasih kepada @steenbergh)

Jawaban pertama saya juga:

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

Selamat datang! Sepertinya Anda dapat mempersingkat sedikit dengan menghapus spasi ind=1di sekitar pada awal, titik koma setelah i<123dan titik koma akhir. juga, harap buat tajuk Anda sedikit lebih jelas dengan menyebutkan bahasa - bytecount, diawali dengan #.
— steenbergh

Anda dapat menyimpan enam byte dengan menjatuhkan jsemuanya:for(i=1;i<27;){console.log(String.fromCharCode(i+96).repeat(i++))}
— steenbergh

@steenbergh terima kasih sekali lagi, Anda baik sekali membantu Anda.
— NTCG

4

Japt , 9 7 byte

Menghasilkan array garis

;C¬Ëp°E

Cobalah


Penjelasan

Membagi ( ¬) huruf kecil ( ;C) ke array karakter, memetakan di atas array ( Ë) dan ulangi ( p) elemen saat ini dengan indeks saat ini ( E) bertambah ( °) kali.


Persis seperti yang saya miliki, kecuali saya gunakan®p°Y
— ETHproduk

3

Pip , 9 byte

FczPcX++i

Cobalah online!

Dalam pseudocode, ini

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

di mana ztelah diatur ke huruf kecil dani preset ke 0.


Solusi berbasis peta membutuhkan satu byte tambahan karena mereka membutuhkan -nbendera untuk ditampilkan pada banyak baris:

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

3

Acc !! , 66 byte

Count i while 26-i {
Count j while i+1-j {
Write 97+i
}
Write 10
}

Cobalah online!

Dengan komentar

# Loop i from 0 to 25
Count i while 26-i {
    # Loop j from 0 to i (inclusive)
    Count j while i+1-j {
        # Print a letter
        Write 97+i
    }
    # Print a newline
    Write 10
}


3

R , 38 byte

Jawaban yang relatif tidak menarik. Iterate imulai dari 1 hingga 26, cetak ihuruf ke-alfabet ikali (dengan jeda baris tersirat).

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

Cobalah online!

Pendekatan yang lebih menarik mungkin menggunakan sesuatu seperti berikut:

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

Ini memberi kita semua huruf dalam jumlah yang tepat, tetapi tidak ada linebreak. Mungkin seseorang yang lebih pintar dari saya dapat menemukan cara untuk menggunakannya untuk membuat jawaban golf.


2
Saya tidak yakin bagaimana menggunakan pendekatan kedua Anda, juga, tapi saya tahu itu rep(letters, 1:26)jauh lebih pendek ...
— Giuseppe

@Giuseppe Hah! Seperti yang saya katakan, "seseorang yang lebih pintar dari saya" pasti dibutuhkan.
— rturnbull



3

PHP, 47 46 byte

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

atau

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

Jalankan dengan -nratau coba online .


3

J , 18 17 byte

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

Penjelasan:

              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:

Cobalah online!



3

Oktaf , 25 24 byte

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

Cobalah online!

Disimpan satu byte berkat Giuseppe yang memberi tahu saya bahwa OP memungkinkan huruf besar.

Penjelasan:

Buat vektor xdengan nilai ASCII dari alfabet huruf besar, dan transposkan. Tambahkan negated x(dengan demikian 26 nol, dalam vektor baris, untuk membuat kisi dengan (nilai ASCII):

AAAA
BBBB
CCCC

Ambil matriks segitiga bawah dan konversikan ke karakter dengan menggabungkan dengan string kosong.


3

C (gcc) , 48 byte 50 byte

Re-runnable versi, sesuai cleblanc dan Steadybox di komentar di bawah.

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

Cobalah online!


1
Jawaban bagus. Saya pikir fungsi Anda akan gagal saat lain kali dipanggil dan menurut tautan ini harus digunakan kembali; codegolf.meta.stackexchange.com/questions/4939/…
— cleblanc

Berikut adalah versi tetap dalam 50 byte: s[9];main(i){for(;i<27;)puts(memset(s,i+95,i++));}Masih mengalahkan jawaban saya dengan beberapa byte :)
— Steadybox


3

Japt, 17 16 11 byte

-5 byte terima kasih kepada Oliver

Dalam ISO-8859-1

;26ÆCgX pXÄ

Bukan skor terbaik, tapi saya masih pemula. Setiap saran sangat diterima.

Keluarkan daftar garis, jika OP diizinkan. Tautan berisi 3 byte lebih banyak untuk baris baru.

Cobalah 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
Bagus! 1oBÊÄdapat digantikan oleh 26õ. Anda dapat menyimpan beberapa byte lagi dengan melakukan sesuatu seperti;26ÆCgX pXÄ
— Oliver

@ Oliver Bagaimana sih aku tidak melihat bahwa 26 lebih pendek dari panjang alfabet ?! Terima kasih. Juga, of
— salahku
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.