前几天,我正走过南瓜地参加生日聚会,注意到南瓜藤蔓上有一个漂亮的图案,有漩涡,毛圈和分支。我们将在这里使用一些ASCII艺术进行模拟。
(())
\
p--q p-----q
/ \ / \
(()) b--d (())
葡萄藤构造规则
- 只有一个主蔓,仅由
\ / - p q b d
字符组成。 - 藤蔓仅从左到右穿过屏幕。换句话说,假设您是从最左边藤蔓字符开始的蚂蚁。在前进到主葡萄树上的下一个相邻角色时,必须向右移动一列-绝不能向左移动。
- 当藤蔓改变方向时,需要一个
p q b d
字符来模拟一个循环。在p
加入藤蔓东北向东行驶,在q
东向东南,在b
从东南到东部,d
从东部到东北。请注意,字母的“循环”连接到水平的藤蔓,字母的“茎”连接到对角线。 - 藤蔓的起点必须是
p
或b
(您可以选择,不一定是随机的)之一,并且水平开始。藤蔓的末端必须是q
或d
(您可以选择,不一定是随机的)之一,并且必须水平末端。 - 请注意,可以将循环放置在与其他循环紧邻的位置(例如,
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