Tantangan Tangga

20

Pekerjaan Anda adalah menciptakan kembali karya seni ini:

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

Jawabannya harus membuat ulang ini dan mencetak ini sebagai hasilnya. Semua bahasa diizinkan, tidak ada pencetakan seni langsung, ofc, beberapa tingkat manipulasi diperlukan. Jawaban dengan byte terkecil menang.

Ditutup pada hari Kamis 6:30 AM UTC atau lebih.

Hal asli ditunjukkan kepada saya oleh teman saya yang melakukan ini dengan Java, dia menolak untuk menunjukkan kepada saya kode sumber dan sekarang saya akan membuatnya terpesona dengan kecemerlangan bahasa lain mungkin. : D

Anda tidak dapat menggunakan karakter alternatif apa pun (membuatnya lebih mudah?).


Papan pemimpin saat ini

  1. Pyth - 28 bytes - isaacg
  2. CJam - 30 byte - Runer112
  3. CJam - 32 byte - Martin Büttner

Suara terbanyak: C - 73 byte - Paul R


isaacg mengambil mahkota untuk melewati Tantangan Tangga dengan Pyth. Waspadai lebih banyak tantangan seperti ini di PPCG!

akan ada kopi
sumber
1
Selamat Datang di Programming Puzzles & Code Golf Stack Exchange! Semua tantangan di sini membutuhkan kriteria kemenangan yang objektif, untuk memutuskan solusi mana yang harus dimenangkan. Ini terlihat seperti pertanyaan kode-golf , yaitu kode terpendek yang menang, tetapi saya akan membiarkan Anda mengeditnya sendiri jika Anda ingin membuatnya menjadi sesuatu yang berbeda. Terima kasih!
Gagang pintu
1
Ah, maaf, saya melewatkan itu. Saya telah mengedit tag yang tepat ke pertanyaan Anda.
Gagang Pintu
13
Apakah kita harus mencetak 1 ruang trailing aneh di baris ke-6?
Pengoptimal
4
Lebih umum, apakah trailing space diperbolehkan? Bisakah saya menempelkan ini pada persegi panjang dengan lebar baris pertama?
Martin Ender
8
Bisakah kita memiliki baris baru yang tertinggal?
TheNumberOne

Jawaban:

4

Pyth, 29 28

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

Coba di sini.

Solusi yang cukup mudah, dengan trik "tambahkan lima spasi atau lima garis bawah" dari solusi @ xnor, tetapi dengan loop dari 0 hingga 20, bukan 20 hingga 0.

isaacg
sumber
1
Saya menjuluki Anda, Sir isaacg karena melewati Tantangan Tangga.
thereillbecoffee
... dan sekarang Anda dapat memasuki tangga
Anthony Pham
22

C, 86 80 76 75 73 byte

c;main(i){for(i=21;i--;c='|')printf("%*s%c\n",i/5*6+5,i%5?"":"_____",c);}
Paul R
sumber
5
Harus selalu ada orang yang akan memposting solusi C. Suara positif untuk Anda.
thereillbecoffee
1
Anda bisa membuatnya lebih pendek dengan mengubah loop kefor(i=25;i--;)
Felix Bytow
1
@ FelixBytow Seharusnya begitu i=26. Selain itu, ' 'dapat diubah 32menjadi karakter tambahan. Solusi saya adalah 2 karakter lebih lama setelah optimasi ini :(
Allbeert
2
Anda tampaknya memiliki langkah ekstra. ada 21 baris dalam output yang diperlukan, bukan 26. Beberapa optimasi lainnya: main(i){for(i=21;i--;)printf("%*s%c\n",i/5*6+5,i%5?"":"_____",i<20?'|':0);}1. Sederhanakan rumus untuk panjang 2. Seperti yang dikatakan @ Allbeert, Anda dapat menggunakan kode ascii untuk ' 'tetapi mengapa berhenti di ASCII 32 ketika ASCII 0 akan melakukannya. Juga berjalan baik bagi saya dengan ""bukannya" "
Level River St
1
Bagaimana dengan ini untuk menyimpan dua byte dalam '|'pencetakan? c;main(i){for(i=21;i--;c='|')printf("%*s%c\n",i/5*6+5,i%5?"":"_____",c);}
Runer112
11

Jawa, 198 158 156 146 byte

Ini mungkin bisa dipersingkat banyak. Seperti biasa, saran dipersilahkan.

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);}

