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

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.