내 아이를위한 계단 만들기


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, 1122블록 등.

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

방법?

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.