내 아이를위한 계단 만들기


25

다른 날, 아들은 레고 이시 블록을 사용하여 계단을 세우라고 요청했습니다. 그리고 나는 다음과 같은 것을 생각해 냈습니다.

계단

그런 다음 내 아이는 컴퓨터 화면에서 비슷한 계단을 생성하는 최소 바이트 수를 사용하는 프로그램을 요청했습니다. 나는 를 잘하지 않으므로 도움이 필요합니다. 다음과 같은 프로그램이 필요합니다.

  • 계단에 필요한 레벨 수로 양의 정수를받습니다.
  • 이미지에 보이는 패턴으로 계단의 그림을 출력합니다.

출력은 텍스트 형식이지만 브릭은 서로 구분할 수 있습니다. 예를 들어, '█'문자를 반 블록으로 사용하여 원하는 색으로 칠하거나 원하는 문자를 선택할 수 있습니다.

제한 사항 :

  • 블록은 서로 다른 세 가지 색상이어야하며 가능한 한 오래 사용됩니다 (입력이 1 또는 2 인 경우 세 가지 색상을 모두 사용할 수있는 블록이 충분하지 않음). 예를 들어, '░▒▓'문자를 사용하거나 세 개의 다른 문자를 선택할 수 있습니다.
  • 동일한 색상 또는 패턴의 두 블록이 한 행에 나란히있을 수 없습니다.

아들은 계단이 그려져있는 한 후행 공백이나 줄 바꿈에 신경 쓰지 않습니다.

예 (문자가 잘못 선택되어 죄송합니다) :

Input: 1
Output:
██

Input: 2
Output:
██
 ▓▓

Input: 3
Output:
██
 ▓▓
██░░

Input: 5
Output:
██
 ██
██░░
 ██░░
██░░▓▓

17
아이가 재미를
— 느끼는

3
사이트에 오신 것을 환영합니다! ASCII 아트와 그래픽 출력의 결합은 대개 두 가지 병렬 과제를 야기하기 때문에 눈살을 찌푸리게합니다. 당신이 ASCII 갈 경우 일부 언어가 아닌 ASCII 문자로 어려움이있을 수 있기 때문에 또한, 나는 (당신이 이미 이렇게 생각하지만, 아마도 더 명시) 실제 ASCII 문자를 사용할 수 있도록 할
— 루이스 Mendo

2
참고로 블록은 Duplo
— caird coinheringaahing

10
@cairdcoinheringaahing duplo에는 둥근 버튼이 없습니다.
— Christoph

3
@cairdcoinheringaahing 문제의 블록은 Duplo가 아니며 Duplo는 Lego와 호환 되며 Lego Baby 입니다. 그들은 한 원래 DUPLO 프리모라고하고 나는 그들이 아닌 다른 이름이 있었으면 좋겠다 중 두의,하지만 그들은 기술적으로 레고와 DUPLO 모두는 다른 제품입니다.
— Draco18s

답변:


5

젤리 ,  21 19  16 바이트

d2SR+%3x2⁶;ṙḂµ€Y

결과를 인쇄하는 전체 프로그램.

용도 00, 11및 22블록 등.

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

방법?

d2SR+%3x2⁶;ṙḂµ€Y - Main link: number n
             µ€  - for €ach "row" in n (i.e. for row, r = 1 to n inclusive):
