The Staircase Challenge


20

งานของคุณคือสร้างงานศิลปะชิ้นนี้ใหม่:

                        _____
                       |
                       |
                       |
                       |
                  _____| 
                 |
                 |
                 |
                 |
            _____|
           |
           |
           |
           |
      _____|
     |
     |
     |
     |
_____|

คำตอบจะต้องสร้างใหม่และพิมพ์ผลลัพธ์ อนุญาตให้ใช้ทุกภาษาไม่ต้องมีการพิมพ์โดยตรงศิลปะ ofc บางระดับของการจัดการที่จำเป็น คำตอบที่มีจำนวนไบต์น้อยที่สุดจะเป็นผู้ชนะ

ปิดในวันพฤหัสบดี 6.30 น. UTC หรือมากกว่านั้น

เพื่อนของฉันทำสิ่งที่เป็นต้นฉบับให้ฉันด้วย Java เขาปฏิเสธที่จะแสดงซอร์สโค้ดให้ฉันและตอนนี้ฉันจะทำให้ตาพร่าเขาด้วยความสามารถของภาษาอื่น ๆ : D

คุณไม่สามารถใช้ตัวเลือกอื่น (ทำให้ง่ายขึ้นใช่ไหม)


กระดานผู้นำปัจจุบัน

  1. Pyth - 28 bytes - isaacg
  2. CJam - 30 ไบต์ - Runer112
  3. CJam - 32 ไบต์ - Martin Büttner

คะแนนสูงสุด: C - 73 ไบต์ - Paul R


isaacg สวมมงกุฎให้ผ่านการท้าทายของ Staircase with Pyth ระวังความท้าทายเช่นนี้ใน PPCG!


1
ยินดีต้อนรับสู่การเขียนโปรแกรมปริศนา & รหัสแลกเปลี่ยนกองกอล์ฟ! ความท้าทายทั้งหมดที่นี่จำเป็นต้องมีเกณฑ์การชนะอย่างมีวัตถุประสงค์เพื่อตัดสินใจอย่างเด็ดขาดว่าโซลูชันใดควรชนะ นี่ดูเหมือนคำถามเกี่ยวกับcode-golfคือรหัสที่สั้นที่สุดชนะ แต่ฉันจะให้คุณแก้ไขด้วยตัวคุณเองในกรณีที่คุณต้องการทำให้มันแตกต่าง ขอบคุณ!
Doorknob

1
ขอโทษที่ฉันพลาดไป ฉันได้แก้ไขแท็กที่เหมาะสมให้กับคำถามของคุณแล้ว
Doorknob

13
เราจำเป็นต้องพิมพ์พื้นที่การลาก 1 อันแปลก ๆ บนบรรทัดที่ 6 หรือไม่?
เครื่องมือเพิ่มประสิทธิภาพ

4
โดยทั่วไปจะอนุญาตให้ใช้พื้นที่ต่อท้ายได้หรือไม่ ฉันสามารถเอาอันนี้ไปเป็นสี่เหลี่ยมความกว้างของบรรทัดแรกได้หรือไม่?
Martin Ender

8
เราสามารถขึ้นบรรทัดใหม่ต่อท้ายได้หรือไม่
TheNumberOne

คำตอบ:


4

Pyth, 29 28

V21++**6/-20N5d*5?d%N5\_<\|N

ลองที่นี่

วิธีแก้ปัญหาที่ค่อนข้างตรงไปตรงมาพร้อมกับเคล็ดลับ "ผนวกห้าช่องว่างหรือห้าขีดล่าง" จากโซลูชันของ @ xnor แต่มีวงวนตั้งแต่ 0 ถึง 20 ไม่ใช่ 20 ถึง 0


1
ฉันพากย์เจ้าท่าน isaacg ที่ผ่านการท้าทายของบันได
therewillbecoffee

... และตอนนี้คุณสามารถเข้าสู่บันไดได้แล้ว
Anthony Pham

