Miếng dán bí ngô ngẫu nhiên


12

Tôi đang đi bộ qua một miếng bí ngô vào một ngày khác cho một bữa tiệc sinh nhật, và nhận thấy những cây nho bí ngô tạo ra một mô hình tiện lợi, với những vòng xoáy, vòng lặp và cành cây. Chúng tôi sẽ mô phỏng điều đó ở đây với một số nghệ thuật ASCII.

          (())
            \
   p--q      p-----q
  /    \    /       \
(())    b--d       (())

Quy tắc xây dựng Vine

  • Chỉ có một cây nho chính, chỉ bao gồm các \ / - p q b dnhân vật.
  • Cây nho chỉ đi từ trái sang phải qua màn hình. Nói cách khác, giả sử bạn là một con kiến ​​bắt đầu từ nhân vật cây nho nhất bên trái. Khi bạn tiến tới ký tự liền kề tiếp theo trên cây nho chính, bạn phải di chuyển một cột sang phải - không bao giờ sang trái.
  • Khi cây nho thay đổi hướng, một trong các p q b dký tự được yêu cầu để mô phỏng một vòng lặp. Các pdây leo nối từ đông bắc sang đông, qtừ đông sang đông nam, btừ đông nam sang đông và dtừ đông sang đông bắc. Lưu ý rằng "vòng lặp" của chữ cái kết nối với cây nho nằm ngang và "thân" của chữ cái kết nối với đường chéo.
  • Sự khởi đầu của cây nho phải là một trong phoặc b(sự lựa chọn của bạn, không phải là ngẫu nhiên) và bắt đầu theo chiều ngang. Sự kết thúc của cây nho phải là một trong qhoặc d(sự lựa chọn của bạn, không phải là ngẫu nhiên) và phải kết thúc theo chiều ngang.
  • Lưu ý rằng các vòng lặp có thể được đặt ngay cạnh các vòng khác (ví dụ: pdlà một chuỗi con hợp lệ của cây nho), nhưng điều đó có thể khiến việc đặt bí ngô sau này trở nên khó khăn hơn. Bạn có thể muốn luôn có một cái - / \ngay sau một vòng lặp (như tôi đã làm trong các ví dụ của mình), nhưng không bắt buộc.

Quy tắc bí ngô

  • Những quả bí ngô chỉ bao gồm (())(chuỗi chính xác này).
  • Từ cây nho chính, những quả bí ngô được gắn bởi các nhánh. Các nhánh này chỉ có thể được gắn vào các p q b dvòng, chính xác là một \hoặc /dài và gắn vào quả bí ngô để "phần cuối" của nhánh con nằm ở giữa.
  • Họ có thể kết nối trên hoặc dưới cây nho chính.
  • Các nhánh có thể kết nối đi đến "bên trái."
  • Chỉ một quả bí ngô có thể gắn trên mỗi nhánh, và chỉ một nhánh trên mỗi vòng.

Ngẫu nhiên

  • Khi đi theo chiều ngang, cây nho có 50% cơ hội tiếp tục theo chiều ngang, 25% cơ hội quay về hướng đông bắc và 25% cơ hội quay về hướng đông nam.
  • Khi đi theo đường chéo, cây nho có 90% cơ hội rẽ ngang và 10% cơ hội tiếp tục theo đường chéo.
  • Phải có đủ lượt để hỗ trợ số lượng bí ngô đầu vào, mặc dù nhiều lượt được phép hơn.
  • Sau khi cây nho được xây dựng, bí ngô có thể được đặt ngẫu nhiên ở bất kỳ góc nào chưa bị bí ngô chiếm giữ.
  • Bí ngô không thể chồng lên cây nho hoặc bí ngô khác.

Các thách thức

Cho một số đầu vào, xuất ra một miếng bí ngô ngẫu nhiên theo các quy tắc trên. Thực thi mã nhiều lần với cùng một đầu vào sẽ mang lại kết quả khác nhau. Tất cả các bản vá bí ngô có thể có cho một số đầu vào nhất định sẽ có một số cơ hội (không nhất thiết phải bằng) không xảy ra.

Đầu vào

Một số nguyên duy nhất nđại diện cho số bí ngô trong miếng vá, ở bất kỳ định dạng thuận tiện nào . Để đơn giản mã, bạn có thể giả sử đầu vào là 0 < n < 256.

Đầu ra

Bản vá bí ngô kết quả, được in / hiển thị ra màn hình hoặc được trả về dưới dạng chuỗi / chuỗi-mảng / v.v.

