Bông tuyết Beta


12

Thử thách

Mùa đông đang đến rất nhanh với nhiều nơi nhận được những lớp tuyết đầu tiên cho mùa 15/16, vậy tại sao chúng ta không phá vỡ những cỗ máy tuyết và tự mã hóa tuyết?

Cho một số nguyên nqua STDIN, xuất ra bông tuyết Beta đại diện ASCII (như được mô tả bên dưới) ở cấp độ n.

Bông tuyết Beta

Bông tuyết bắt đầu ở cấp 0 với một x:

x

Sau đó, trên mỗi góc, bạn thêm một trong các hình dạng sau:

x
xx

Bạn thêm hình trên vào một góc trên bên phải. Đối với góc dưới bên phải, xoay nó 90 ° theo chiều kim đồng hồ, cho góc dưới bên trái, 180 ° theo chiều kim đồng hồ và cho góc trên bên trái, 270 ° theo chiều kim đồng hồ.

Nếu bạn làm điều đó, bạn sẽ có được hình dạng sau:

 x x
xx xx
  x
xx xx
 x x

Hãy lưu ý về hướng của các hình dạng. Tiếp tục, chúng tôi thêm nhiều hình dạng vào mỗi góc, sử dụng các quy tắc định hướng được mô tả ở trên, vào sơ đồ để có được mức 2:

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

Lưu ý rằng các hình dạng chỉ được thêm vào xs với hai hoặc nhiều mặt lộ ra (được gọi là một góc ở trên).

Các hình dạng L có thể và sẽ chồng lấp cho các giá trị nlớn hơn 1. Ví dụ:

Nếu mức 0 là:

x x

Sau đó, phải có sự trùng lặp ở cấp 1 (được biểu thị bằng một o, không bao gồm otrong đầu ra của bạn):

 x o x
xxxoxxx
  x x
xxxoxxx
 x o x 

Nhiệm vụ của bạn là xuất ra đại diện ASCII này của bông tuyết Beta.

Tặng kem

Sẽ có phần thưởng 50 rep cho chương trình ngắn nhất, khi nâm, sẽ xuất ra bông tuyết (ở cấp độ n*-1) dưới dạng hình ảnh hoặc đồ họa trên màn hình.

Bạn có thể có một chương trình riêng cho tiền thưởng và nhiệm vụ chính.

Chiến thắng

Chương trình ngắn nhất tính bằng byte thắng.


4
Một bông tuyết gamma là một phiên bản 3d của điều này.
Conor O'Brien

1
@ CᴏɴᴏʀO'Bʀɪᴇɴ Vâng đó là một ý tưởng cho một thử thách tiếp theo;)
Beta Decay

Bạn có thể làm rõ các 2 or more exposed sidesquy tắc? Trung tâm Giả sử là 0,0sau đó 1,1, 1,-1, -1,-1, -1,1tất cả đều có 2 mặt tiếp xúc (mặt đối diện với 4 điểm khác). Không phải là hơn 3 mặt mở để tránh đổ? Hoặc thay thế, nó chỉ mở rộng nếu nó có 0 hoặc 1 hàng xóm (hồng y).
Jonathan Leech-Pepin

Như trên, nó cũng sẽ dẫn đến tăng trưởng bổ sung trong các trường hợp như n = 2 trên các góc của 'hình vuông' xung quanh trung tâm (nó không phải là một đỉnh, nhưng nó được phơi bày ở các cạnh W, NW, N (đối với đỉnh trái).
Jonathan Leech-Pepin

Câu trả lời:


8

CJam, 88 83 82 byte

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

Kiểm tra nó ở đây.

Tôi nghĩ rằng tôi có thể tiết kiệm rất nhiều trong cách tôi phát hiện các góc ở đâu. Nhưng ít nhất cuối cùng tôi cũng biết các lần lặp lại tiếp theo trông như thế nào:

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    

Nhìn vào những thứ này, chúng dường như đều đặn hơn tôi mong đợi, và một số giải pháp phân tích tạo ra chúng trực tiếp có thể ngắn hơn nhiều.


1

Python 2, 269 byte

Không đặt các hình ở mỗi góc, nhưng xác định xem một nhân vật có trong bông tuyết hay không dựa trên tọa độ.

Một góc đầu tiên được tạo ra, và sau đó được nhân đôi xung quanh thành bông tuyết đầy đủ.

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])
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.