ベータ版のスノーフレーク


12

チャレンジ

15/16シーズンには多くの場所で最初の雪が降る冬が近づいているので、スノーマシンを壊して雪をコーディングしてみませんか?

nSTDINを介して整数を指定すると、レベルでASCII表現のベータのスノーフレーク(以下で説明)を出力しますn

ベータ版のスノーフレーク

スノーフレークは、レベル0で1つのxから始まります。

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、2つ以上の露出した側面(上記のコーナーと呼ばれる)を持つs​​にのみ追加されることに注意してください。

L字型は、n1より大きい値で重複する場合があります。たとえば、次のようになります。

レベル0が次の場合:

x x

次に、レベル1にオーバーラップが存在する必要があります(で示される、出力にをo含めないoでください):

 x o x
xxxoxxx
  x x
xxxoxxx
 x o x 

あなたの仕事は、ベータ版のスノーフレークのこのASCII表現を出力することです。

ボーナス

最短のプログラムには50 repのボーナスがあり、n負の場合、スノーフレーク(レベルn*-1)を画像として、または画面にグラフィカルに出力します。

報奨金とメインタスク用に別々のプログラムを用意できます。

勝ち

バイト単位の最短プログラムが優先されます。


4
ガンマスノーフレークは、この3Dバージョンです。
コナーオブライエン

1
@CᴏɴᴏʀO'Bʀɪᴇɴまあ、それはフォローアップの挑戦のアイデアです;)
ベータ崩壊

2 or more exposed sidesルールを明確にできますか?中心と仮定するとされ0,0、その後1,11,-1-1,-1-1,12つの露出側面(他の4点の方を向いている側)を持つすべての。いっぱいになるのを避けるために、3つ以上の開いた側面であるべきではありませんか?または、0または1のネイバー(基数)がある場合にのみ展開します。
ジョナサンリーチペピン

上記のように、中央の「正方形」の角にn = 2のような場合に追加の成長をもたらすでしょう(ピークではありませんが、W、NW、N側に露出します(上左)
ジョナサンリーチペピン

回答:


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

Python 2、269バイト

各コーナーにシェイプを配置しませんが、座標に基づいてキャラクターがスノーフレークにあるかどうかを決定します。

最初に1つのコーナーが生成され、次に完全なスノーフレークにミラーリングされます。

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.