Casciitum Scribe


23

소개

선인장은 다양한 크기, 모양 및 색상으로 제공됩니다. 그러나 모든 서구에서 가장 상징적 인 선인장과 필수 아이템은 이랍니다 . 중요한 특징은 크기와 팔이며, 전형적인 선인장 모양을 정의했습니다.

당신의 임무는 이랍니다를 ASCII 세계로 가져 오는 것입니다. 그러나 실제 세계에서와 같이 이랍니다는 다른 것과 유사하지 않으므로 프로그램은 다양한 팔 구성으로 이랍니다를 생성 할 수 있어야합니다.

이랍니다 예

  • 입력 : [0b10, 0b11]( [2, 3]10 진수, 입력 길이 2)
     _     
    / \    
 _  | |    
/ \ | |    
| | | |    
\ \_| |    
 \__  |    
    \ |    
 _  | |  _ 
/ \ | | / \
| | | | | |
\ \_| |_/ /
 \__   __/ 
    \ /    
    | |    
    | |    

명세서

이랍니다는 항상 밑면과 꼭대기를 가지고 있으며 그 사이에 줄기가 다양합니다. 줄기 부분에는 팔, 오른쪽 팔, 왼쪽 팔 또는 두 팔이 없습니다.

이랍니다 성장 패턴은 2 비트 값을 포함하는 입력 목록으로 제공됩니다. 00팔 없음, 01오른쪽 10팔, 왼쪽 11팔 및 두 팔 (모두 이진)을 의미합니다. 입력 목록의 길이는 이랍니다의 높이를 결정합니다.

이랍니다 섹션은 다음과 같습니다. 선인장 부분은 #명확하게 인쇄하기 위해 문어로 둘러싸여 있습니다.
이랍니다의 높이는 항상 4+6*k음이 아닌 정수의 문자와 같습니다 k.

#############
#     _     # Saguaro top
#    / \    #
#############
# _  | |  _ # Stem, both arms
#/ \ | | / \# Stem id: 11
#| | | | | |#
#\ \_| |_/ /#
# \__   __/ #
#    \ /    #
#############
# _  | |    # Stem, left arm
#/ \ | |    # Stem id: 10
#| | | |    #
#\ \_| |    #
# \__  |    #
#    \ |    #
#############
#    | |  _ # Stem, right arm
#    | | / \# Stem id: 01
#    | | | |#
#    | |_/ /#
#    |  __/ #
#    | /    #
#############
#    | |    # Stem, no arms
#    | |    # Stem id: 00
#    | |    #
#    | |    #
#    | |    #
#    | |    #
#############
#    | |    # Saguaro base
#    | |    #
#############

입력

앞에서 말했듯이 입력은 2 비트 값 목록 ( 0, 1, 2, 310 진수)으로 구성됩니다. 합리적인 형식으로 제공 될 수 있습니다. 목록의 첫 번째 요소는 이랍니다의 가장 높은 줄기 부분에 해당하고 두 번째 요소는 두 번째 가장 높은 줄기 부분에 해당합니다.
원하는 경우 입력 목록의 길이를 추가 입력으로 요구할 수 있습니다. 그렇게하면 답에 명시하십시오.

산출

출력 ASCII saguaro는 위에서 설명한 정확한 스템 파트를 사용하여 빌드해야합니다. 행의 후행 공백과 새 행의 후행 공백은 무시됩니다. 위에서 지정한대로 더 많거나 적게 또는 많이 인쇄 할 수 있습니다.

규칙

  • 표준 허점 적용
  • 이것은 이며 프로그램의 바이트 수는 최소화되어야합니다

테스트 사례

  • 특이 치. 입력:[0b01, 0b00, 0b01, 0b11]
     _     
    / \    
    | |  _ 
    | | / \
    | | | |
    | |_/ /
    |  __/ 
    | /    
    | |    
    | |    
    | |    
    | |    
    | |    
    | |    
    | |  _ 
    | | / \
    | | | |
    | |_/ /
    |  __/ 
    | /    
 _  | |  _ 
/ \ | | / \
| | | | | |
\ \_| |_/ /
 \__   __/ 
    \ /    
    | |    
    | |    

  • 교대 팔. 입력:[0b10, 0b01, 0b10]
     _     
    / \    
 _  | |    
/ \ | |    
| | | |    
\ \_| |    
 \__  |    
    \ |    
    | |  _ 
    | | / \
    | | | |
    | |_/ /
    |  __/ 
    | /    
 _  | |    
/ \ | |    
| | | |    
\ \_| |    
 \__  |    
    \ |    
    | |    
    | |    

  • 풍부한 무기. 입력:[0b11, 0b11]
     _     
    / \    
 _  | |  _ 