Diindentasi (agak):

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);
}

Terima kasih Martin Büttner, Rainbolt, dan Geobits.

TheNumberOne
sumber
1
Jujur, karena kamu melakukannya dengan Java, aku terkesan.
kopi
9

Brainfuck (1065 Bytes)

Itu tidak cantik, tidak pendek ... tapi saya akan mengoptimalkan nanti!

++++[->++++++++<]>........................
[->+++<]>-.....>++++++++++.[->+++<]>++....
...................-[->++++<]>.>++++++++++
.[->+++<]>++.......................-[->+++
+<]>.>++++++++++.[->+++<]>++..............
.........-[->++++<]>.>++++++++++.[->+++<]>
++.......................-[->++++<]>.>++++
++++++.[->+++<]>++..................[->+++
<]>-.....[->++++<]>.>++++++++++.[->+++<]>+
+.................-[->++++<]>.>++++++++++.
[->+++<]>++.................-[->++++<]>.>+
+++++++++.[->+++<]>++.................-[->
++++<]>.>++++++++++.[->+++<]>++...........
......-[->++++<]>.>++++++++++.[->+++<]>++.
...........[->+++<]>-.....[->++++<]>.>++++
++++++.[->+++<]>++...........-[->++++<]>.>
++++++++++.[->+++<]>++...........-[->++++<
]>.>++++++++++.[->+++<]>++...........-[->+
+++<]>.>++++++++++.[->+++<]>++...........-
[->++++<]>.>++++++++++.[->+++<]>++......[-
>+++<]>-.....[->++++<]>.>++++++++++.[->+++
<]>++.....-[->++++<]>.>++++++++++.[->+++<]
>++.....-[->++++<]>.>++++++++++.[->+++<]>+
+.....-[->++++<]>.>++++++++++.[->+++<]>++.
....-[->++++<]>.>++++++++++.[--->++<]>+++.
....[->++++<]>.
Joshpbarron
sumber
brainfuck tidak pernah cantik :) upvote hanya untuk membuatnya bekerja
Purefan
Saya tidak setuju: codegolf.stackexchange.com/questions/13152/…
Joshpbarron
ideone.com/ICtrhv Batas waktu terlampaui maksud saya, apa ....
therewillbecoffee
Bizzare ... coba di sini: esoteric.sange.fi/brainfuck/impl/interp/i.html
Joshpbarron
8

CJam, 36 30 byte

Cobalah online.

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

Solusi 36-byte awal saya menghasilkan hasil dalam orientasi output. Meskipun saya berusaha untuk memeras lebih banyak byte dari algoritma, saya tidak bisa. Lalu aku melihat strategi brilian Martin menghasilkan kolom bukan baris dan mentranspos hasilnya. Saya menyadari bahwa itu mungkin pendekatan yang lebih baik, jadi saya berangkat untuk membuat solusi berbasis transposisi.

Namun, pendekatan saya untuk menerapkan strategi itu sedikit berbeda. Alih-alih menghasilkan kolom penuh, saya menggunakan solusi berulang yang indentasi setiap "langkah" yang sudah dihasilkan dan menambahkan menambahkan langkah baru di setiap iterasi. Jadi iterasi pertama dari loop utama menghasilkan ini:

 |||||
_
_
_
_
_

Iterasi kedua dari loop utama indentasi langkah yang ada dan menambahkan yang baru setelahnya:

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

Dan lima iterasi penuh dari loop utama menghasilkan ini:

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

Setelah ini, semua yang perlu dilakukan adalah menghilangkan baris pertama, yang sebaliknya akan menjadi riser yang tidak diinginkan untuk langkah bawah, dan berubah.

Runer112
sumber
7

Python 2, 80 77 74 byte

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

Singkirkan dobel execdan muat semuanya menjadi satu print!

Sp3000
sumber
6

Klip, 46

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

Penjelasan

{               .- 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}    -.
Ypnypn
sumber
1
Klip bahkan tidak memiliki halaman Wikipedia. Maksudku, apa ....
kopi
4
@therewillbecoffee Banyak bahasa di situs ini tidak memiliki halaman Wikipedia. Itu menyenangkan;)
Ypnypn
@ Ypnypn Apakah Anda mendesainnya? Itu terlihat sangat menarik! Meskipun saya akan tertarik pada quine sejati . ;) (Yang di halaman contoh agak curang.)
Martin Ender
6

