随机南瓜补丁


12

前几天,我正走过南瓜地参加生日聚会,注意到南瓜藤蔓上有一个漂亮的图案,有漩涡,毛圈和分支。我们将在这里使用一些ASCII艺术进行模拟。

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

葡萄藤构造规则

  • 只有一个主蔓,仅由\ / - p q b d字符组成。
  • 藤蔓仅从左到右穿过屏幕。换句话说,假设您是从最左边藤蔓字符开始的蚂蚁。在前进到主葡萄树上的下一个相邻角色时,必须向右移动一列-绝不能向左移动。
  • 当藤蔓改变方向时,需要一个p q b d字符来模拟一个循环。在p加入藤蔓东北向东行驶,在q东向东南,在b从东南到东部,d从东部到东北。请注意,字母的“循环”连接到水平的藤蔓,字母的“茎”连接到对角线。
  • 藤蔓的起点必须是pb(您可以选择,不一定是随机的)之一,并且水平开始。藤蔓的末端必须是qd(您可以选择,不一定是随机的)之一,并且必须水平末端。
  • 请注意,可以将循环放置在与其他循环紧邻的位置(例如,pd是葡萄树的有效子串),但这可能会使以后放置南瓜更加困难。您可能希望总是- / \在循环后立即拥有其中之一(就像我在示例中所做的那样),但这不是必需的。

南瓜规则

  • 南瓜仅由(())(确切的字符串)组成。
  • 南瓜是从主葡萄藤上附着的。这些分支只能附加到p q b d环上,长度恰好一个\/长度,并附加到南瓜上,因此分支的“末端”位于中间。
  • 它们可以连接在主葡萄树的上方或下方。
  • 分支可以连接到“左侧”。
  • 每个分支只能附加一个南瓜,每个循环只能附加一个分支。

随机性

  • 在水平行驶时,葡萄藤有50%的机会继续水平行驶,有25%的机会向东北转动,有25%的机会向东南转动。
  • 当沿对角线行驶时,葡萄树有90%的机会水平转弯,而有10%的机会继续对角线行驶。
  • 尽管允许更多匝数,但必须有足够的匝数来支持输入的南瓜数量。
  • 藤蔓建成后,可以将南瓜随机放置在尚未被南瓜占据的任何角落。
  • 南瓜不能与葡萄藤或其他南瓜重叠。

挑战

给定输入数字,请按照上述规则输出随机南瓜补丁。使用相同的输入多次执行代码应产生不同的结果。给定输入数字的所有可能的南瓜补丁应具有一定(不一定相等)的非零发生机会。

输入值

一个整数n,以任何方便的格式表示补丁中南瓜的数量。为了简化代码,您可以假设输入为0 < n < 256

输出量

生成的南瓜补丁可以打印/显示在屏幕上,也可以作为字符串/字符串数组/等返回。

规则

  • 这是因此所有适用于打高尔夫球的常规规则都适用,并且最短的代码(以字节为单位)获胜。
  • 使用我们的“随机” 标准定义
  • 完整的程序或功能都可以接受。
  • 禁止出现标准漏洞
  • 开头和结尾的空格/换行符都是完全可选的。

例子

对于输入n = 3,这是遵循上述规则的南瓜补丁的有效示例(以空白换行符分隔)。

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

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

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

这是一些INVALID输入示例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语言。:)
Martin Ender

Answers:


1

Python 2,819字节

需要n输入

始终将pumkpins放在角的“外侧”(随机向左/向右)

在构造葡萄藤时,添加南瓜,并且当有足够的南瓜时,葡萄藤停止。

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 '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.