Bảng chữ cái cầu thang


30

Các thách thức

Nhiệm vụ của bạn là tạo ra một chương trình hoặc chức năng đầu ra như sau mà không có đầu vào:

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

Chấm điểm

Đây là , vì vậy câu trả lời ngắn nhất trong mỗi ngôn ngữ sẽ thắng.


4
Đầu ra như danh sách các dòng?
hoàn toàn là

5
Chúng ta có thể sử dụng bảng chữ cái viết hoa thay thế?
Uriel

9
Tôi đã bỏ lỡ những thách thức bảng chữ cái! (nhưng đừng để Leaky Nun biết)
Luis Mendo

9
Tôi đã làm việc rất chăm chỉ để kiểm tra xem đó có phải là một bản dupe hay không và dường như không phải vậy
Blue

4
@totallyhuman đó là tùy thuộc vào bạn.
SpookyGengar

Câu trả lời:


14

05AB1E , 2 byte

Hãy thử trực tuyến!

Lưu ý rằng điều này xuất ra dưới dạng một danh sách các dòng, như OP cho phép rõ ràng. Liên kết sử dụng một phiên bản có in đẹp (được nối bởi dòng mới).

Làm thế nào nó hoạt động

  • A mang lại bảng chữ cái viết thường.
  • ƶ nâng bảng chữ cái (nhân mỗi phần tử với chỉ số của nó).
  • » tham gia theo dòng mới.


9

APL (Dyalog) , 12 8 5 byte SBCS

3 byte được lưu nhờ @ngn

4 byte được lưu nhờ vào @ Adám

⍴⍨⌸⎕A

Các chữ cái viết hoa OP làm rõ là hợp lệ, cũng như đầu ra dưới dạng một chuỗi các chuỗi.

Hãy thử trực tuyến!

Làm sao?

cung cấp cho chúng tôi mọi chữ cái trong ⎕Alph.us với các chỉ mục của nó trong đó, được đưa vào hàm ⍴⍨với chữ cái là đối số bên trái và chỉ số es là đối số bên phải.

⍴⍨khôi phục lại đối số bên phải của nó với độ dài được cung cấp bởi bên trái của nó. chuyển sang trái và phải (do đó là biểu tượng của nó, trông giống như khuôn mặt của ai đó đang đọc lời giải thích này).


819⌶↑⎕A⍴¨⍨⍳26
Adám

@ Adám cảm ơn! Tôi đã thử tất cả các biến thể của / và \, hoàn toàn bỏ qua hình dạng
Uriel

Bạn có thể loại bỏ quá.
Adám

@ Adám nhưng nó sẽ trông xấu hơn ⍨
Uriel

Bật quyền anh lên!
Adám

8

Haskell , 27 byte

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

Hãy thử trực tuyến!Trả về một danh sách các dòng. (Cảm ơn @totallyhuman đã chỉ ra rằng điều này hiện đã được cho phép)

Giải trình:

             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"

* cung * Giải thích cho một noob? Có <$lặp lại đối số thứ nhất n lần không, trong đó n là độ dài của đối số thứ hai?
hoàn toàn là

@totallyhuman Có bạn đi. Hãy hỏi trong Monads and Men nếu bạn có thêm câu hỏi.
Laikoni

Có một số toán tử rất thú vị trong Prelude ... Cảm ơn bạn đã giải thích!
hoàn toàn là

7

Brainfuck , 74 byte

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

Hãy thử trực tuyến!

Giải trình

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

Hãy thử trực tuyến!


7

Befunge-98 (FBBI) , 27 byte

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

Ở đâu là một nhân vật thay thế (ASCII 26)

Hãy thử trực tuyến!

Sử dụng chữ in hoa và có một dòng mới.

Giải trình

Mã này hoạt động bằng cách lưu trữ bộ đếm (0 ban đầu) và trên mỗi vòng lặp:

  • 1+ - Tăng thêm 1
  • :0\:: - Đẩy mọi thứ để ngăn xếp trông như thế này: bottom [N, 0, N, N, N] top
  • '`j'@ - Kiểm tra nếu bộ đếm lớn hơn 26
    • j'@- Nếu có, chúng tôi nhảy qua 'và thoát bằng cách sử dụng@
    • j'@- Nếu không, chúng tôi sẽ thực thi ', đẩy giá trị ASCII của @ngăn xếp lên

Bây giờ ngăn xếp trông như thế này: bottom [N, 0, N, N, 64] top

  • +\- Thêm, sau đó chuyển sang đầu 2: bottom [N, 0, (N+64), N] top Lần đầu tiên, đây là ASCII 65 hoặcA
  • k:- Sao y lần thứ hai từ (N+1)thời gian trên cùng - bây giờ có (N+2)các giá trị (N+64)trên ngăn xếp (cộng với N0 từ trước đó)
  • $$- Vứt bỏ 2 giá trị hàng đầu - bây giờ chỉ còn Ncác giá trị của(N+64)
  • >:#,_- In từng giá trị hàng đầu cho đến khi nó đạt đến 0- điều này có nghĩa là các Nbản sao (N+64)được in
  • $- Ném đi 0- Bây giờ ngăn xếp chỉ làN
  • a, - In một mục nhập

