บันไดตัวอักษร


30

ความท้าทาย

งานของคุณคือการสร้างโปรแกรมหรือฟังก์ชั่นที่ให้ผลลัพธ์ต่อไปนี้โดยไม่มีอินพุต:

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

เกณฑ์การให้คะแนน

นี่คือดังนั้นคำตอบที่สั้นที่สุดในแต่ละภาษาจะเป็นผู้ชนะ


4
ออกเป็นรายการของเส้น?
สิ้นเชิงมนุษย์

5
เราสามารถใช้อักษรตัวพิมพ์ใหญ่แทนได้หรือไม่?
Uriel

9
ฉันพลาดการท้าทายตัวอักษร! (แต่อย่าให้ Leaky Nun รู้)
Luis Mendo

9
ฉันทำงานหนักมากในการตรวจสอบว่ามันเป็นคนหลอกลวงและเห็นได้ชัดว่าไม่ใช่
Blue

4
@tallyally มนุษย์ที่ขึ้นอยู่กับคุณ
SpookyGengar

คำตอบ:


14

05AB1E , 2 ไบต์

ลองออนไลน์!

โปรดทราบว่าผลลัพธ์นี้เป็นรายการของบรรทัดตามที่ OP อนุญาตอย่างชัดเจน ลิงค์นี้ใช้เวอร์ชั่นพร้อมพิมพ์สวย (เข้าร่วมโดยขึ้นบรรทัดใหม่)

มันทำงานอย่างไร

  • A ให้ตัวอักษรพิมพ์เล็ก
  • ƶ ยกตัวอักษร (คูณแต่ละองค์ประกอบด้วยดัชนีของมัน)
  • » เข้าร่วมโดยการขึ้นบรรทัดใหม่


9

APL (Dyalog) , 12 8 5 ไบต์SBCS

บันทึกได้ 3 ไบต์ด้วย @ngn

บันทึกได้ 4 ไบต์ด้วย @ Adám

⍴⍨⌸⎕A

OP ชี้แจงตัวอักษรตัวพิมพ์ใหญ่ถูกต้องเช่นเดียวกับการส่งออกเป็นอาร์เรย์ของสตริง

ลองออนไลน์!

อย่างไร?

ให้ตัวอักษรทุกตัวใน⎕Alphabet โดยมีดัชนีอยู่ในนั้นมอบให้กับฟังก์ชั่น⍴⍨โดยใช้ตัวอักษรเป็นอาร์กิวเมนต์ซ้ายและดัชนีesเป็นอาร์กิวเมนต์ที่ถูกต้อง

⍴⍨resha es อาร์กิวเมนต์ที่ถูกต้องกับความยาวที่จัดทำโดยหนึ่งที่เหลือของมัน สลับซ้ายและขวา (ดังนั้นสัญลักษณ์ของมันดูเหมือนกับใบหน้าของใครบางคนที่อ่านคำอธิบายนี้)


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

@ Adámขอบคุณ! ฉันลองทุกรูปแบบของ / และ \, ไม่สนใจรูปร่างที่สมบูรณ์⍨
Uriel

คุณสามารถลบได้เช่นกัน
Adám

@ Adám แต่มันจะดูน่าเกลียดที่สุด⍨
Uriel

เปิดมวย!
อดัม

8

Haskell , 27 ไบต์

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

ลองออนไลน์! ส่งคืนรายการบรรทัด (ขอบคุณ @totallyhuman ที่ชี้ให้เห็นว่าตอนนี้ได้รับอนุญาตแล้ว)

คำอธิบาย:

             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"

* bows *คำอธิบายสำหรับ noob? ไม่<$ซ้ำอาร์กิวเมนต์แรกของnครั้งที่nคือความยาวของอาร์กิวเมนต์ที่สองได้อย่างไร
สิ้นเชิงมนุษย์

@tallyallyhuman คุณไปแล้ว อย่าลังเลที่จะถามในOf Monads and Men หากคุณมีคำถามเพิ่มเติม
Laikoni

มีผู้ประกอบการที่น่าสนใจมากในโหมโรง ... ขอบคุณสำหรับคำอธิบาย!
สิ้นเชิงมนุษย์

7

brainfuck , 74 ไบต์

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

ลองออนไลน์!

คำอธิบาย

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

ลองออนไลน์!


7

Befunge-98 (FBBI) , 27 ไบต์

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

ที่ไหน เป็นอักขระทดแทน (ASCII 26)

ลองออนไลน์!

ใช้ตัวอักษรตัวพิมพ์ใหญ่และมีการขึ้นบรรทัดใหม่

คำอธิบาย

