계단 도전


20

당신의 작품은이 예술 작품을 재현하는 것입니다.

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

대답은 이것을 다시 작성하여 결과로 인쇄해야합니다. 모든 언어가 허용되며, 직접 예술 작품을 인쇄 할 수 없으며, 어느 정도 수준의 조작이 필요합니다. 바이트 수가 가장 적은 답이 이깁니다.

목요일 오전 6:30 (UTC)에 문을 닫습니다.

Java 로이 작업을 수행 한 친구가 원래의 사실을 나에게 보여 주었고, 그는 소스 코드를 보여주기를 거부했으며 이제 다른 언어의 광채로 그를 현혹시킬 것입니다. :디

대체 문자를 사용할 수 없습니다 (쉽게 만들 수 있습니까?).


현재 리더 보드

  1. Pyth -28 바이트-isaacg
  2. CJam -30 바이트-Runer112
  3. CJam -32 바이트 -Martin Büttner

최고 투표 수 : C -73 바이트-Paul R


isaacg는 Pyth와 함께 계단 도전을 통과 한 왕관을 차지합니다. PPCG에서 이와 같은 더 많은 도전에 주목하십시오!


1
프로그래밍 퍼즐 및 코드 골프 스택 교환에 오신 것을 환영합니다! 여기에있는 모든 과제는 어떤 솔루션을 이길 지 확실하게 결정하기 위해 객관적인 선정 기준이 필요합니다. 이것은 코드 골프 질문 처럼 보입니다 . 즉, 가장 짧은 코드가 승리합니다. 그러나 다른 것을 만들고 싶을 때 직접 편집 해 드리겠습니다. 감사!
손잡이

1
아 죄송합니다. 그런 다음 귀하의 질문에 적절한 태그를 편집했습니다.
Doorknob

13
6 번째 줄에 1 개의 이상한 후행 공백을 인쇄해야합니까?
Optimizer

4
더 일반적으로 후행 공간이 허용됩니까? 이것을 첫 줄 너비의 사각형으로 채울 수 있습니까?
마틴 엔더

8
후행 줄 바꿈이 가능합니까?
TheNumberOne

답변:


4

피스, 29 28

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

여기에서 시도하십시오.

@xnor의 솔루션에서 "5 개의 공백 또는 5 개의 밑줄 추가"를 사용하지만 20에서 0이 아닌 0에서 20까지의 루프를 사용하는 매우 간단한 솔루션입니다.


1
Staircase Challenge를 통과 한 것에 대해 isaacg 경을 당신에게 더빙했습니다.
there willbecoffee3

... 그리고 이제 계단에 들어갈 수 있습니다
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 솔루션을 게시 할 사람이 있어야합니다. 당신을 위해 공감하십시오.
커피

1
루프를 다음과 같이 변경하면 더 짧아 질 수 있습니다.for(i=25;i--;)
Felix Bytow

1
@FelixBytow이어야합니다 i=26. 이 외에도 추가 캐릭터 ' '로 변경 될 수 있습니다 32. 이 최적화 후 내 솔루션은 2 자 더 깁니다 :(
Allbeert

2
추가 단계가있는 것 같습니다. 필요한 출력에는 26 개가 아닌 21 개의 행이 있습니다. 더 최적화 : main(i){for(i=21;i--;)printf("%*s%c\n",i/5*6+5,i%5?"":"_____",i<20?'|':0);}1. 길이 2에 대한 공식을 단순화합니다. @Allbeert에서 알 수 있듯이 ASCII 코드를 사용할 수는 ' '있지만 ASCII 0에서 ASCII 32로 중지되는 이유는 무엇입니까? 또한 그것은 ""대신 나를 위해 잘 실행" "
Level River St

1
'|'인쇄 에서 2 바이트를 절약하기 위해 어떻습니까? c;main(i){for(i=21;i--;c='|')printf("%*s%c\n",i/5*6+5,i%5?"":"_____",c);}
Runer112

11

자바 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로 했으므로 인상 깊습니다.
커피

9

Brainfuck (1065 바이트)

예쁘지 않고 짧지는 않지만 나중에 최적화하겠습니다!

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

brainfuck는 결코 예쁘지 않습니다 :) 그냥 작동시키기 위해
공감


ideone.com/ICtrhv 시간 제한을 초과했습니다 . 무엇을 의미합니까?
커피

Bizzare ... 여기 사용해보십시오 : esoteric.sange.fi/brainfuck/impl/interp/i.html
Joshpbarron

8

CJam, 36 30 바이트

온라인으로 사용해보십시오.

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

