Nim 游戏的若干变种

今年我为北京世纪坛的数学益智游戏展贡献了不少内容。我打算在这里记录一些自己的创作、发现、收获和心得。这是该系列的第三篇。

今年的数学益智游戏展有一个特色,就是到访者可以购买一个小册子,这可以为自己的参展体验加分。我们内部把它叫作“任务单”。任务单里有很多任务,对应了展会中的各种项目。完成任务可以获得印章,赢取奖励。为了增加任务单的附加价值,任务单上还附赠了很多简单展品的高级玩法说明。这里举一个有趣的例子。

展会现场有很多冰糕棍,可以用来做冰糕棍炸弹。任务单上给出了冰糕棍的另一种玩法——Nim 游戏。将冰糕棍从左到右摆成若干堆。两人轮流从其中一堆冰糕棍中取走任意数量的冰糕棍(可以全部取走,但不能不取)。取走最后一根冰糕棍的玩家获胜。

考虑到任务单的读者可能已经熟悉 Nim 游戏了,因此为了让所有人都能有新的收获,我补充了一些不太常见的 Nim 游戏变种。我一共准备了 10 条补充规则。游戏开始前,双方可以任选其中一条来玩。

  1. 每次只能从最左端或者最右端的那一堆中取冰糕棍。
  2. 每次只能从冰糕棍数最多的那一堆中取冰糕棍(如果冰糕棍数最多的堆出现了并列的情况,任选其中一堆即可)。
  3. 每次只能从冰糕棍数最少的那一堆中取冰糕棍(如果冰糕棍数最少的堆出现了并列的情况,任选其中一堆即可)。
  4. 第一个人可以从任意一堆中取冰糕棍,今后每个人只能从和刚才不同的堆中取冰糕棍。
  5. 第一个人可以从任意一堆中取冰糕棍,今后每个人只能从和刚才相邻的堆中取冰糕棍。
  6. 第一个人可以从任意一堆中取冰糕棍,今后每个人只能从和刚才相同的堆中取冰糕棍(除非刚才那一堆被取完了)。
  7. 每次取完后,还可以再从另一堆中取走同样多的冰糕棍。
  8. 每次取冰糕棍的数目改为最多 3 根。
  9. 取走最后一根冰糕棍的玩家算输。

还差一条,应该写什么呢?我有三个备选方案。大家可以猜一猜,我最后用了哪个方案。

  • 游戏双方各有一次“跳过”的机会。
  • 游戏中有一次“跳过”的机会,任意玩家使用后该机会作废。
  • 每次对方取完后,如果他还有别的取法,你便能要求他该轮换一种取法。

Read more…

怎样给孩子设计一些好的谜题

今年我为北京世纪坛的数学益智游戏展贡献了不少内容。我打算在这里记录一些自己的创作、发现、收获和心得。顺便结合一下这几年的经历。这是该系列的第二篇。

两个孩子经常早晨 6 点就醒了,然后频频闯进我们卧室,给我们看他们用纸折的袜子,用乐高搭的袋熊,用水彩笔画的比萨,搞得我和孩子他妈没法睡觉。去年 5 月份左右,孩子他妈想了一个办法:在我们卧室门口放了一个纸糊的小信箱,让孩子把要给我们看的东西放信箱里。现在早晨果然能多睡一会儿了。几天后,孩子闹着说,他们想让自己的屋子门口也有个信箱。孩子他妈真又做了一个弄上去了。在信箱里放啥呢?于是我决定每天给孩子设计一些印在纸上的小活动,比如照图示折纸呀,比如看图编对话呀,比如自制两可图呀,等等。当然,还有很多我专门设计的谜题。

Read more…

复原小时候见过的数学魔术

今年我为北京世纪坛的数学益智游戏展贡献了不少内容。我打算在这里记录一些自己的创作、发现、收获和心得。顺便结合一下这几年的经历。这是该系列的第一篇。

有一个经典的数学小魔术。把 0 到 63 之间的数写在 6 张纸条上,其中第 1 张纸条上写着二进制表达中右起第 1 位数字为 1 的数,第 2 张纸条上写着二进制表达中右起第 2 位数字为 1 的数,第 3 张纸条上写着二进制表达中右起第 3 位数字为 1 的数,等等。给人展示 6 张纸条,问他“你的年龄出现在了哪些纸条里”。对方给出的答案就相当于告诉了你,他的年龄的二进制表达中各个地方是 0 还是 1。你就能报出他的年龄了。

今年的展会有一个主题就是过年。我们打算设计一个类似的小魔术,只不过把年龄改成生肖。由于生肖有 12 个,因此 4 张纸条就可以做到这一点。

Read more…

每个面都是凹多边形的多面体

昨晚做梦,梦见了一个有趣的数学问题:有没有什么多面体,它的每个面都是凹多边形?有趣的是,接下来我梦见自己醒了过来,然后立即上网寻找答案。我梦见我查到了相关的论文,论文作者的名字中出现了很多奇怪的符号。我梦见我开始研究论文作者的名字该怎么发音。我梦见我研究了半天没有进展,于是踏上了拜访作者本人的路……

然后就彻底醒了。然后立即上网寻找答案。废话不多说了。Branko Grünbaum 和 G. C. Shephard 在 1998 年的论文《Isohedra with Nonconvex Faces》中给出了一些例子。下图是我很喜欢的一个例子。整个多面体由12个全等的凹多边形组成。

16 年后重谈 P 和 NP

2006 年,我在博客(当时还是 MSN Space)上发了 《什么是 P 问题、NP 问题和 NPC 问题》 一文。这是我高二搞信息学竞赛时随手写的一些东西,是我的博客中最早的文章之一。今天偶然发现,这篇现在看了恨不得重写一遍的“科普”竟仍然有比较大的阅读量。时间过得很快。《星际争霸》(StarCraft)出了续作,德国队 7 比 1 大胜东道主巴西,《学徒》(The Apprentice)里的那个家伙当了总统,非典之后竟然出了更大的疫情。现在已经是 2022 年了。这 16 年的时间里,我读了大学,出了书,娶了老婆,养了娃。如果现在的我写一篇同样话题的科普文章,我会写成什么样呢?正好,我的新书《神机妙算:一本关于算法的闲书》中有一些相关的内容。我从书里的不同章节中摘选了一些片段,整理加工了一下,弄出了下面这篇文章,或许能回答刚才的问题吧。

Read more…