Betas Schneeflocke

12

Herausforderung

Der Winter rückt immer näher und viele Orte erhalten die ersten Schneeschichten für die Saison 15/16. Warum brechen wir also nicht die Schneemaschinen aus und kodieren uns selbst etwas Schnee?

Bei einer Ganzzahl nüber STDIN wird die Schneeflocke von Beta (wie unten beschrieben) als ASCII-Darstellung auf Ebene ausgegeben n.

Betas Schneeflocke

Die Schneeflocke startet auf Stufe 0 mit einem einzelnen x:

x

Dann fügen Sie an jeder Ecke eine der folgenden Formen hinzu:

x
xx

Sie fügen die obige Form einer rechten oberen Ecke hinzu. Drehen Sie die untere rechte Ecke um 90 ° im Uhrzeigersinn, die untere linke um 180 ° im Uhrzeigersinn und die obere linke um 270 ° im Uhrzeigersinn.

Wenn Sie das tun, erhalten Sie die folgende Form:

 x x
xx xx
  x
xx xx
 x x

Beachten Sie die Ausrichtung der Formen. Wenn wir weitermachen, fügen wir unter Verwendung der oben beschriebenen Ausrichtungsregeln mehr Formen zu jeder Ecke hinzu, um Ebene 2 zu erhalten:

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

Beachten Sie, dass die Formen nur zu xs mit zwei oder mehr exponierten Seiten hinzugefügt werden (die oben als Ecke bezeichnet werden).

Die L-Formen können und werden sich bei Werten nüber 1 überlappen . Zum Beispiel:

Wenn Level 0 ist:

x x

Dann muss es Überlappungen in Ebene 1 geben (angezeigt mit o, nicht oin Ihre Ausgabe aufnehmen):

 x o x
xxxoxxx
  x x
xxxoxxx
 x o x 

Ihre Aufgabe ist es, diese ASCII-Darstellung von Betas Schneeflocke auszugeben.

Bonus

Für das kürzeste Programm wird ein Bonus von 50 Wiederholungen gewährt n, der die Schneeflocke (auf Stufe n*-1) als Bild oder grafisch auf dem Bildschirm ausgibt , wenn sie negativ ist .

Möglicherweise haben Sie ein separates Programm für das Kopfgeld und die Hauptaufgabe.

Gewinnen

Das kürzeste Programm in Bytes gewinnt.

Beta-Zerfall
quelle
4
Eine Gamma-Schneeflocke ist eine 3D-Version davon.
Conor O'Brien
1
@ CᴏɴᴏʀO'Bʀɪᴇɴ Nun, das ist eine Idee für eine Folgeherausforderung;)
Beta Decay
Können Sie die 2 or more exposed sidesRegel klarstellen ? Unter der Annahme , Zentrum wird 0,0dann 1,1, 1,-1, -1,-1, -1,1haben alle 2 freiliegenden Seiten (die Seiten gegenüber den anderen Punkten 4 gegenüberliegt). Sollten es nicht mehr als 3 offene Seiten sein, um ein Füllen zu vermeiden? Oder alternativ erweitert es sich nur, wenn es 0 oder 1 Nachbarn hat (Kardinal).
Jonathan Leech-Pepin
Wie oben, würde es auch in Fällen wie n = 2 an den Ecken des "Quadrats" um die Mitte zu zusätzlichem Wachstum führen (es ist kein Peak, aber es ist auf den Seiten W, NW, N exponiert (für oben) links)
Jonathan Leech-Pepin

Antworten:

8

CJam, 88 83 82 Bytes

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

Teste es hier.

Ich denke, ich kann viel sparen, wenn ich erkenne, wo die Ecken sind. Aber zumindest weiß ich endlich, wie die nächsten Iterationen aussehen:

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    

Betrachtet man diese, so scheinen sie viel regelmäßiger zu sein als ich erwartet hatte, und eine Art analytischer Lösung, die sie direkt generiert, könnte viel kürzer sein.

Martin Ender
quelle
1

Python 2, 269 Bytes

Platziert die Formen nicht an jeder Ecke, sondern bestimmt anhand der Koordinaten, ob sich ein Zeichen in der Schneeflocke befindet.

Zuerst wird eine Ecke generiert und dann bis zur vollen Schneeflocke gespiegelt.

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])
TFeld
quelle