เบต้าสโนว์เฟลก


12

ท้าทาย

ฤดูหนาวกำลังใกล้เข้ามาอย่างรวดเร็วโดยมีหลายสถานที่ที่รับหิมะชั้นหนึ่งสำหรับฤดูกาลที่ 15/16 ดังนั้นทำไมเราไม่แยกเครื่องจักรหิมะออกมา

ได้รับจำนวนเต็มnผ่าน STDIN ผลผลิตเกล็ดหิมะเป็นตัวแทน ASCII เบต้า (ตามที่อธิบายไว้ด้านล่าง) nที่ระดับ

เบต้าสโนว์เฟลก

เกล็ดหิมะเริ่มต้นที่ระดับ 0 ด้วย 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

โปรดทราบว่ารูปร่างจะถูกเพิ่มลงในxs โดยมีด้านที่สัมผัสสองด้านขึ้นไป (ซึ่งเรียกว่ามุมด้านบน)

รูปร่าง L อาจและจะทับซ้อนกันสำหรับค่าที่nมากกว่า 1 ตัวอย่างเช่น:

หากระดับ 0 คือ:

x x

จากนั้นจะต้องมีการทับซ้อนในระดับ 1 (ระบุด้วยo, ไม่รวมoในผลลัพธ์ของคุณ):

 x o x
xxxoxxx
  x x
xxxoxxx
 x o x 

งานของคุณคือการส่งออกการแสดง ASCII นี้ของเกล็ดหิมะของเบต้า

โบนัส

จะมีโบนัส 50 rep สำหรับโปรแกรมที่สั้นที่สุดซึ่งเมื่อnเป็นลบจะส่งเกล็ดหิมะ (ที่ระดับn*-1) เป็นรูปภาพหรือกราฟิกไปยังหน้าจอ

คุณอาจมีโปรแกรมแยกต่างหากสำหรับเงินรางวัลและงานหลัก

การชนะ

โปรแกรมที่สั้นที่สุดในหน่วยไบต์ชนะ


4
เกล็ดหิมะแกมม่าเป็นรุ่น 3 มิติ
Conor O'Brien

1
@ CᴏɴᴏʀO'Bʀɪᴇɴนี่เป็นแนวคิดสำหรับการติดตามความท้าทาย;)
สลายตัวของเบต้า

คุณสามารถอธิบาย2 or more exposed sidesกฎได้หรือไม่? สมมติว่าเป็นศูนย์0,0แล้ว1,1, 1,-1, -1,-1, -1,1ทุกคนมี 2 ด้านสัมผัส (ด้านข้างหันไปทางอื่น ๆ 4 คะแนน) มันควรจะเป็นด้านที่เปิด 3+ เพื่อหลีกเลี่ยงการ infilling หรือมิฉะนั้นจะขยายได้ก็ต่อเมื่อมีเพื่อนบ้าน 0 หรือ 1 คน (สำคัญ)
Jonathan Leech-Pepin

ตามที่กล่าวไว้ข้างต้นมันจะนำไปสู่การเติบโตเพิ่มเติมในกรณีเช่น n = 2 ที่มุมของ 'สี่เหลี่ยม' รอบจุดศูนย์กลาง (มันไม่ใช่จุดสูงสุด แต่จะถูกแสดงบน W, NW, N (สำหรับด้านบน ซ้าย).
Jonathan Leech-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

Python 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.