CJam, 36 32 byte

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

Uji di sini.

Saya juga mencoba menggunakan rumus eksplisit, tetapi lebih lama di CJam ... mungkin itu membantu orang lain:

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

Penjelasan

Saya menemukan bahwa tangga dapat dibangun lebih mudah jika Anda a) mengubah posisi grid dan b) membalikkan garis:

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

Jadi pertama saya membangun itu, lalu membalikkannya, kemudian pindah.

{                     }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.";
Martin Ender
sumber
Oke, seseorang melakukannya dengan 30 byte.
kopi
6

Python 2, 59

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

21 baris diindeks oleh ndalam [20,19,...,1,0]. Pertama mencetak 6 spasi untuk setiap "langkah" kita naik (minus 1), dihitung sebagai n/5*6. Kemudian, cetak lima spasi, kecuali ini bukan garis bawah untuk kelipatan lima. Akhirnya, mencetak garis vertikal, kecuali untuk garis atas n=20.

Tidak
sumber
Bagus dan lugas. Saya suka itu!
Sp3000
6

JavaScript, 115 107 96 94 89 87 83 byte

Ini terlalu lama untuk dimenangkan, tetapi ini pertama kalinya saya menemukan jawaban di PCG.SE, dan saya agak bangga telah membuat sesuatu yang dapat diposkan.

Dengan beberapa saran sintaksis yang membantu saya mempersingkat kode secara signifikan - bahkan di bawah ambang scrollbar!

for(s='',y=22;--y;s+='\n')for(x=0;++x<29;)s+=6*~(~-y/5)-~x?4+5*~(x/6)+y?' ':'_':'|'
ay
sumber
Jawaban yang bagus, beberapa hal yang dapat Anda lakukan untuk mempersingkat adalah mengambil alert. Jika Anda menjalankannya di konsol berfungsi dengan baik tanpa itu. Juga, titik koma di dalam kurung kurawal terakhir tidak diperlukan. Anda dapat menyimpan 1 byte dengan menggunakan (y/5-.2)bukannya((y-1)/5)
qw3n
@ qw3n terima kasih atas saran tersebut; Saya tidak yakin apakah peringatan itu diharuskan oleh aturan.
vvye
Anda juga bisa memindahkan s+='\n'setelah y--dan menyingkirkan kurung kurawal sehingga terlihat seperti for(s='',y=21;y>0;y--,s+='\n'). Saya juga menginisialisasi s di dalam untuk loop sehingga kode Anda semua adalah satu pernyataan
qw3n
1
Saya pikir itu adalah yang terakhir saya tetapi ini seharusnya untuk saya for(s='',y=22;--y;s+='\n')for(x=0;++x<29;)s+=6*~~(y/5-.2)+5-x?5*~~(x/6)+1-y?' ':'_':'|'jika Anda membalik ekspresi ternary Anda, Anda dapat menguji number - xyang 0 jika kedua istilah sama menghemat Anda 2 byte lebih.
qw3n
1
Gim Tilde: ~ 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?' ':'_':'|'adalah 83
edc65
6

ECMAScript 6, 142 138 129 91 byte

Terima kasih khusus kepada @ edc65 untuk benar-benar mengerjakan ulang ini.

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

Logika dari versi asli memeriksa @ edc65 komentar untuk bagaimana ia berubah.