22

C, 86 80 76 75 73 ไบต์

c;main(i){for(i=21;i--;c='|')printf("%*s%c\n",i/5*6+5,i%5?"":"_____",c);}

5
จะต้องมีคนที่จะโพสต์โซลูชั่น C เสมอ โหวตให้คุณ
therewillbecoffee

1
คุณสามารถทำให้มันสั้นลงได้โดยเปลี่ยนลูปเป็นfor(i=25;i--;)
Felix Bytow

1
@FelixBytow i=26มันควรจะเป็น นอกจากนี้สิ่งนี้' 'สามารถเปลี่ยน32เป็นอักขระพิเศษได้ โซลูชันของฉันมีความยาว 2 ตัวอักษรหลังจากปรับให้เหมาะสมแล้ว :(
Allbeert

2
คุณดูเหมือนจะมีขั้นตอนพิเศษ มี 21 แถวในผลลัพธ์ที่ต้องการไม่ใช่ 26 การเพิ่มประสิทธิภาพบางอย่างเพิ่มเติม: main(i){for(i=21;i--;)printf("%*s%c\n",i/5*6+5,i%5?"":"_____",i<20?'|':0);}1. ลดความซับซ้อนของสูตรสำหรับความยาว 2. ตามที่ @ Allbeert บอกว่าคุณสามารถใช้รหัส ASCII ' 'แต่ทำไมหยุดที่ ASCII 32 เมื่อ ASCII 0 จะทำ นอกจากนี้มันจะทำงานที่ดีสำหรับฉันกับ""แทน" "
ระดับแม่น้ำเซนต์

1
วิธีนี้เกี่ยวกับการบันทึกสองไบต์ใน'|'การพิมพ์? c;main(i){for(i=21;i--;c='|')printf("%*s%c\n",i/5*6+5,i%5?"":"_____",c);}
Runer112

11

Java, 198 158 156 146 ไบต์

นี่อาจจะสั้นลงมาก ตามปกติข้อเสนอแนะยินดีต้อนรับ

void a(){String a="",b="_____",c=b;for(int i=-1;i<20;b=i%5<1?b.replace(c,"     "):i%5>3?b+" "+c:b)a=b+(++i>19?"":"|")+"\n"+a;System.out.print(a);}

เยื้อง (kinda):

void a(){
    String a="",b="_____",c=b;
    for(int i=-1;i<20;b=i%5<1?b.replace(c,"     "):i%5>3?b+" "+c:b)
        a=b+(++i>19?"":"|")+"\n"+a;
    System.out.print(a);
}

ขอบคุณ Martin Büttner, Rainbolt และ Geobits


1
สุจริตตั้งแต่ที่คุณทำกับ Java ฉันประทับใจ
therewillbecoffee

9

Brainfuck (1065 ไบต์)

มันไม่สวยไม่ใช่สั้น ... แต่ฉันจะปรับปรุงในภายหลัง!

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

brainfuck นั้นไม่เคยสวย :) โหวตเพียงเพื่อทำให้มันใช้งานได้
Purefan

ฉันไม่เห็นด้วย: codegolf.stackexchange.com/questions/13152/ …
Joshpbarron

ideone.com/ICtrhv การ จำกัด เวลาเกินฉันหมายความว่าอะไร ....
therewillbecoffee

Bizzare ... ลองที่นี่: esoteric.sange.fi/brainfuck/impl/interp/i.html
Joshpbarron

8

CJam, 36 30 ไบต์

ลองออนไลน์

L{{S5*\+}/S'|5*+]'_5*+}5*1>zN*

