River Reckoning · 思考的食粮
每一次渡河都是一个决定,而每一个决定都是在前进与留守之物的安全之间取得平衡。
本文以英文撰写和编辑。此中文版本由机器翻译生成;凡涉及准确性之处,以英文原文为准。 阅读英文原文 →
River Reckoning 中的河不只是风景般的背景;它是塑造每一步可能走法的根本约束。一岸放着你的货物,每件各不相同,彼此之间的关系以“禁忌配对”编码,划出这道谜题的边界。船是你唯一的运输工具,而它的载量并非固定,会随潮汐变化。这个简单的设定造出一片丰富的可能与不可能的空间,其中的挑战不在于快,而在于找出能同时满足全部约束的渡河顺序。河分开两种状态——初始配置,以及所有物品都已过河的目标状态——你的任务,就是在两者之间的空间中穿行,而不违反任何规则。3
让这道谜题格外耐玩的,是各条约束之间的相互作用。禁忌配对织出一张依赖之网:移动某件物品可能会暂时危及另一件,逼得你在继续之前先把某样东西运回来。潮汐驱动的载量意味着,渡河的先后顺序会以载量固定的谜题所没有的方式变得重要。在第三趟行得通的顺序,到第四趟也许就行不通,反之亦然。这个时间维度增加了一层规划难度,超出了船的载量自始至终不变的那些经典谜题。3
赋予 River Reckoning 其性格的核心机制,是禁忌配对系统。某些物品两两不能被单独留在同一岸上——它们在设计上就互不相容,无论这种不相容是由游戏的主题暗示的,还是纯粹一条机械规则。当船离开某一岸、使那一岸无人看管时,那一岸必须不含任何禁忌配对。这就是安全检查在起作用:确保你留下的东西是稳定的,等你回来时仍在原处。只有无人看管的那一岸会被检查,因为摆渡人本身就算作他所站那一岸的监护人:在他眼皮底下,一对禁忌配对可以安然并排待着,只有在他撑船离开的那一刻才成为问题。因此,每次渡河之前的问题不是两岸是否都安全,而是你即将抛下的那一岸能否被留下自处。3
这条约束造出了这款游戏的根本张力。你想把物品朝目标那边挪,但每一步都有可能让你离开的那一岸陷入不安全的状态。解法往往要求先把某件物品送到对岸再带回来,或者按特定顺序来回摆渡,使禁忌配对始终分开。在经典的渡河谜题传统中,正是同一条约束,使得狼、羊和白菜的问题只有通过精心安排的七趟渡河才能解开,其中四趟去、三趟回 2。这道谜题很古老:已知最早的出处是《Propositiones ad Acuendos Juvenes》(《磨砺少年的命题》),一部传统上归于约克的阿尔琴(Alcuin of York)名下的题集,现存抄本可追溯至九世纪,全书共收三道渡河问题 1。River Reckoning 是把这个想法一般化,而不是复述它:从一个有主题的物品池中取四到六件物品,其中两到四对禁忌配对由种子而非故事决定,因此这些危险不必在叙事上说得通。其中一对还会被隐瞒。规则行会向你展示除一对之外的全部,最后那一对只有在你第一次把它留成孤对时才会揭晓,代价是白搭一趟——而这一趟仍计入你的总数。
与船只载量固定的经典谜题不同,River Reckoning 引入了一套潮汐机制,使船的载量随每一趟渡河而变化。船的载量读自一段简短的、循环重复的载量序列,按你已经完成的渡河次数索引。最简单的谜题走的是一、二;最难的走二、一、二、一——两者都只是单纯地交替。中等难度走的却是一、二、一,于是它的循环会以两趟连续的单件运输首尾相接地收尾。你从这个序列的哪个相位开始,取决于种子,所以可能这一趟能载一对过去,紧接着的下一趟却只允许一名乘客。渡河的先后顺序因此变得至关重要:在一组载量下可行的解法,换一组载量也许就无解。你不能因为想多带一件就多带一件;你必须在潮汐当下允许的范围内行事。3
这一机制把谜题从静态的约束满足问题变成了动态的规划挑战。你必须考虑的不只是移动哪些物品,还有何时移动它们。一个在固定载量下本来合法的顺序,可能因为在某个渡河序号上潮汐把载量压到了你所需之下而失败。反过来,一个看似低效的顺序,可能是在给定的载量循环下唯一可行的。潮汐为谜题引入一种时间上的节律,使每一道谜题都独一无二——哪怕禁忌配对和初始配置完全相同。3
并非每一趟渡河都需要载货。摆渡人可以独自划回来,什么都不带——这就是空渡。这个机制对谜题的解空间至关重要,因为它让你能回到起始岸,而不必推翻先前的成果。在许多谜题里,化解禁忌配对冲突的唯一办法,是把先前送过去的某件物品再带回来。空渡提供了灵活性:有时你需要空手返回去取别的物品,有时你需要带着一件物品返回,以拆散对岸的一对禁忌配对。引擎对这两种情况一视同仁:一次渡河把船上的东西——可能什么都没有——运过去,并把船翻到另一侧。不过游戏在这里划了一条线。从起始岸空船驶离是不被允许的,因为那永远帮不上忙;空渡是回家的路,不是前进的路。3
空渡也是让返程变得廉价的原因。没有它,每一次返航都得带点什么回来,把刚做完的工作推翻一部分,这道谜题就会退化成一桩苦役般的单向运输问题。但有了独自划回来的能力,你就造出了一个可能性的回环:物品可以前送、后撤、再前送,编成复杂的序列。这正是解开经典的狼/羊/白菜问题的同一个洞见:农夫可以把东西带回来,而这种可逆性正是七趟解法得以成立的原因 2。在 River Reckoning 里,空渡只是众多选项之一,但它仍是摆渡人工具箱中的一件基本工具。
游戏的每一种配置都由四样东西完整描述:哪些物品在左岸、哪些在右岸、船在哪一侧,以及已经渡了多少趟。一次渡河把载着的物品运到对岸并翻转船的位置,从而把一种配置变成另一种。获胜条件是整个系统中最简单的部分:所有物品都在右岸,船也在右岸。在开局的摆放与那唯一的终局之间,横着全部的中间局面,而其中相当多都被禁忌配对排除在外。你的任务,是在这片空间中找出一条尊重全部约束并抵达目标的路径。3
引擎那套有界的广度优先搜索会系统地探索这片状态空间,找出解开谜题所需的最少渡河次数,也就是标准杆数。同一套搜索也是谜题在你见到它之前的审核者:生成器抽取一组禁忌配对,求解所得的结果,只有当它可解且至少需要三趟渡河时才予以保留,这样就不会有哪个种子塞给你一道不可能的题,或者一趟就结束的题。系统是确定性的,因此给定的种子与难度总会产生同一道谜题,而那道谜题的标准杆数也总是相同。这使 River Reckoning 成为一道纯粹的逻辑谜题——它有客观的最优解,即便发现那个解需要大量的规划与洞察。3
解开一道 River Reckoning 谜题,需要一种在眼前的走法与长远的后果之间取得平衡的思考方式。你必须考虑的不只是某一步是否合法,还有它是否让你停在一个仍然有解的局面上。有时最好的一步不是推进最多物品的那一步,而是为后续走法留下最多灵活性的那一步。禁忌配对造出的依赖关系会把你逼进特定的顺序,而潮汐造出的时间结构会让本来合法的顺序在错误的时机执行时变得不可能。3
这份挑战足够平易,人人都可以上手试一试;却又足够深,找到最优解往往需要真正的洞察。你可能会发现自己在从目标倒推,琢磨哪些状态能通向成功;也可能试着找出那些因为禁忌关系而必须在特定时刻移动的关键物品。这款游戏的设计——任意指定的禁忌配对,加上潮汐驱动的载量——意味着没有两道谜题完全相同,每一道都需要重新构思。这正是渡河谜题传统的精髓:一个简单的框架,却能生出无尽的变化 1。