내 초기 36 바이트 솔루션은 결과를 출력 방향으로 생성했습니다. 알고리즘에서 더 많은 바이트를 짜 내려는 시도에도 불구하고 나는 할 수 없었습니다. 그런 다음 행 대신 을 생성 하고 결과를 바꾸는 Martin의 훌륭한 전략 을 보았습니다 . 아마도 이것이 더 나은 접근 방식이라는 것을 깨달았으므로 전치 기반 솔루션을 만들기 시작했습니다.

그러나 그 전략을 구현하는 방법은 상당히 다릅니다. 전체 열을 생성하는 대신 이미 생성 된 "단계"를 들여 쓰고 반복 할 때마다 새 단계를 추가하는 반복 솔루션을 사용합니다. 따라서 메인 루프의 첫 번째 반복은 다음을 생성합니다.

 |||||
_
_
_
_
_

메인 루프의 두 번째 반복은 기존 단계를 들여 쓰고 새 단계를 추가합니다.

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

그리고 메인 루프의 전체 5 번의 반복이 이것을 생성합니다 :

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

그 후, 수행해야 할 모든 것은 첫 번째 라인을 제거하는 것입니다. 첫 번째 라인은 그렇지 않으면 하단 단계의 원치 않는 라이저가되어 전치됩니다.


7

파이썬 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 페이지가 없습니다. 내 말은, 무슨 ..
거기에 커피

4
@therewillbecoffee이 사이트의 많은 언어에는 위키 백과 페이지가 없습니다. 그것은 재미있다;)
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*

설명

a) 격자를 바꾸고 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 바이트로했다.
커피

6

파이썬 2, 59

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

21 개 라인으로 색인 n에서 [20,19,...,1,0]. 먼저 우리가 올라간 각 "단계"(마이너스 1)에 대해 6 개의 공백을 인쇄합니다 n/5*6. 그런 다음 5의 배수에 대한 밑줄을 제외하고 5 개의 공백을 인쇄합니다. 마지막으로 맨 위 줄을 제외한 세로 줄을 인쇄합니다 n=20.


좋고 간단합니다. 나는 그것을 좋아한다!
Sp3000

6

자바 스크립트 (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. 콘솔에서 실행하면 콘솔없이 정상적으로 작동합니다. 또한 마지막 중괄호 안의 세미콜론은 필요하지 않습니다. (y/5-.2)((y-1)/5)
qw3n

이러한 제안에 감사드립니다. 규칙에 경고가 필요한지 확실하지 않습니다.
vvye

당신은 또한 s+='\n'후를 이동하고 y--중괄호를 제거하여 다음과 같이 보일 수 for(s='',y=21;y>0;y--,s+='\n')있습니다. 또한 for 루프 내부에서 s를 초기화하여 코드가 모두 하나의 명령문 인
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으면 두 용어가 모두 2 바이트를 절약하는 경우 0인지 테스트 할 수 있습니다 .
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 주석이 어떻게 변형되었는지 확인합니다.

((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)그리고 그냥 b => [0,1,2,3].map(b(-4) 사용
edc65

나는 Firefox를 실행하고 꽤 잘 작동합니다!
coffee

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)

계단을 거꾸로 만들고 뒤집습니다. 내 마력 계는 모든 마법 상수 때문에 파산했습니다.

'|'의도적으로 초기화 (대신 ASCII 코드 포인트들) 그대로 방치 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에 오신 것을 환영합니다! 몇 가지 루비 골프 팁 : 1. 불필요한 공백이 있습니다. 2. 단일 문자열은 다음과 같이 '_'쓸 수 있습니다 ?_. 3. 줄 바꿈은 문자열에 직접 포함시킬 수 있습니다 (실제로 할 수 있음 "<linebreakhere>|"). 4. 그 주위의 괄호는 필요하지 않습니다. 마지막 puts은로 바꿀 수 있습니다 $><<(을 사용한 후에도 공간을 제거 할 수 있습니다 ?_). 유지하십시오! :)
Martin Ender

네, 공백을 제거했습니다. 감사! 나는 단일 문자열에 대해 몰랐다.
psycotica0

로 대체 (1..4).map4.times다음 4-i대신 사용할 수도 있습니다 5-i.
Martin Ender

잘 했어 끝난.
psycotica0

4

줄리아, 83 바이트

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

Julia에서는 문자열 연결이 *연산자를 사용하여 수행 되고 문자열 반복이을 사용하여 수행됩니다 ^.


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

그루비, 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

펄, 50

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

저를 보십시오 .


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

배쉬 (coreutils의 + tac) : 110 바이트

이것은 터미널에 직접 붙여 넣을 수 있습니다.

(n =; set {1..4}; 내가 에코 "$ {n} _____ |"; n + = ''; 내가 에코 "$ n |"; done; n + = \; done; echo " $ {n} _____ ") | tac

없이 |tac 제대로 작동하지 않습니다. 그리고 이것을 Git Bash에서 실행 했으므로 스스로 죽여야합니다.
42 분 커피

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.