โซลูชัน 36 ไบต์เริ่มต้นของฉันสร้างผลลัพธ์ในการวางแนวเอาต์พุต แม้ว่าฉันจะพยายามบีบอัลกอริธึมออกมาเยอะ แต่ฉันก็ทำไม่ได้ จากนั้นฉันเห็นกลยุทธ์ที่ยอดเยี่ยมของมาร์ตินในการสร้างคอลัมน์แทนที่จะเป็นแถวและแปลงผลลัพธ์ ฉันรู้ว่านั่นอาจเป็นวิธีที่ดีกว่าดังนั้นฉันจึงออกเดินทางเพื่อสร้างโซลูชันที่ใช้การถ่ายโอนข้อมูล

อย่างไรก็ตามวิธีการของฉันในการใช้กลยุทธ์นั้นแตกต่างกันเล็กน้อย แทนที่จะสร้างคอลัมน์เต็มฉันใช้โซลูชันวนซ้ำที่เยื้อง "ขั้นตอน" ที่สร้างไว้แล้วและเพิ่มเพิ่มขั้นตอนใหม่ในการทำซ้ำแต่ละครั้ง ดังนั้นการวนซ้ำครั้งแรกของลูปหลักจึงสร้างสิ่งนี้:

 |||||
_
_
_
_
_

การวนซ้ำครั้งที่สองของลูปหลักจะเยื้องขั้นตอนที่มีอยู่และเพิ่มอันใหม่หลังจากนั้น:

      |||||
     _
     _
     _
     _
     _
 |||||
_
_
_
_
_

และการวนซ้ำทั้งห้าของลูปหลักจะสร้างสิ่งนี้:

                     |||||
                    _
                    _
                    _
                    _
                    _
                |||||
               _
               _
               _
               _
               _
           |||||
          _
          _
          _
          _
          _
      |||||
     _
     _
     _
     _
     _
 |||||
_
_
_
_
_

หลังจากนี้สิ่งที่ต้องทำคือกำจัดบรรทัดแรกซึ่งจะกลายเป็นไรเซอร์ที่ไม่พึงประสงค์สำหรับขั้นตอนด้านล่างและขนย้าย


7

Python 2, 80 77 74 ไบต์

n=24;exec"print' '*n+'_'*5+'|'*(n<24)+('\\n'+~-n*' '+'|')*4*(n>0);n-=6;"*5

กำจัดคู่execและทำให้ทุกอย่างเข้าเป็นหนึ่งเดียวprint!


6

คลิป, 46