Và nó lặp lại


Tôi thích cách tôi sử dụng @cả hai để kết thúc chương trình và thêm vào quầy.


@JamesHoldiness Yep. Cảm ơn đã bắt nó!
MildlyMilquetoast

7

Ruby , 32 30 byte

-2 byte nhờ @EricDuminil.

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

Hãy thử trực tuyến!


1
Xuất sắc. Theo nhận xét của OP, các dòng mới / hàng đầu được phép. Trong trường hợp 27.times{|n|puts (n+96).chr*n}đó sẽ đúng với 30 byte
Eric Duminil


6

VBA Excel, 38 byte

Sử dụng cửa sổ ngay lập tức. :)

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

À. Lỗi của tôi. Tôi nghĩ đó là Excel vì tôi đã sử dụng Hàm Excel bằng Cửa sổ ngay lập tức.
lại

Bạn có thể giảm một byte bằng cách xóa thiết bị đầu cuối"
Taylor Scott


5

Ruby, 38 byte

Trả về một chuỗi các chuỗi

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

-5 byte nhờ hoàn toàn nhân đạo

* -11 byte nhờ một số hoạt động golf tuyệt vời của Jordan.


Đây chỉ là 48 byte tính của tôi .
Jordan

1
Bạn không cần "\n"gì cả; putslàm điều đó cho bạn (mặc dù để tham khảo trong tương lai $/ngắn hơn 2 byte), nhưng bạn có thể loại bỏ putshoàn toàn nếu bạn thực hiện điều này một lambda chỉ trả về một mảng các dòng. Bạn cũng có thể thay đổi a=[*?a..?z];puts a.mapthành puts (a=*?a..?z).mapx*(a.index(x)+1)sang x*-~a.index(x). Tất cả cùng nhau đó là 38 byte .
Jordan

Phiên bản 38 byte hoạt động tốt trên TiO (xem liên kết trong bình luận trước). Lưu ý rằng phần (a=*?a..?z)bên trong khối, không phải là phần đối số của lambda.
Jordan


4

MATL , 9 byte

2Y2"@X@Y"

Hãy thử trực tuyến!

Giải trình

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

Bạn có biết tại sao &không thể được sử dụng để nhân đôi và hoán vị2Y2 ?
Stewie Griffin

@StewieGriffin &không thực sự trùng lặp và hoán vị, mặc dù đôi khi nó tạo ra kết quả tương tự như vậy. Những gì nó làm là sửa đổi số lượng đầu vào / đầu ra của chức năng tiếp theo. Ví dụ: nếu bạn sử dụng &+, +hàm bây giờ sẽ lấy một đầu vào thay vì hai và xuất tổng của đầu vào với chính nó được hoán chuyển. Nhưng đó chỉ vì đó là cách + làm việc với 1 đầu vào (tương tự cho =, >và một số người khác)
Luis Mendo


4

Thạch ,  5  4 byte

Lén lút thực hiện Python lạm dụng

-1 byte nhờ Adám (xuất ra một danh sách các dòng đã được cho phép; vì, hiện tại, đã viết một hàm chứ không phải là một chương trình)

Øa×J

Một liên kết niladic trả về một danh sách các chuỗi, các dòng
(để in nó với các dòng mới dưới dạng một chương trình đầy đủ chỉ cần thêm Ylại ).

Hãy thử trực tuyến! (chân trang gọi liên kết là nilad (¢) và nhận được biểu diễn Python của kết quả (ŒṘ) để rõ ràng vì hành vi toàn chương trình mặc định sẽ đập kết quả như nhauabbccc... )

Làm sao?

Ø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 nên là đủ .
Adám

hmm, có lẽ - chúng ta có thể "xuất" một danh sách các dòng, nhưng chúng ta phải "tạo một chương trình" - khi chạy như một chương trình, đầu ra của bốn byter bị phá vỡ để không có dấu hiệu nào về bản chất danh sách của nó.
Jonathan Allan

chương trình hoặc chức năng
Adám

4

MATL , 11 byte

2Y2t!g*!YRc

Hãy thử trực tuyến!

Sử dụng phép nhân phát sóng với các phép nhân để có được ma trận 26x26 vuông lớn của các chữ cái mong muốn. Tiếp theo, phần tam giác dưới được lấy và in ngầm.

Ngoài ra 11 byte:

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

@StewieGriffin Tôi thực sự đã bình luận nửa chừng về câu trả lời Octave của bạn về sự trùng hợp của việc đưa ra giải pháp tương tự.
Sanchise

4

Javascript, 87 byte , 72 byte (Rất cám ơn @steenbergh)

Câu trả lời đầu tiên của tôi cũng vậy:

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