d2               -   divmod 2   -> [integer-divide by 2, remainder] i.e. [r/2, r%2]
  S              -   sum        -> r/2 + r%2
   R             -   range      -> [1, 2, 3, ..., r/2 + r%2]
    +            -   add r      -> [r+1, r+2, r+3, ..., r + r/2 + r%2]
     %3          -   modulo 3   -> [r%3+1, r%3+2, r%3+0, ..., (r + r/2 + r%2)%3]
                 -   e.g.: r: 1  , 2  , 3    , 4    , 5      , 6      , 7       , ...
                             [2], [0], [1,2], [2,0], [0,1,2], [1,2,0], [2,0,1,2], ...
       x2        -   times 2 - repeat each twice (e.g. [2,0,1,2] -> [2,2,0,0,1,1,2,2]
         ⁶       -   literal space character
          ;      -   concatenate (add a space character to the left)
            Ḃ    -   r mod 2 (1 if the row is odd, 0 if it is even (1 at the top))
           ṙ     -   rotate (the list) left by (r mod 2)
               Y - join with newlines
                 - implicit print (no brackets printed due to the presence of characters)

11

파이썬 2 , 55 바이트

i=2
exec"print(i%2*' '+`2%i*1122`*i)[:i];i+=1;"*input()

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

22, 44맨 위 행을 제외한 블록 사이의주기는 입니다 00. 예를 들어, 입력 10에서 인쇄

00
 22
2244
 2244
224422
 224422
22442244
 22442244
2244224422
 2244224422

i=2,3,..홀수 길이를위한 공간을 만들고 패턴 i시간을 반복하며 length로 잘림 으로써 길이 가 증가하는 행을 인쇄합니다 i. 패턴은 2244첫 번째 행을 제외한 모든 행 i=2에 적용됩니다 0. 이것은 산술 식으로 달성됩니다 2%i*1122.


1
사례 3에는 두 가지 색상 만 사용합니다.
— Christoph

매우 영리한 수정!
— Charlie

4

자바 스크립트 (ES6), 80 바이트

n=>eval(`for(s=11,i=1;i++<n;)s+='\\n'+(' '+'2233'.repeat(n)).substr(i%2,i+1);s`)


JavaScript (ES6), 87 바이트

이전 솔루션.

n=>[11,...Array(n).fill(' '+'2233'.repeat(n)).map((r,n)=>r.slice(n%2,n+3+n%2))].join`
`

3

SOGL , 31 28 27 25 바이트

∫³2\@*O"²b“2⁵I%*r*;I»«nKp

설명:

∫                          iterate input times, pushing 1-indexed counter
 ³                         get 3 total copies of it on stack
  2\                       1 if divides by 2, else 0
    @*                     get that many spaces
      O                    output in a new line
       "²b“                push 1122
           2⁵I%*           multiply 1122 by 2%(iteration+1)
                r          convert to string
                 *         multiply by iteration
                  ;I»«     get one iteration variable ontop of stack
                      n    increase, floor divide by 2, multiply by 2 (gets the amount of bricks in a line)
                       Kp  split that multiplied string in pieces of that length

이 기술을 사용하여
9에 대한 예제 출력 :

00
 22
2244
 2244
224422
 224422
22442244
 22442244
2244224422

비경쟁, 22 바이트

∫³2\@*O"²b“2⁵I%*;I»«mp

이 명령 m은 구현되지 않은 첫 번째 SOGL commit 에 대해 문서화되었습니다 .


3

05AB1E , 22 21 20 18 17 바이트

흥미로운 사실을 사용하여 4^(N+2)/5 = [3,12,51,204,...] = b[11,1100,110011,11001100,...]

F4NÌm5÷bDðì}r·IF,

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

설명

F                     # for N in 0...input-1 do
 4                    # push 4
  NÌ                  # push N+2
    m                 # push 4^(N+2)
     5÷               # integer division by 5
       b              # convert to binary
        D             # duplicate
         ðì           # prepend a space to the copy
           }          # end loop
            r         # reverse stack
             ·        # multiply top of stack by 2
              IF      # input times do
                ,     # print with newline

죄송하지만 답변을 개선했습니다. 멋진 방법입니다!
— Jonathan Allan

@JonathanAllan : 물론 그렇습니다;) 감사합니다! 답에 mod2 회전으로 들여 쓰기를 처리하는 멋진 아이디어.
— Emigna 2016 년

2

PHP, 61 59

aa<?for(;++$i<$argn;)echo"
",str_pad(" "[~$i&1],2+$i,bbcc);

파이썬 버전과 거의 비슷하지만 가능하면 세 가지 색상을 모두 사용합니다. 후행 줄 바꿈이 없습니다.

-2 bytes by @user63956. Thanks !

1
을 사용하여 2 바이트를 저장할 수 있습니다 aa<?for....
— user63956

1

Pyth , 29 바이트

VQI!%hN2pd)Vh/N2p*2@G%+NH3)pb

온라인으로 테스트하십시오!

설명

VQI!%hN2pd)Vh/N2p*2@G%+NH3)pb

VQ                               For N in range(0, input)
  I!%hN2pd)                      If N is odd, print a leading space
           Vh/N2          )      For H in range(0, N / 2 + 1)
                   @G%+NH3       Select the letter at position (N + H) % 3 in the alphabet
                 *2              Then make it a two letters string ("aa" or "bb" or "cc")
                p                Print it
                           pb    End the line by printing a new line

코드를 단축 할 수있는 방법이 많이 있다고 확신하지만 지금은 피곤합니다. 나중에 시도하겠습니다.


0

배치, 125 바이트

@set s=█
@for /l %%i in (2,1,%1)do @call:c
:c
@set s= %s:█= %
@set s=%s:▓=█%
@set s=%s:░=▓%
@set s=%s:  =░░%
@echo %s%

참고 : 이것을 CP437 또는 CP850 또는 이와 유사한 것으로 저장하십시오. 매번 색상을 회전시켜 작동합니다. 회전을 수행하기 위해 문자열을 매핑 할 수 없으므로 공백을 임시 스테이지로 사용하여 4 개의 대체를 사용합니다. 그러면 줄마다 공백을 접두어 두 개의 공백이 새로운 블록으로 바뀔 수 있습니다. 샘플 출력 :

░░
 ▓▓
░░██
 ▓▓░░
░░██▓▓
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.