{:24S:5'_m[z{*4,:+5*6zS"|
":*6zS:5'_"|
"`}vR4`

คำอธิบาย

{               .- Put everything in a list -.
 :24S           .- 24 spaces                -.
 :5'_           .- 5 underscores            -.
 m[z            .- Map...                   -.
    {           .- A list                   -.
     *4         .- 4 of the following       -.
       ,        .- Append                   -.
        :+5*6zS .- 5 + 6 * the iteration of spaces  -.
        "|      .- A pipe and newline       -.
"
     :*6zS      .- 6 * the iteration of spaces      -.
     :5'_       .- 5 underscores            -.
     "|         .- A pipe and newline       -.
"
    `           .- End list (per iteration  -.
   }vR4         .- The mapping is onto {3,2,1,0}    -.

1
คลิปไม่มีแม้แต่หน้า Wikipedia ฉันหมายถึงอะไร ....
therewillbecoffee

4
@therewillbecoffee หลายภาษาในเว็บไซต์นี้ไม่มีหน้า Wikipedia นั่นคือความสนุก;)
Ypnypn

@Ypnypn คุณออกแบบมันหรือไม่? มันดูน่าสนใจจริงๆ! แม้ว่าฉันจะสนใจในquine จริง ;) (อันนั้นในหน้าตัวอย่างเป็นบิตโกง)
Martin Ender

6

CJam, 36 32 ไบต์

{5*S*'_+a5*~_W<S+5'|*+}5/;]W%zN*

ทดสอบที่นี่

ฉันยังลองใช้สูตรที่ชัดเจน แต่ใน CJam นานขึ้น ... อาจช่วยคนอื่นได้:

21,29,ff{_2$5/)6*(=@@6/5*=_++" |_|"=}W%N*

คำอธิบาย

ฉันพบว่าบันไดสามารถสร้างได้ง่ายขึ้นถ้าคุณก) ย้ายกริดและ b) กลับเส้น:

_
_
_
_
_
 |||||
     _
     _
     _
     _
     _
      |||||
          _
          _
          _
          _
          _
           |||||
               _
               _
               _
               _
               _
                |||||
                    _
                    _
                    _
                    _
                    _

ดังนั้นก่อนอื่นฉันกำลังสร้างสิ่งนั้นจากนั้นจึงย้อนกลับ

{                     }5/        "For i in [0 .. 4].";
 5*S*'_+                         "Get a string of 5*i spaces and append _.";
        a5*~                     "Get five such lines.";
            _W<S+                "Duplicate the last, remove the _, add a space.";
                 5'|*+           "Add 5 copies of |.";
                         ;       "The above creates a row too many, so discard the last one.";
                          ]W%zN* "Wrap everything in an array, reverse, transpose, riffle
                                  with newlines.";

โอเคมีคนทำด้วย 30 ไบต์
therewillbecoffee

6

Python 2, 59

n=21
exec"n-=1;print n/5*6*' '+' _'[n%5<1]*5+'|'*(n<20);"*n

21 สายมีการสร้างดัชนีโดยในn [20,19,...,1,0]พิมพ์ครั้งที่ 6 ช่องว่างสำหรับแต่ละขั้นตอน "" เรากำลังขึ้น (ลบ 1) n/5*6คำนวณ จากนั้นพิมพ์ห้าช่องว่างยกเว้นสิ่งเหล่านี้แทนขีดล่างสำหรับทวีคูณของห้า n=20สุดท้ายพิมพ์เส้นแนวตั้งยกเว้นบรรทัดด้านบน


ดีและตรงไปตรงมา ฉันชอบมัน!
Sp3000

6

JavaScript, 115 107 96 94 89 87 83 ไบต์

นี่นานเกินไปที่จะชนะ แต่มันเป็นครั้งแรกที่ฉันได้รับคำตอบเกี่ยวกับ PCG.SE และฉันภูมิใจที่ได้ทำบางสิ่งบางอย่างที่โพสต์ได้

ด้วยคำแนะนำเกี่ยวกับการสร้างประโยคที่เป็นประโยชน์ฉันย่อรหัสให้สั้นลงอย่างมาก - ต่ำกว่าขีด จำกัด ของแถบเลื่อน!

for(s='',y=22;--y;s+='\n')for(x=0;++x<29;)s+=6*~(~-y/5)-~x?4+5*~(x/6)+y?' ':'_':'|'

คำตอบที่ดีหลายสิ่งที่คุณสามารถทำได้เพื่อย่นระยะเวลาออกalertไป หากคุณเรียกใช้ในคอนโซลมันใช้งานได้ดีโดยไม่มีมัน นอกจากนี้เครื่องหมายอัฒภาคในวงเล็บปีกกาสุดท้ายก็ไม่จำเป็นเช่นกัน คุณสามารถบันทึก 1 ไบต์โดยใช้(y/5-.2)แทน((y-1)/5)
qw3n

@ qw3n ขอบคุณสำหรับคำแนะนำเหล่านั้น; ฉันไม่แน่ใจว่าต้องมีการแจ้งเตือนตามกฎหรือไม่
vvye

นอกจากนี้คุณยังสามารถย้ายs+='\n'หลังและกำจัดวงเล็บปีกกาจึงดูเหมือนว่าy-- for(s='',y=21;y>0;y--,s+='\n')ฉันยังเริ่มต้น s ภายในเพื่อ for loop รหัสของคุณเป็นคำสั่งเดียวทั้งหมด
qw3n

1
ฉันคิดว่านั่นคืออันสุดท้ายของฉัน แต่นี่ควรจะเป็นสำหรับฉันfor(s='',y=22;--y;s+='\n')for(x=0;++x<29;)s+=6*~~(y/5-.2)+5-x?5*~~(x/6)+1-y?' ':'_':'|'ถ้าคุณพลิกนิพจน์ของคุณคุณสามารถทดสอบได้number - xว่าอะไรคือ 0 ถ้าทั้งสองคำเท่ากันจะช่วยให้คุณประหยัดได้อีก 2 ไบต์
qw3n

1
เกมตัวหนอน: ~ n == -n-1, - ~ n == n + 1, ~ -n == n-1, for(s='',y=22;--y;s+='\n')for(x=0;++x<29;)s+=6*~(~-y/5)-~x?4+5*~(x/6)+y?' ':'_':'|'คือ 83
edc65

6

ECMAScript 6, 142 138 129 91 ไบต์

ขอขอบคุณเป็นพิเศษที่ @ edc65 สำหรับการทำงานซ้ำนี้

a=o='',[for(x of!0+o)(o=(a+'     |\n').repeat(4)+a+'_____|\n'+o,a+='      ')],a+'_____\n'+o

ตรรกะของรุ่นเดิมตรวจสอบความคิดเห็น @ edc65 สำหรับวิธีการที่ morphed

((f,l,p)=>                  //variables
f(24)+l+p[1]+               //add the non pattern line
[0,1,2,3].map(b=>f(18-6*b)) //add the right number of spaces in front of the 4 steps
.map((a,b)=>f(4,a+f(5)+p)   //the four repeating lines of the step 
+a+l)                       //the landing line
.join(p)+p)                 //put it all together
((n,s=' ')=>s.repeat(n)     //create an variable array of some character
,'_____','|\n')             //string literals

1
คุณสามารถลบnewนวกรรมิกได้อย่างปลอดภัยก่อนที่Arrayจะบันทึกสองสามไบต์
NinjaBearMonkey

@ hsl ขอบคุณด้วยเหตุผลบางอย่างที่ฉันคิดว่าnewจำเป็น
qw3n

1
Array (n) .join (s) จึงเป็น ES5! คุณลองrepeat
edc65

[1,2,3,4].map((a,b)และใช้ just b => [0,1,2,3].map(b(-4)
edc65

ฉันใช้ Firefox และมันใช้งานได้ดีมาก!
therewillbecoffee

5

MATLAB, 68 ไบต์

ฉันมีความรู้สึกที่แข็งแกร่ง MATLAB น่าจะทำได้ดีกว่า แต่ฉันก็คิดไม่ออก

p(1:5,6)='|';p(1,1:5)=95;w=blkdiag(p,p,p,p);w(21,25:29)=95;flipud(w)

สร้างบันไดกลับหัวและพลิก thaumometer ของฉันพังเพราะมีค่าคงที่ทั้งหมดอยู่

'|'ถูกทิ้งไว้โดยเจตนาตาม - คือ (แทน ascii codepoint) เพื่อเริ่มต้นpและwเป็นอาร์เรย์ถ่าน


1
'|' = 124อย่างไรก็ตามเพื่อไม่ให้เสียค่าใช้จ่ายใด ๆ
Peter Cordes

5

ทับทิม, 48

25.times{|i|puts" "*(4-i/6)*5+(i%6==0??_*5:?|)}

วิธีเก่า 68

4.times{|i|(?_*5+"
|"*5).each_line{|l|puts" "*(4-i)*5+l}}
puts"_"*5

ยินดีต้อนรับสู่ PPCG! เคล็ดลับการเล่นกอล์ฟ Ruby สองสามข้อ: 1. มีช่องว่างที่ไม่จำเป็นในนั้น 2. สตริงตัวเดียวเช่นสามารถเขียนเป็น'_' ?_3. บรรทัดใหม่สามารถฝังลงในสตริงได้โดยตรง (เพื่อให้คุณสามารถทำได้จริง"<linebreakhere>|") 4. วงเล็บที่ไม่จำเป็น สุดท้ายputsสามารถถูกแทนที่ด้วย$><<(ซึ่งช่วยให้คุณสามารถกำจัดพื้นที่แม้หลังจากใช้?_) ตามทัน! :)
Martin Ender

ใช่ฉันเพิ่งกำจัดช่องว่างบางส่วน ขอบคุณ! ฉันไม่รู้เกี่ยวกับสตริงอักขระเดี่ยว
psycotica0

คุณสามารถอาจจะยังแทนที่(1..4).mapโดย4.timesแล้วใช้แทน4-i 5-i
Martin Ender

โอ้โหโทรดีนะ เสร็จสิ้น
psycotica0

4

Julia, 83 ไบต์

for n=24:-6:0 print(" "^n*"_"^5*"|"^(n<24)*"\n"*(" "^(n>0?n-1:0)*"|\n"^(n>0))^4)end

ในจูเลียสตริงจะดำเนินการโดยใช้ผู้ประกอบการและสตริงซ้ำจะดำเนินการใช้*^


4

> <> , 108 104 100 ไบต์

cc+::?v~'_____'o\/' 'o  \
?:o'|'\' 'o1-30.o\v!?:-1<}:{oav!?:<4;!
-20.12^?(+cc:ooo/ \~1-'!|'o1. \~ao6

ง่าย> <> วิธีการแก้ปัญหาโดยใช้กลยุทธ์เดียวกับฉันคำตอบหลาม ข้อแตกต่างที่สำคัญคือ> <> ไม่มีการคูณสตริง (หรือแม้กระทั่งสตริง) ดังนั้นสิ่งทั้งหมดจึงทำด้วยลูป

คำอธิบาย

cc+                  Push 24 (call this "n")

[outer loop]
[loop 1, print n spaces]

:                    Copy n (call this "i")
:?                   If i is not zero...
' 'o1-30.                Print space, decrement i and go to start of loop 1

~'_____'ooooo        Pop i and print five underscores
:cc+(?               If n < 24...
'|'o                     Print a pipe
21.                  Otherwise skip pipe printing

[loop 2: print vertical parts of stairs]

?!;                  If n is zero, halt
4                    Push 4 (call this "j")
?!                   If j is zero...
~ao6-20.                 Pop j, print a newline, minus 6 from n and go to start of outer loop
ao                   Print a newline
}:{                  Copy n (call this "k")

[loop 3: print n-1 spaces]

1-                   Decrement k
:?!                  If k is zero...
    ~1-'!|'o1.           Pop k, decrement j, print a pipe and go to start of loop 2
' 'o                 Otherwise print a space and go to start of loop 3

ฉันรู้สึกว่าฉันจะโหวตคำตอบ> <> เสมอ
krs013

3

Groovy ขนาด98 71 ไบต์

// old: (25..5).each{i->println((1..(i-(i-1)%5)).collect{' '}.join()+(i%5?'|':('_____'+(i==25?'':'|'))))}

(25..5).each{i->println(' '*(i-(i-1)%5)+(i%5?'|':'_'*5+(i%25?'|':'')))}

(25..5).each { i ->
    println(
        ' '*(i - (i - 1) % 5) + (
            i % 5 ? 
            '|' : 
            '_'*5 + (i % 25 ? '|' : '')
        )
    )
}    

ฉันค่อนข้างแน่ใจว่ามันลดลงได้บ้าง :) สั้นลงโดย @Score_Under


1
ฉันมีไม่กี่ไบต์ที่จะโกน: แทนการเก็บรวบรวม / เข้าร่วมกับคูณ: ' '*(i-(i-1)%5)วงเล็บลบจากทั่ว('_____'+(i==25?'':'|'))แทนที่'_____'ด้วย'_'*5และถ้าคุณพลิกเงื่อนไขสุดท้ายที่คุณสามารถใช้% (i%25?'|':'')เป็นผู้ประกอบการความไม่เท่าเทียมกันนอกรีต: สิ่งนี้จะทำให้คุณลดลงถึง 71
Score_Under

@Score_Under ดีขอบคุณฉันไม่รู้เกี่ยวกับการคูณสตริง: D
Kamil Mikolajczyk


2

T-SQL, 276 ไบต์

declare @x int declare @y int declare @w varchar(30) declare @l char(5) set @l='_____' set @x=23 while @x > 4 begin set @w=replicate(' ',@x) set @y=0 if @x=23 print @w+' '+@l else print @w+' '+@l+'|' while @y < 4 begin set @y=1+@y print @w+'|' end set @x=@x-6 end print @l+'|'

2

Visual FoxPro 9.0, 261 ไบต์

n = จำนวนขั้นตอน

รวม 175 ตัวอักษร แต่ต้องส่งออกไปยังไฟล์เพื่อแสดงอย่างถูกต้อง - ดังนั้นลบ 43 ตัวอักษรสำหรับการดำเนินงานไฟล์ = 132 ตัวอักษร

n=10
c=CHR(13)
f="st.t"
ERAS (f)    
FOR i=n TO 1 STEP -1
    p=(i-1)*6
    =STRTO(PADL("_____",p+5)+IIF(i<n,"|","")+c+IIF(i>1,REPLI(PADL("|"+c,p+1),4),""),f,.t.)
    ?PADL("_____",p+5)+IIF(i<n,"|","")+c+IIF(i>1,REPLI(PADL("|"+c,p+1),4),"")
ENDFOR
MODI COMM (f)

หมายเหตุถึงผู้ตอบ:จำนวนไบต์นั้นใช้สำหรับซอร์สโค้ดที่ใช้งานได้จริงและตัวนับไบต์บอกว่าเป็น 261 ไบต์ดังนั้นจึงเป็นเช่นนั้น


2

Bash (+ tac จาก coreutils): 110 ไบต์

สามารถวางลงในเทอร์มินัลได้โดยตรง

(n =; set {1..4}; สำหรับฉันทำเสียงสะท้อน "$ {n} _____ |"; n + = ''; สำหรับฉันทำเสียงสะท้อน "$ n |"; เสร็จแล้ว; n + = \; เสร็จแล้ว; เสียงสะท้อน " $ {n} _____ ") | แทค

หากไม่มี|tacมันก็ไม่ได้ผล และฉันวิ่งไปที่ Git Bash ดังนั้นฉันควรฆ่าตัวตาย
therewillbecoffee

1

รหัสเครื่อง x86, 48 ไบต์

B1 05 B4 0E 80 E9 01 B0 5F B5 05 80 ED 01 CD 10 80 FD 00 75 F6 B5 05 80 ED 01 B0 0A CD 10 B0 08 CD 10 B0 7C CD 10 80 FD 00 75 EC 80 F9 00 75 D4

การประกอบรหัสเทียบเท่า:

mov cl, 5
mov ah, 0Eh
main:
    sub cl, 1

print_step:
    mov al, '_'
    mov ch, 5

.loop:
    sub ch, 1

    int 10h

    cmp ch, 0
    jne .loop

print_stoop:
    mov ch, 5

.loop:
    sub ch, 1

    mov al, 0Ah;    ascii newline
    int 10h

    mov al, 8;      ascii backspace
    int 10h

    mov al, '|'
    int 10h

    cmp ch, 0
    jne .loop

cmp cl, 0
jne main

เอาท์พุท:

_____
    |
    |
    |
    |
    |_____
         |
         |
         |
         |
         |_____
              |
              |
              |
              |
              |_____
                   |
                   |
                   |
                   |
                   |_____
                        |
                        |
                        |
                        |
                        |

ขออภัยเกี่ยวกับผลลัพธ์ที่แตกต่างกัน ฉันหวังว่ามันจะเป็นที่ยอมรับ

สิ่งนี้ทำงานใน DOSBOX

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