베타의 눈송이


12

도전

15/16 시즌 동안 첫 눈이 내리는 많은 곳에서 겨울이 빠르게 다가오고 있습니다. 그래서 스노우 머신을 분해하고 눈을 직접 코딩하지 않겠습니까?

nSTDIN을 통해 정수가 주어지면 ASCII 표현 Beta의 눈송이 (아래 설명 참조)를 level로 출력하십시오 n.

베타의 눈송이

눈송이는 단일 x로 레벨 0에서 시작합니다.

x

그런 다음 각 모서리에 다음 모양 중 하나를 추가하십시오.

x
xx

위 모양을 오른쪽 상단에 추가합니다. 오른쪽 아래 모서리의 경우 시계 방향으로 90 °, 왼쪽 아래, 시계 방향으로 180 °, 왼쪽 위, 시계 방향으로 270 ° 회전합니다.

그렇게하면 다음과 같은 모양이됩니다.

 x x
xx xx
  x
xx xx
 x x

도형의 방향에 유의하십시오. 계속해서 위에서 설명한 방향 규칙을 사용하여 각 모서리에 더 많은 모양을 다이어그램에 추가하여 레벨 2를 얻습니다.

  x x x
 xxxxxxx
xx x x xx
 xxx xxx
xx  x  xx
 xxx xxx
xx x x xx
 xxxxxxx
  x x x

셰이프는 x둘 이상의 노출 된면 (위 모서리라고 함)이있는에 추가됩니다.

L 자형은 n1보다 큰 값에 대해 겹치거나 겹칠 수 있습니다 . 예를 들면 다음과 같습니다.

레벨 0이 다음과 같은 경우 :

x x

그런 다음 레벨 1에 겹침이 있어야합니다 (로 표시되고 출력에 o포함하지 마십시오 o).

 x o x
xxxoxxx
  x x
xxxoxxx
 x o x 

당신의 임무는 베타 눈송이의 ASCII 표현을 출력하는 것입니다.

보너스

가장 짧은 프로그램의 경우 50 개의 보너스 보너스가 있으며, n음수 인 경우 눈송이 (레벨 n*-1)를 이미지로 또는 화면에 그래픽으로 출력합니다.

현상금 및 주요 작업에 대한 별도의 프로그램이있을 수 있습니다.

승리

바이트 단위의 최단 프로그램이 이깁니다.


4
감마 눈송이는 이것의 3D 버전입니다.
Conor O'Brien

1
@ CᴏɴᴏʀO'Bʀɪᴇɴ 글쎄, 그것은 후속 도전에 대한 아이디어입니다;)
Beta Decay

2 or more exposed sides규칙 을 명확히 할 수 있습니까 ? 센터 가정되는 0,0다음 1,1, 1,-1, -1,-1, -1,1모든 2 개 노출 측면 (측면이 다른 4 점 향)이있다. 충전을 피하기 위해 3 + 개 방면이 아니어야합니까? 또는 0 또는 1 개의 이웃 (추기경)이있는 경우에만 확장됩니다.
Jonathan Leech-Pepin

위와 같이 중심 주위의 '사각형'모퉁이에서 n = 2와 같은 경우 추가 성장으로 이어질 것입니다 (피크는 아니지만 W, NW, N면에 노출됩니다 (위쪽) 왼쪽).
조나단 리치-Pepin에

답변:


8

CJam, 88 83 82 바이트

1]]{{0f+zW%}8*{YYb_m*{~W$m>fm>}%z:z8Ybff=__1m>\1fm>]:zWf%(\:..|}4*..|}q~*" x"ff=N*

여기에서 테스트하십시오.

모서리 위치를 감지하는 방법을 많이 절약 할 수 있다고 생각합니다. 그러나 적어도 다음 반복이 어떻게 보이는지 알고 있습니다.

N = 3 :

   x x x x   
  xxxxxxxxx  
 xx x x x xx 
xx xxxxxxx xx
 xxx x x xxx 
xx xxx xxx xx
 xxx  x  xxx 
xx xxx xxx xx
 xxx x x xxx 
xx xxxxxxx xx
 xx x x x xx 
  xxxxxxxxx  
   x x x x   

N = 4 :

    x x x x x    
   xxxxxxxxxxx   
  xx x x x x xx  
 xx xxxxxxxxx xx 
xx xx x x x xx xx
 xxx xxxxxxx xxx 
xx xxx x x xxx xx
 xxx xxx xxx xxx 
xx xxx  x  xxx xx
 xxx xxx xxx xxx 
xx xxx x x xxx xx
 xxx xxxxxxx xxx 
xx xx x x x xx xx
 xx xxxxxxxxx xx 
  xx x x x x xx  
   xxxxxxxxxxx   
    x x x x x    

이것들을 보면, 그것들은 내가 기대했던 것보다 훨씬 규칙적이며 직접 생성하는 일종의 분석 솔루션이 훨씬 짧을 수 있습니다.


1

파이썬 2, 269 바이트

각 모서리에 모양을 배치하지 않지만 좌표를 기준으로 문자가 눈송이에 있는지 여부를 결정합니다.

첫 번째 코너가 생성 된 다음 전체 눈송이로 미러링됩니다.

i=input()
d=2*i+1
s=[x[:]for x in[[0]*d]*d]
s[0][0]=1
if i:s[1][1]=1
for j in range(2,d):
 for v in range(j+1):s[j][v]=s[v][j]=(j+v)%3!=1and j+v<d+i if v>j/2 else j%2==1or j%4+v%2in[0,3]
for l in[l[:0:-1]+l for l in s[:0:-1]+s]:print''.join(['X'if n else' 'for n in l])
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.