((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
qw3n
sumber
1
Anda dapat menghapus newkonstruktor dengan aman sebelum Arraymenyimpan beberapa byte.
NinjaBearMonkey
@ hsl terima kasih untuk beberapa alasan saya pikir newitu perlu.
qw3n
1
Array (n) .join (s) begitu ES5! apakah Anda mencobarepeat
edc65
[1,2,3,4].map((a,b)dan hanya menggunakan b => [0,1,2,3].map(b(-4)
edc65
Saya menjalankan Firefox dan berfungsi, cukup bagus!
kopi
5

MATLAB, 68 byte

Saya memiliki perasaan yang kuat bahwa MATLAB seharusnya dapat melakukan yang lebih baik, tetapi saya tidak dapat memikirkan caranya.

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

Buat tangga terbalik dan membalikkannya. Taumometer saya pecah karena semua konstanta sihir di sekitar.

'|'sengaja dibiarkan apa adanya (bukannya codepoint ascii) untuk menginisialisasi pdan wsebagai array char.

Sanchises
sumber
1
'|' = 124lagi pula, jadi itu tidak memerlukan biaya tambahan.
Peter Cordes
5

Ruby, 48

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

Pendekatan lama, 68

4.times{|i|(?_*5+"
|"*5).each_line{|l|puts" "*(4-i)*5+l}}
puts"_"*5
psycotica0
sumber
Selamat datang di PPCG! Beberapa tips golf Ruby: 1. ada ruang kosong yang tidak perlu di sana. 2. String karakter tunggal seperti '_'dapat ditulis sebagai ?_. 3. Baris baru dapat disematkan secara langsung dalam string (sehingga Anda dapat melakukannya "<linebreakhere>|"). 4. Tanda kurung di sekitar itu tidak perlu. Final putsdapat diganti dengan $><<(yang memungkinkan Anda untuk menyingkirkan ruang, bahkan setelah menggunakan ?_). Teruskan! :)
Martin Ender
Ya, saya baru saja menyingkirkan spasi. Terima kasih! Saya tidak tahu tentang string karakter tunggal.
psycotica0
Anda mungkin bisa juga mengganti (1..4).mapdengan 4.timesdan kemudian menggunakan 4-ibukannya 5-i.
Martin Ender
Ooh, panggilan yang bagus. Selesai
psycotica0
4

Julia, 83 byte

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

Di Julia, penggabungan string dilakukan menggunakan *operator dan pengulangan string dilakukan menggunakan ^.

Alex A.
sumber
4

> <> , 108 104 100 byte

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

Solusi>> sederhana, menggunakan strategi yang sama dengan jawaban Python saya . Perbedaan utama adalah bahwa> <> tidak memiliki perkalian string (atau bahkan string), jadi semua itu dilakukan dengan loop.

Penjelasan

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
Sp3000
sumber
Saya merasa seperti saya akan selalu menjawab pertanyaan> <>.
krs013
3

Groovy, 98 71 byte

// 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 ? '|' : '')
        )
    )
}    

Saya cukup yakin, bahwa itu dapat dikurangi entah bagaimana :) disingkat oleh @Score_Under

Kamil Mikolajczyk
sumber
1
Aku punya beberapa byte untuk mencukur: Ganti mengumpulkan / bergabung dengan multiply: ' '*(i-(i-1)%5), kurung menghapus dari seluruh ('_____'+(i==25?'':'|')), ganti '_____'dengan '_'*5, dan jika Anda membalik bersyarat terakhir yang Anda dapat menggunakan% sebagai operator ketidaksetaraan ortodoks: (i%25?'|':''). Ini akan membuat Anda turun ke 71.
Score_Under
@Score_Di bawah bagus, terima kasih, saya tidak tahu tentang mengalikan string: D
Kamil Mikolajczyk
2

Perl, 50

#!perl -l
print$"x6x(-$_/5),($_%5?$":_)x5,"|"x$|++for-20..0

Coba saya .

nutki
sumber
2

T-SQL, 276 byte

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+'|'
Jr Nipok
sumber
2

Visual FoxPro 9.0, 261 byte

n = Jumlah Langkah

total 175 karakter, tetapi harus menampilkan ke file untuk ditampilkan dengan benar - jadi minus 43 karakter untuk operasi file = 132 karakter.

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)

Catatan untuk penjawab: Jumlah byte adalah untuk kode sumber kerja absolut, dan penghitung byte mengatakan bahwa itu 261 byte, begitu juga.

danr44z
sumber
2

Bash (+ tac dari coreutils): 110 byte

Ini dapat ditempelkan langsung ke terminal.

(n =; set {1..4}; untuk i do echo "$ {n} _____ |"; n + = ''; untuk i do echo "$ n |"; selesai; n + = \; done; echo " $ {n} _____ ") | tac
Score_Under
sumber
Tanpa |tac, itu tidak akan berhasil. Dan saya menjalankan ini pada Git Bash, jadi saya harus bunuh diri.
kopi
1

kode mesin x86, 48 byte

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

Setara kode perakitan:

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

Keluaran:

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

Maaf tentang hasilnya berbeda; Saya harap ini bisa diterima.

Ini dijalankan di DOSBOX

SirPython
sumber