รหัสทำงานได้โดยการจัดเก็บตัวนับ (0 เริ่มแรก) และในทุกลูป:

  • 1+ - เพิ่มทีละ 1
  • :0\:: - ผลักสิ่งต่าง ๆ เพื่อให้สแต็กมีลักษณะดังนี้: bottom [N, 0, N, N, N] top
  • '`j'@ - ตรวจสอบว่าตัวนับมากกว่า 26
    • j'@- ถ้าใช่เรากระโดดข้าม'และออกโดยใช้@
    • j'@- หากไม่เป็นเช่นนั้นเราจะดำเนินการ'ซึ่งจะส่งค่า ASCII ของ@ไปยังสแต็ก

ตอนนี้สแต็กจะเป็นดังนี้: bottom [N, 0, N, N, 64] top

  • +\- เพิ่มจากนั้นสลับด้านบน 2: bottom [N, 0, (N+64), N] top ครั้งแรกที่ผ่านนี่คือ ASCII 65 หรือA
  • k:- ทำซ้ำวินาทีจาก(N+1)เวลาบนสุด- ตอนนี้มี(N+2)ค่าของ(N+64)สแต็ก (บวกNและ0จากก่อนหน้านี้)
  • $$- ทิ้งค่า 2 อันดับแรก - ตอนนี้มีเพียงNค่า(N+64)
  • >:#,_- พิมพ์ค่าสูงสุดแต่ละค่าจนกว่าจะถึง0- นั่นหมายถึงNสำเนา(N+64)พิมพ์
  • $- โยนทิ้ง0- ตอนนี้สแต็คเป็นเพียงแค่N
  • a, - พิมพ์ใส่

และมันซ้ำ


ฉันชอบวิธีที่ฉันใช้@ทั้งสองสำหรับการสิ้นสุดโปรแกรมและการเพิ่มในตัวนับ


@ JamesHolderness อ๋อ ขอบคุณสำหรับการจับ!
MildlyMilquetoast

7

Ruby , 32 30 ไบต์

-2 ไบต์ต้องขอบคุณ @EricDuminil

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

ลองออนไลน์!


1
ยอดเยี่ยม ตามความคิดเห็นโดย OP อนุญาตให้ขึ้นบรรทัดใหม่ / นำหน้า ในกรณี27.times{|n|puts (n+96).chr*n}นั้นจะถูกต้องด้วย 30 ไบต์
Eric Duminil


6

Excel VBA ขนาด 38 ไบต์

ใช้หน้าต่างทันที :)

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

อา ความผิดฉันเอง. ฉันคิดว่ามันเป็น Excel เพราะฉันใช้ฟังก์ชั่น Excel โดยใช้หน้าต่างทันที
remoel

คุณสามารถวางไบต์ได้โดยลบเทอร์มินัล"
Taylor Scott


5

Ruby, 38 ไบต์

ส่งคืนอาร์เรย์ของสตริง

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

-5 ไบต์ขอบคุณโดยสิ้นเชิงมนุษย์

* -11 ไบต์ขอบคุณการเล่นกอล์ฟที่ยอดเยี่ยมของ Jordan


นี้เป็นเพียง 48 ไบต์โดยนับของฉัน
Jordan

1
คุณไม่ต้องการ"\n"เลย putsทำเช่นนั้นเพื่อคุณ (แต่สำหรับการอ้างอิงในอนาคต$/จะสั้นกว่า 2 ไบต์) - แต่คุณสามารถกำจัดได้putsทั้งหมดหากคุณทำให้แลมบ์ดาที่ส่งคืนอาร์เรย์ของเส้น นอกจากนี้คุณยังสามารถเปลี่ยนa=[*?a..?z];puts a.mapไปputs (a=*?a..?z).mapและจะx*(a.index(x)+1) x*-~a.index(x)รวมกันทั้งหมดที่38 ไบต์
Jordan

รุ่น 38 ไบต์ทำงานได้ดีบน TiO (ดูลิงค์ในความคิดเห็นก่อนหน้า) โปรดทราบว่าส่วนที่(a=*?a..?z)อยู่ภายในบล็อกไม่ใช่ส่วนที่ขัดแย้งของแลมบ์ดา
Jordan


4

MATL , 9 ไบต์

2Y2"@X@Y"

ลองออนไลน์!

คำอธิบาย

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

คุณรู้หรือ&ไม่ว่าทำไมไม่สามารถใช้ในการทำซ้ำและขนย้ายได้2Y2 ?
Stewie Griffin

@StewieGriffin &ไม่ได้ทำซ้ำและโอนย้ายจริงแม้ว่าบางครั้งมันจะให้ผลลัพธ์แบบเดียวกัน มันทำอะไรได้บ้างคือปรับเปลี่ยนจำนวนอินพุต / เอาต์พุตของฟังก์ชันถัดไป ตัวอย่างเช่นถ้าคุณใช้&+ที่+ฟังก์ชั่นนี้จะใช้เวลาหนึ่งอินพุตแทนของทั้งสองและผลรวมของการป้อนข้อมูลด้วยตัวเองขนย้าย แต่นั่นเป็นเพียงเพราะนั่นคือวิธี+ การทำงาน 1 อินพุท (เดียวกัน=, >และคนอื่น ๆ )
หลุยส์ Mendo


