4
像专家一样可视化Nim板
背景 在Nim游戏中,玩家交替从“桩”中移除“石头”:每回合,玩家必须从单个桩中移除一个或所有宝石。Nim的目标是夺走最后一块石头,或者在惨败的情况下,迫使对手这样做-但是,事实证明,策略几乎是相同的。 Nim制作了有趣的酒吧游戏。您可以将火柴或硬币用于“石头”,并且通常将“桩”排列成一行。下面是一个经典的设置,其中包含1、3、5和7堆: 如果您以前从未玩过Nim,则可以在尝试此挑战之前尝试一下。这是一个称为“猪前珍珠”的版本。 战略 Nim中的最佳策略非常棘手,以至于大多数非专业人士始终输给专家,但是用二进制算术即可轻松描述。 但是,进行心理二进制XOR操作非常困难,因此幸运的是,有一种等效的方法可以可视化正确的策略,即使在醉酒的情况下,也更容易实时实施。 只有三个步骤: 将每行中的“石头”分为大小为2的幂的子组,从可能的最大大小开始:8、4、2和1就足以用于大多数游戏。 尝试使每个组与另一行中的双胞胎匹配,以便每个组都有一对。 如果无法做到这一点,请从单行中删除未配对的“石头”(这将始终是可能的-请参阅Wikipedia链接以了解原因),从而使步骤2成为可能。 或者说另一种方式:“从单个桩中取出一些石头,这样,如果您将这些桩归为2的幂,则所有组都可以与其他桩中的一组配对。” 需要注意的是,您不能将2的大数分解为较小的小数,例如,您不能将包含8个宝石的线分为4组。 例如,这是您可视化上面的面板的方式: 该板完全平衡,因此您希望您的对手先移动。 挑战 给定代表Nim“桩”大小的正整数列表,返回专家看到的Nim板纯文本可视化。 通过示例可以最好地解释什么构成有效的可视化,但是您必须: 给每个“ 2的幂次幂”子组及其对分配一个不同的字符(未配对的子组不合格),并使用该字符表示子组和对中的“石头”。 代表任何配对的“石头”(即那些当打正常的专家将消除-不MISERE - NIM)使用连字符:-。 有多种方法可以实现有效的可视化,并且所有方法都是有效的。让我们研究一些测试用例: 测试用例 输入:1、3、5、7 可能的输出1: A BBA CCCCD CCCCBBD 您可以选择在字符之间包括空格,在行之间包括空白行: 可能的输出2: A B B A C C C C D C C C C B B D 输入:1、2、3、4、5、6、7、8、9、10 …