Chào mừng bạn Có vẻ như bạn có thể rút ngắn nó một chút bằng cách xóa các khoảng trống xung quanh ind=1lúc bắt đầu, dấu chấm phẩy sau i<123và dấu chấm phẩy cuối cùng. đồng thời, vui lòng làm cho tiêu đề của bạn rõ ràng hơn một chút bằng cách nêu ngôn ngữ - bytecount, có tiền tố #.
steenbergh

Bạn có thể lưu sáu byte bằng cách bỏ jhoàn toàn:for(i=1;i<27;){console.log(String.fromCharCode(i+96).repeat(i++))}
steenbergh

@steenbergh cảm ơn bạn một lần nữa, bạn thật tốt bụng khi giúp tôi.
NTCG

4

Japt , 9 7 byte

Xuất ra một loạt các dòng

;C¬Ëp°E

Thử nó


Giải trình

Tách ( ¬) bảng chữ cái chữ thường ( ;C) thành một mảng các ký tự, ánh xạ qua mảng ( Ë) và lặp lại ( p) phần tử hiện tại theo chỉ số hiện tại ( E) tăng ( °) lần.


Chính xác những gì tôi có, ngoại trừ tôi đã sử dụng®p°Y
ETHproductions

3

Pip , 9 byte

FczPcX++i

Hãy thử trực tuyến!

Trong mã giả, đây là

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

trong đó zđược đặt trước cho bảng chữ cái chữ thường và iđược đặt trước là 0.


Các giải pháp dựa trên bản đồ cần thêm một byte vì chúng cần -ncờ hiển thị trên nhiều dòng:

{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
}

Hãy thử trực tuyến!

Với nhận xét

# 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

Một câu trả lời tương đối không thú vị. Lặp lại itừ 1 đến 26, in ichữ cái thứ của ithời gian trong bảng chữ cái (với dấu ngắt dòng ngầm).

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

Hãy thử trực tuyến!

Một cách tiếp cận thú vị hơn có thể là sử dụng một cái gì đó như sau:

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

Điều này cung cấp cho chúng tôi tất cả các chữ cái với số lượng phù hợp, nhưng không có ngắt dòng. Có lẽ ai đó thông minh hơn tôi có thể tìm ra cách sử dụng điều đó để đưa ra câu trả lời cho người chơi gôn.


2
Tôi cũng không chắc cách sử dụng cách tiếp cận thứ hai của bạn, nhưng tôi biết rằng rep(letters, 1:26)nó ngắn hơn nhiều ...
Giuseppe

@Giuseppe Hah! Như tôi đã nói, "ai đó thông minh hơn tôi" chắc chắn là cần thiết.
rturnbull



3

PHP, 47 46 byte

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

hoặc là

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

Chạy với -nrhoặc thử trực tuyến .


3

J , 18 17 byte

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

Giải trình:

              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:

Hãy thử trực tuyến!



3

Octave , 25 24 byte

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

Hãy thử trực tuyến!

Đã lưu một byte nhờ Giuseppe, người đã thông báo cho tôi rằng OP cho phép chữ in hoa.

Giải trình:

Tạo một vectơ xvới các giá trị ASCII của bảng chữ cái in hoa và hoán chuyển nó. Thêm phủ định x(do đó 26 số không, trong một vectơ hàng, để tạo lưới với (các giá trị ASCII của):

AAAA
BBBB
CCCC

Lấy ma trận tam giác dưới và chuyển đổi thành các ký tự bằng cách nối với chuỗi rỗng.


3

C (gcc) , 48 byte 50 byte

Phiên bản chạy lại, theo cleblanc và Steadybox trong các bình luận bên dưới.

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

Hãy thử trực tuyến!


1
Câu trả lời tốt đẹp. Tôi nghĩ rằng chức năng của bạn sẽ thất bại trong lần gọi tiếp theo và theo liên kết này, nó sẽ được sử dụng lại; codegolf.meta.stackexchange.com/questions/4939/ từ
cleblanc

Đây là phiên bản cố định trong 50 byte: s[9];main(i){for(;i<27;)puts(memset(s,i+95,i++));}Vẫn đánh bại câu trả lời của tôi bằng một vài byte :)
Steadybox


3

Japt, 17 16 11 byte

-5 byte nhờ Oliver

Trong ISO-8859-1

;26ÆCgX pXÄ

Không phải là điểm số tốt nhất, nhưng tôi vẫn là một người mới. Bất kỳ đề nghị đều rất hoan nghênh.

Danh sách đầu ra của các dòng, như OP cho phép. Liên kết chứa thêm 3 byte cho dòng mới.

Hãy thử trực tuyến!

;                      - 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
Tốt đẹp! 1oBÊÄcó thể được thay thế bởi 26õ. Bạn có thể tiết kiệm thêm một vài byte bằng cách làm một cái gì đó như;26ÆCgX pXÄ
Oliver

@Oliver Làm thế quái nào tôi không thấy rằng 26 ngắn hơn chiều dài bảng chữ cái?! Cảm ơn. Ngoài ra, tôi xấu của tôi không phát hiện ra rằng ocó những ftranh cãi ...
RedClover
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.