4

เยลลี่ ,  5  4 ไบต์

การใช้ Python อย่างไม่เหมาะสม

-1 ไบต์ด้วยAdám (อนุญาตให้แสดงรายการบรรทัดได้เนื่องจากขณะนี้มีการเขียนฟังก์ชันมากกว่าโปรแกรม)

Øa×J

ลิงก์ niladic ที่ส่งคืนรายการสตริง, บรรทัด
(เพื่อพิมพ์ด้วยการขึ้นบรรทัดใหม่เป็นโปรแกรมเต็มรูปแบบเพียงเพิ่มYกลับเข้าไปใหม่ )

ลองออนไลน์!(ส่วนท้ายเรียกลิงก์เป็น nilad ( ¢) และรับการแสดง Python ของผลลัพธ์ ( ŒṘ) เพื่อความชัดเจนเนื่องจากพฤติกรรมการทำงานของโปรแกรมเต็มรูปแบบเริ่มต้นจะทำให้เกิดผลกระทบร่วมกันเช่นabbccc...)

อย่างไร?

Ø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 ควรจะเพียงพอ
Adám

อืมเราอาจ "เอาท์พุท" รายการของเส้น แต่เราต้อง "สร้างโปรแกรม" - เมื่อทำงานเป็นโปรแกรมเอาต์พุตของสี่ byter นั้นได้ถูกทุบเพื่อให้ไม่มีลักษณะของรายการ
Jonathan Allan

โปรแกรมหรือฟังก์ชั่น
อดัม

4

MATL 11 ไบต์

2Y2t!g*!YRc

ลองออนไลน์!

ใช้การทวีคูณออกอากาศกับรายการเพื่อรับเมทริกซ์จตุรัสขนาดใหญ่ 26x26 ของตัวอักษรที่ต้องการ ถัดไปชิ้นส่วนรูปสามเหลี่ยมด้านล่างจะถูกถ่ายและพิมพ์ออกมาโดยปริยาย

11 ไบต์ด้วย:

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

@StewieGriffin จริง ๆ แล้วฉันแสดงความคิดเห็นในคำตอบของคู่ของคุณเกี่ยวกับวิธีการแก้ปัญหาเดียวกัน
Sanchises

4

Javascript, 87 ไบต์ , 72 ไบต์ (ขอบคุณมากที่ @steenbergh)

คำตอบแรกของฉันก็เช่นกัน:

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

ยินดีต้อนรับ! ดูเหมือนว่าคุณสามารถย่อให้สั้นลงได้โดยการลบช่องว่างind=1ในช่วงเริ่มต้นเซมิโคลอนหลังi<123และเซมิโคลอนสุดท้าย นอกจากนี้โปรดทำให้ส่วนหัวของคุณชัดเจนขึ้นโดยระบุภาษา - bytecount นำหน้าด้วย #
steenbergh

คุณสามารถบันทึกหกไบต์ได้โดยการตกลงjไปพร้อมกัน:for(i=1;i<27;){console.log(String.fromCharCode(i+96).repeat(i++))}
steenbergh

@ steenbergh ขอบคุณอีกครั้งคุณเป็นคนประเภทไหนที่ช่วยฉัน
NTCG

4

Japt , 9 7 ไบต์

เอาต์พุตอาร์เรย์ของบรรทัด

;C¬Ëp°E

ลองมัน


คำอธิบาย

แยก ( ¬) ตัวอักษรตัวพิมพ์เล็ก ( ;C) ไปยังอาร์เรย์ของอักขระแผนที่เหนืออาร์เรย์ ( Ë) และทำซ้ำ ( p) องค์ประกอบปัจจุบันโดยดัชนีปัจจุบันE( °) ครั้งที่เพิ่มขึ้น ( )


สิ่งที่ฉันมียกเว้นว่าฉันใช้®p°Y
ETHproductions

3

Pip , 9 ไบต์

FczPcX++i

ลองออนไลน์!

ใน pseudocode นี่คือ

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

โดยที่zตัวอักษรตัวพิมพ์เล็กและiตั้งไว้ล่วงหน้าเป็น 0


โซลูชันบนแผนที่ใช้หนึ่งไบต์พิเศษเนื่องจากต้องการ-nแฟล็กเพื่อแสดงบนหลายบรรทัด:

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


3

Haskell , 31 ไบต์

-12 ไบต์ขอบคุณ nimi

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

ลองออนไลน์!