/ \ | | / \
| | | | | |
\ \_| |_/ /
 \__   __/ 
    \ /    
 _  | |  _ 
/ \ | | / \
| | | | | |
\ \_| |_/ /
 \__   __/ 
    \ /    
    | |    
    | |    

  • 창이라고도하는 무기는 없습니다. 입력:[0b00]
     _     
    / \    
    | |    
    | |    
    | |    
    | |    
    | |    
    | |    
    | |    
    | |    

  • 몸이없고 어떤 사람들은 그것을 어린 선인장이라고 부릅니다. 입력:[]
     _     
    / \    
    | |    
    | |    


입력량을 부품 수로 사용한 다음 각 부품 번호를 개별적으로 취할 수 있습니까? (예 : 첫 번째 테스트 사례는 다음과 같습니다 4 1 0 1 3)
dzaima

후행 공백을 무시할 수 있습니까?
Brian H.

@dzaima 당신은 할 수 있습니다.
Jonathan Frech

@BrianH. 예; 후행 공백은 모든 줄에서 무시됩니다.
Jonathan Frech

답변:


10

, 50 49 바이트

↘_\¶/F²«J¹¦²Fθ¿﹪÷Iκ⁺¹ι²”{➙∧⊟≕δaL7YF¬⊕ρ↥↖_K”↓⁶↓²‖T

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 설명:

↘_\¶/

상단을 그립니다.

F²«

양쪽을 반복합니다.

J¹¦²

상단 오른쪽 바로 아래로 이동하십시오.

Fθ

각 줄기 부분을 반복합니다.

¿﹪÷Iκ⁺¹ι²

팔이 있는지 테스트하십시오.

”{➙∧⊟≕δaL7YF¬⊕ρ↥↖_K”

그렇다면 팔을 인쇄하십시오.

↓⁶

그렇지 않으면 그냥 수직선을 인쇄하십시오.

↓²

스템을 인쇄 한 후 받침대를 인쇄하십시오.

‖T

다른 쪽을 그릴 준비를하십시오. 두면이 모두 그려지면 해당면은 최종 위치로 다시 반사됩니다.


7

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

더 나은 방법이 있다는 것을 깨닫기 전에 다른 솔루션에 너무 오래 머물 렀습니다.

a=>`     _
    / \\`+a.map(([x,y])=>`
 1  | |  2
3 5 | | 4 6
7 7 | | 8 8
5 51| |24 4
 511${`| `[x]} ${`| `[y]}224
    ${`|\\`[x]} `.replace(/\d/g,m=>` _/\\|`[m%2?x*-~m/2:y*m/2])+`|/`[y],s=`
    | |`).join``+s+s

시도 해봐

o.innerText=(f=
a=>`     _
    / \\`+a.map(([x,y])=>`
 1  | |  2
3 5 | | 4 6
7 7 | | 8 8
5 51| |24 4
 511${"| "[x]} ${"| "[y]}224
    ${"|\\"[x]} `.replace(/\d/g,m=>` _/\\|`[m%2?x*-~m/2:y*m/2])+"|/"[y],s=`
    | |`).join``+s+s
)(i.value=["11","10","01","00"]);oninput=_=>o.innerText=f(i.value.split`,`)
<input id=i><pre id=o>


00,01,10,11이진 입력 또는 대신 리터럴 을 입력으로 사용 0,1,2,3합니다. OP 테스트 사례를 사용하면 실패합니다.
Brian H.

@BrianH .: 입력에 대한 챌린지 사양 인용 : " 모든 합리적인 형식으로 제공 될 수 있습니다 "
Shaggy

1
"입력은 2 비트 값 (10, 0, 1, 2, 3)으로 구성됩니다." 바로 그 전에 ... (비공식적이거나 다른 사람이 아니라면, 이것은 정말 영리합니다. 규칙에 대한 나의 해석에 따르면 입력이 일치하지 않습니다.)
Brian H.


3

파이썬 (2) , 256 (253) ... 205 203 199 바이트

r=[('     _',''),('/','\ ')]
for a in input()+[0]:r+=zip(*[['|'*6,'_|    |_,,/|  \/  |\,,||  ||  ||,,\| _\/_ |/,,\ ____ /,,\/'[i::2].split(',')][2-i&a>0]for i in 0,1])
for l in r[:-4]:print'%5s %s'%l

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


다른 문자열 리터럴에서와 마찬가지로 첫 번째 줄에서 이스케이프 백 슬래시를 생략 할 수 있습니다.
Jonathan Frech

후행 공백을 모두 제거하여 18 바이트를 절약 할 수있는 것 같습니다.
얽히고 설킨

for ...:\n r...\n r...-> for ...:r...;r...3 바이트를 저장합니다.
Jonathan Frech

1

PowerShell , 235 바이트

param($a)'     _
    / \'
($a|%{((,'1|'*6),('1|  _
1| / \
1|2
1|_/ /
1 __/ 
1/'),(' _ 2
/ \2
| |2
\ \_| |
 \__  |
    \ |'),(' _ 2  _
/ \2 / \
| |22
\ \_| |_/ /
 \__   __/
    \ /'))[$_]})-replace1,'    | '-replace2,' | |'
,'    | |'*2

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

PowerShell을은 없습니다 map또는 zip반복되는 부분의 간단한 교체 - 우리가 뭔가 남아있는, 그래서 문자열을 반대하거나 정말 쉬운 방법.

처음 두 줄은 정수 배열로 입력을 받아 선인장의 상단을 출력합니다. 그런 다음 $a현재 값을 기반으로 반복하여 네 개의 문자열 배열을 선택합니다. 이 줄은 파이프 라인에 남은 다음 -replace적절한 지점을 채우는 데 사용 합니다. 그런 다음 선인장 바닥을 파이프 라인에 올려 놓습니다.

모든 것은 파이프 라인에서 수집 Write-Output되며 프로그램 완료시 암시 적으로 발생하여 모든 요소 사이에 줄 바꿈이 삽입됩니다.


1

05AB1E , 76 75 바이트

„ _…/ \‚4ú»,v6F'|4ú"_ |/\"•Aö¡Èèj{^ë•5вèJ5ôNè©‚y1›èð'|®∞2äθ‚yÉèJ,}}„| 4úû=,

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


1
Meh, 나는 나중에 이길려고합니다.
Magic Octopus Urn

@MagicOctopusUrn : 행운을 빌어 요! 당신이 그것을 관리하기를 바랍니다 (그리고 아마도 문제로 전환 : P)
Emigna

이 문제를 극복 할 수있는 좋은 아이디어는 "oasis / 05AB1E"채팅에 게시 한 명령의 30 바이트 b / c에 의해 찌그러졌습니다. 좋은 골프, 지금 시도하면 너무 가깝습니다.
Magic Octopus Urn

1

자바 (OpenJDK 8) , 626 566 499 466 398 312 310 308 바이트

톤으로 골프를 칠 수 있습니다

a->{String r=" |,",g="    |",n="     _,    / \\,";boolean j,k;for(int e:a)n+=((k=e>1)?" _  |":g)+((j=e%2>0)?" |  _,":r)+(k?"/ \\ |":g)+(j?" | / \\,":r)+(k?"| | |":g)+(j?" | | |,":r)+(k?"\\ \\_|":g)+(j?" |_/ /,":r)+(k?" \\__ ":g)+(j?"  __/,":r)+(k?"    \\":g)+(j?" /,":r);return(n+g+r+g+r).replace(",","\n");}

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


1
당신은 변경하여 2 바이트를 저장할 수 {j=e>1;k=e%2>0;n+=(k?" _ |":g)+(j?" | _,":r)+n+=((k=e%2>0)?" _ |":g)+((j=e>1)?" | _,":r)+와 닫는 제거 }뿐만 아니라위한 루프의합니다.
Kevin Cruijssen

당신은 "암"에 대한 잘못된 방향으로 '라운드를 1하고 2.
얽히고 설킨

0

SOGL V0.12 , 56 54 53 바이트

5⁷yΙ‚‘∑≡`a#¾‘O.{@.2%i»¹{"⁸G‘6∙;?X"j1>ζ╔²i[n¹‘5n}┼±↔}O

여기 사용해보십시오!

설명:

..‘                   push the ending part - "    | |\n    | |"
   ..‘O               output the starting part - "     _ \n    / \"
       .{             input times do
         @              push a space
          .2%           push input%2
             i»         push floor(prevInput/2)
               ¹        wrap the two in an array

{                   }   for each of the two numbers
 "..‘                     push "|    " - base stem
     6∙                   multiply vertically 6 times
       ;?       }         if the current item iterating over is truthy (i.e. != 0)
         X                  remove ToS - the regular stem - from the stack 
          "..‘              push "|  _ | / \| | ||_/ / __/ /    " - stem with an arm
              5n            split it into line lengths of 5
                 ┼        add that horizontally to the space pushed earlier (or whatever it's become)
                  ±↔      reverse ToS - the stem currently - horizontally
                     O  output the array of the current part
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.