1
随机南瓜补丁
前几天,我正走过南瓜地参加生日聚会,注意到南瓜藤蔓上有一个漂亮的图案,有漩涡,毛圈和分支。我们将在这里使用一些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 …