Quy tắc

  • Đây là vì vậy tất cả các quy tắc thông thường để chơi gôn đều áp dụng và mã ngắn nhất (tính bằng byte) sẽ thắng.
  • Sử dụng định nghĩa tiêu chuẩn của chúng tôi về "Ngẫu nhiên."
  • Một chương trình đầy đủ hoặc chức năng được chấp nhận.
  • Sơ hở tiêu chuẩn bị cấm.
  • Khoảng trắng hàng đầu và dấu vết / dòng mới là hoàn toàn tùy chọn.

Ví dụ

Đối với đầu vào n = 3, đây là một số ví dụ GIÁ TRỊ của một miếng bí ngô theo các quy tắc trên (được phân tách bằng các dòng mới trống).

          (())
            \
   p--q      p-----q
  /    \    /       \
(())    b--d       (())

(()) (())
  \   /
   b-q (())
      \ /
       b-q

p-----------------------q (())
                       / \ /
                     (()) b-q
                           /
                         (())

Dưới đây là một số ví dụ về INVALID cho đầu vào n = 3, với lời giải thích #.

    (()) (())
     /    /
p---q----q
 \
(())
# The vine continued horizontally after a loop was placed.

(()(())
  \ /
   p---q
        \
       (())
# The pumpkins are both overlapping and sprouting from the same loop.

p----------------q
 \      \         \
(())   (())      (())
# The pumpkin is attached to the middle of the vine, not at a loop.

7
Và bây giờ thiết kế một ngôn ngữ 2D bằng cách sử dụng cú pháp này. :)
Martin Ender

Câu trả lời:


1

Python 2, 819 byte

Lấy nlàm đầu vào

Luôn đặt pumkpin ở 'bên ngoài' các góc (ngẫu nhiên trái / phải)

Trong khi cây nho được xây dựng, bí ngô được thêm vào, và khi có đủ bí ngô, cây nho dừng lại.

r=lambda:__import__('random').random()
s=1
v=[s]*4
U=[-9]
D=[-9]
i=input()
while len(U)+len(D)<i+2:s=[[0,1][r()<.9],[[0,2][r()<.5],1][r()<.5],[2,1][r()<.9]][s];exec['',[['','U+=[len(v)]'][U[-1]<len(v)-7],'',['','D+=[len(v)]'][D[-1]<len(v)-7]][v[-1]-s+1]][r()<.8];v+=[s]*[1,2][v[-1]!=s]
v+=[1]*5
m=M=s=0
for i in v:s+=i-1;m=[m,s][m>s];M=[M,s][M<s]
R=[[' ']*(M-m+5)for x in v]
m=-m+2
R[2][m]='p'
for x in range(3,len(v)-3):X=v[x-1];R[x][m]='/d p-b q\\'[v[x]*3+X];m+=v[x]-1
R[-3][m]='q'
M=[len(a)-len(a.lstrip())for a in map(''.join,R)]
R=map(list,zip(*R))
B,L,a='-/U'
K="\\"*4
W="""exec("for p in "+a+"[1:]:x=M[p];b=r()<.5;exec('R[x"+B+"1][p'+['+1]=\\""+L+"\\"','-1]=\\""+K+"\\"'][b]);i=p-[0,3][b];l='(';exec('R[x"+B+"2][i]=l;i+=1;'*2+'l=\\")\\";')*2")"""
exec W+";B,a='+D';L,K=K,L;"+W
for x in R:print''.join(map(str,x))

Ví dụ:

n=4

                (())   
                 /     
                p---q  
 (())          /       
   \       p--d        
  p-q     /    \       
     \   /    (())     
      b-d              
       \               
      (())             

n=20

                            (())                                                                                             
                              \                                                                                              
                            p--q                                                                                             
                           /    \                                                                                            
                          /      b--q                                                                                        
           (())     p----d      /    \                                                                                       
  (())       \     /          (())    b-q (())                                                                               
    \         p---d                      \  \                                                                                
  p--q       /     \                      b--q                                                                               
      \     /     (())                   /    \                        (())                                           (())   
       b---d                           (())    b-q                       \                                             /     
        \                                         \          (())         p-q                                         p---q  
       (())                                        \           \         /   \                                       /       
                                                    b-----------q     p-d     b-q                            (())p--d        
                                                                 \   /       /   \                            / /    \       
                                                                  b-d      (())   b-q   (())  (())   p-q     p-d    (())     
                                                                   /                 \   /      \   /   \   /                
                                                                 (())                 b-q        p-d     b-d                 
                                                                                       \ \      /         \                  
                                                                                      (())b----d         (())                
                                                                                              /                              
                                                                                            (())                             

Xin chúc mừng, bạn mặc định chiến thắng! : D
admBorkBork
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.