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.

SpookyGengar
sumber
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

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.
Tuan Xcoder
sumber
21

Python 2 , 36 byte

i=1
exec'print chr(i+96)*i;i+=1;'*26

Cobalah online!

benar-benar manusiawi
sumber
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).

Uriel
sumber
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"
Laikoni
sumber
* 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!

Conor O'Brien
sumber
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.

MildlyMilquetoast
sumber
@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!

Jordan
sumber
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>

Arnauld
sumber
6

Excel VBA, 38 byte

Menggunakan Jendela Segera. :)

[A1:A26]="=REPT(CHAR(96+ROW()),ROW())"
remoel
sumber
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

BASH, 59 54 40 byte

for l in {a..z};{
a+=a
echo ${a//a/$l}
}

Cobalah online!

Terima kasih. 5 byte ke @Justin Mariner

Ipor Sircer
sumber
1
The forloop dapat golfed bawah menggunakan tip ini untuk 54 byte: Cobalah secara online!
Justin Mariner
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.

nama tampilan
sumber
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

V , 9 byte

¬az\ÓÎÛäl

Cobalah online!

Hexdump:

00000000: ac61 7a5c d3ce dbe4 6c                   .az\....l
DJMcMayhem
sumber
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
Luis Mendo
sumber
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

Python 3 , 37 byte

for k in range(27):print(chr(k+96)*k)

Mencetak baris baru terkemuka (yang diizinkan).

Cobalah online!

Luis Mendo
sumber
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)
Jonathan Allan
sumber
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'
Sanchises
sumber
@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++))};
NTCG
sumber
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.

Shaggy
sumber
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
DLosc
sumber
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
}
DLosc
sumber
3

Haskell , 31 byte

-12 byte terima kasih kepada nimi.

zipWith replicate[1..26]['a'..]

Cobalah online!

Ini bukan snippet, ini adalah fungsi nullary (yang tidak mengambil argumen) yang menampilkan daftar garis yang diperbolehkan karena konsensus meta ini .

benar-benar manusiawi
sumber
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.

rturnbull
sumber
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

Karat , 82 byte

||for i in 1..27u8{println!("{}",((i+96) as char).to_string().repeat(i as usize))}

Saya berharap bahwa itu akan menjadi jauh lebih pendek, tetapi secara eksplisit mengkonversi / casting antar tipe membutuhkan banyak byte :(

Cobalah online!

Wakawakamush
sumber
1
Saya mendapat 76 byte: Cobalah online!
Conor O'Brien
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 .

Titus
sumber
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!

Galen Ivanov
sumber
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.

Stewie Griffin
sumber
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!

gastropner
sumber
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)
RedClover
sumber
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