Beta'nın Kar Tanesi


12

Meydan okuma

Kış, 15/16 sezonu için ilk kar katmanlarını alan birçok yere hızla yaklaşıyor, neden kar makinelerini kırıp kendimize kar kodlamıyoruz?

nSTDIN üzerinden bir tamsayı verildiğinde , ASCII temsili Beta'nın kar tanesi (aşağıda açıklandığı gibi) seviyesinden çıkar n.

Beta'nın Kar Tanesi

Kar tanesi seviye 0'da tek bir x ile başlar:

x

Ardından, her köşeye şu şekillerden birini eklersiniz:

x
xx

Yukarıdaki şekli sağ üst köşeye eklersiniz. Sağ alt köşe için saat yönünde 90 °, sol alt için, 180 ° saat yönünde ve sol üst için 270 ° saat yönünde döndürün.

Bunu yaparsanız, aşağıdaki şekli alırsınız:

 x x
xx xx
  x
xx xx
 x x

Şekillerin yönüne dikkat edin. Devam ederek, 2. seviyeye ulaşmak için şemaya, yukarıda açıklanan yönlendirme kurallarını kullanarak her köşeye daha fazla şekil ekliyoruz:

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

Şekillerin yalnızca xiki veya daha fazla açık kenarı olan (yukarıda bir köşe olarak adlandırılır) olanlara eklendiğini unutmayın .

L şekilleri n1'den büyük değerler için üst üste gelebilir ve çakışacaktır. Örneğin:

Seviye 0 ise:

x x

Sonra seviye 1'de örtüşmeler olmalıdır (a ile gösterilir , çıkışınıza odahil etmeyin o):

 x o x
xxxoxxx
  x x
xxxoxxx
 x o x 

Senin görevin Beta kar tanesi ASCII temsili çıktısını almaktır.

Bonus

nNegatif olduğunda kartaneyi (seviye olarak n*-1) bir görüntü olarak veya ekrana grafik olarak veren en kısa program için 50 tekrar bonus olacaktır .

Ödül ve ana görev için ayrı bir programınız olabilir.

Kazanan

Bayt cinsinden en kısa program kazanır.


4
Bir gama kar tanesi bunun bir 3d versiyonudur.
Conor O'Brien

1
@ CᴏɴᴏʀO'Bʀɪᴇɴ Peki bu bir takip zorluğu için bir fikir;)
Beta

2 or more exposed sidesKuralı açıklığa kavuşturabilir misiniz ? Merkezi üstlenmektedir 0,0sonra 1,1, 1,-1, -1,-1, -1,1her 2 maruz tarafı (taraf, diğer 4 puan doğru bakan) sahiptir. Dolumdan kaçınmak için 3+ açık taraf olmamalı mı? Veya alternatif olarak sadece 0 veya 1 komşusu (kardinal) varsa genişler.
Jonathan Leech-Pepin

Yukarıda belirtildiği gibi, merkezdeki 'karenin' köşelerinde n = 2 gibi durumlarda ek büyümeye yol açacaktır (bir zirve değildir, ancak W, NW, N taraflarında (üstte) sol).
Jonathan Sülük-Pepin

Yanıtlar:


8

CJam, 88 83 82 bayt

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

Burada test edin.

Köşelerin nerede olduğunu nasıl tespit ettiğim konusunda çok tasarruf edebileceğimi düşünüyorum. Ama en azından bir sonraki iterasyonların neye benzediğini biliyorum:

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    

Bunlara baktığımda, beklediğimden çok daha düzenli görünüyorlar ve onları doğrudan üreten bir tür analitik çözüm çok daha kısa olabilir.


1

Python 2, 269 bayt

Şekilleri her köşeye yerleştirmez, ancak koordinatlara göre bir karakterin kar tanesi içinde olup olmadığını belirler.

İlk önce bir köşe oluşturulur ve daha sonra kar tanesinin tamamına yansıtılır.

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])
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.