นี่ไม่ใช่ตัวอย่างมันเป็นฟังก์ชั่น nullary (หนึ่งที่ไม่มีข้อโต้แย้ง) ที่ส่งออกรายการของบรรทัดที่ได้รับอนุญาตเพราะฉันทามติเมตานี้


3

R , 38 ไบต์

คำตอบที่ค่อนข้างไม่น่าสนใจ ทำซ้ำiตั้งแต่ 1 ถึง 26 พิมพ์iตัวอักษร th ของตัวอักษรiครั้ง (โดยมีการแบ่งบรรทัดโดยนัย)

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

ลองออนไลน์!

วิธีที่น่าสนใจกว่าอาจจะใช้สิ่งต่อไปนี้:

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

นี่ทำให้เรามีตัวอักษรทั้งหมดในปริมาณที่เหมาะสม แต่ไม่มีการแพร่กระจาย บางทีบางคนที่ฉลาดกว่าฉันก็สามารถหาวิธีที่จะใช้คำตอบนี้ได้


2
ฉันไม่แน่ใจว่าจะใช้วิธีที่สองของคุณได้อย่างไร แต่ฉันรู้ว่าrep(letters, 1:26)มันสั้นกว่านี้มาก ...
Giuseppe

@Giuseppe ฮะ! อย่างที่ฉันพูดว่า "บางคนฉลาดกว่าฉัน" เป็นสิ่งจำเป็นอย่างยิ่ง
rturnbull


3

สนิม 82 ไบต์

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

ฉันหวังว่ามันจะสั้นกว่านี้มาก แต่การแปลง / การสแครชระหว่างประเภทต่าง ๆ นั้นต้องใช้เวลานานหลายไบต์ :(

ลองออนไลน์!


1
ฉันได้ 76 ไบต์: ลองออนไลน์!
Conor O'Brien

3

PHP, 47 46 ไบต์

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

หรือ

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

ทำงานด้วย-nrหรือลองออนไลน์


3

J , 18 17 ไบต์

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

คำอธิบาย:

              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:

ลองออนไลน์!



3

อ็อกเท25 25ไบต์

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

ลองออนไลน์!

บันทึกไว้หนึ่งไบต์ขอบคุณ Giuseppe ที่แจ้งให้ฉันทราบว่า OP อนุญาตให้ใช้ตัวอักษรตัวพิมพ์ใหญ่ได้

คำอธิบาย:

สร้างเวกเตอร์xด้วยค่า ASCII ของตัวอักษรตัวพิมพ์ใหญ่และย้าย เพิ่มเมื่อตะกี้x(เช่น 26 ศูนย์ในแถวเวกเตอร์, เพื่อสร้างกริดด้วย (ค่า ASCII ของ):

AAAA
BBBB
CCCC

ใช้เมทริกซ์สามเหลี่ยมด้านล่างแล้วแปลงเป็นอักขระโดยเชื่อมโยงกับสตริงว่าง


3

C (GCC) , 48 ไบต์ 50 ไบต์

รุ่นเรียกใช้อีกครั้งตาม cleblanc และ Steadybox ในความคิดเห็นด้านล่าง

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

ลองออนไลน์!


1
คำตอบที่ดี ฉันคิดว่าฟังก์ชั่นของคุณจะล้มเหลวในครั้งต่อไปที่มีการเรียกใช้และตามลิงก์นี้มันควรจะใช้งานได้อีกครั้ง codegolf.meta.stackexchange.com/questions/4939/…
cleblanc

นี่คือการแก้ไขในรุ่น 50 ไบต์: s[9];main(i){for(;i<27;)puts(memset(s,i+95,i++));}ยังคงเต้นคำตอบของฉันโดยไม่กี่ไบต์ :)
Steadybox


3

Japté, 17 16 11 ไบต์

-5 ไบต์ขอบคุณโอลิเวอร์

ใน ISO-8859-1

;26ÆCgX pXÄ

ไม่ใช่คะแนนที่ดีที่สุด แต่ฉันยังเป็นสามเณร ข้อเสนอแนะใด ๆ ยินดีต้อนรับมาก

แสดงรายการบรรทัดตามที่อนุญาตให้ OP ลิงก์มีมากกว่า 3 ไบต์สำหรับบรรทัดใหม่

ลองออนไลน์!

;                      - 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
ดี! จะถูกแทนที่ด้วย1oBÊÄ 26õคุณสามารถประหยัดอีกสองสามไบต์โดยทำสิ่งที่ชอบ;26ÆCgX pXÄ
Oliver

@Oliver heck ฉันไม่เห็นว่า 26 สั้นกว่าความยาวตัวอักษรอย่างไร! ขอบคุณ นอกจากนี้ฉันไม่ดีที่ฉันไม่พบที่oจะfโต้แย้ง ...
RedClover
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.