ランダム化されたパンプキンパッチ


12

先日、誕生日パーティーのためにパンプキンパッチを歩いていたところ、かぼちゃのつるが渦巻き、ループ、枝分かれで気の利いたパターンを作っていることに気付きました。ここでは、ASCIIアートを使用してこれをシミュレートします。

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

つる構築ルール

  • \ / - p q b dキャラクターのみで構成されたメインのつるは1つだけです。
  • つるは画面上を左から右にのみ移動します。言い換えれば、あなたが左端のつるキャラクターから始まるアリだったとしましょう。メインのつるで次の隣接するキャラクターに進むにつれて、1列右に移動する必要あります-左に移動することはありません
  • つるが方向を変えると、p q b dキャラクターの1人がループをシミュレートする必要があります。p、東に北東旅行ブドウの木に合流q南東に東ため、b南東から東へ、そしてd東から北東に。文字の「ループ」は水平のつるに接続し、文字の「幹」は対角線に接続することに注意してください。
  • つるの始まりは、pまたはb(あなたの選択、ランダムである必要はありません)のいずれかでなければならず、水平に始まります。つるの終わりは、qまたはd(あなたの選択、ランダムである必要はありません)のいずれかでなければならず、水平に終わる必要があります。
  • ループは他のループのすぐ隣に配置できることに注意してください(たとえば、pdつるの有効な部分文字列です)が、そのため、後でカボチャを配置するのが難しくなります。- / \ループの直後のいずれか(例で行ったように)が必要な場合がありますが、必須ではありません。

かぼちゃのルール

  • カボチャは(())(この正確な文字列)のみで構成されています。
  • 主なブドウから、カボチャは枝分かれによって取り付けられています。これらの分岐は、p q b dループにのみ接続でき、正確に1つ\または/長さがあり、カボチャに接続して、分岐の「端」が中央になるようにします。
  • 彼らはメインのブドウの上または下に接続できます。
  • 分岐は「左」に接続できます。
  • 分岐ごとに接続できるカボチャは1つだけで、ループごとに接続できる分岐は1つだけです。

ランダムネス

  • 水平方向に移動する場合、ぶどうの木は水平方向に50%の確率で、北東に25%の確率で、南東に25%の確率でチャンスがあります。
  • 斜めに移動する場合、つるは90%の確率で水平になり、10%の確率で斜めに進む可能性があります。
  • より多くのターンが許可されますが、入力されたカボチャの数をサポートするのに十分なターンが必要です。
  • つるが構築されると、カボチャがまだ占有されていないコーナーにカボチャをランダムに配置できます。
  • カボチャは、つるや他のカボチャと重ねることはできません。

チャレンジ

入力番号を指定して、上記の規則に従ってランダム化されたカボチャパッチを出力します。同じ入力でコードを複数回実行すると、異なる結果が得られます。特定の入力番号のすべての可能なカボチャパッチには、発生する可能性がゼロではない(必ずしも等しくない)必要があります。

入力

nパッチ内のカボチャの数を表す任意の便利な形式の単一の整数。コードを簡潔にするために、入力がであると想定できます0 < n < 256

出力

結果のパンプキンパッチ。画面に印刷/表示されるか、string / string-array / etcとして返されます。

ルール

  • これはので、ゴルフの通常のルールがすべて適用され、最短のコード(バイト単位)が勝ちます。
  • 「ランダム」の標準定義を使用します。
  • 完全なプログラムまたは機能のどちらでもかまいません。
  • 標準的な抜け穴は禁止されています。
  • 先頭および末尾の空白/改行はすべて完全にオプションです。

入力についてn = 3は、上記の規則(空白の改行で区切られている)に沿ったカボチャパッチの有効な例をいくつか示します。

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

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

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

ここに入力のためのいくつかの無効な例n = 3と説明があり#ます。

    (()) (())
     /    /
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
そして、これを構文として使用して2D言語を設計します。:)
マーティンエンダー

回答:


1

Python 2、819バイト

テイク n入力として

常に角の「外側」にプムピンを配置します(ランダムに左/右)

つるが構築されている間、カボチャが追加され、十分なカボチャがそこにあるとき、つるは停止します。

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))

例:

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         (())                
                                                                                              /                              
                                                                                            (())                             

おめでとう、デフォルトで勝ちます!:D
AdmBorkBork
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.