统一纸笔谜题的度量衡

文摘   2024-11-20 11:38   北京  
本文转自yyao佬的B站公众号专栏(yanniyao),欢迎围观:)
前篇:
0. 历届谜题世锦赛都整过什么活?

1. 从杂题构建主题

2. 谜题世界的文化自信
3. 在经典中挖掘新可能
4. 探索谜题竞技的边界

5. 让团体赛更加伟大


这一篇主要介绍各种在出题和设计轮次以外但又和谜题相关的各种设计。

众所周知,纸笔谜题种类不论数量还是花样都相当多。为了尽可能减少选手赛前准备时的学习成本,笔者在设计规则手册(IB)以及赛题册(PB)的时候都做了不少思考。


【谜题术语和约定 Puzzle Glossary & Conventions】

Here we define some basic terms and state some common conventions in puzzle rules of this WPC, so that the individual puzzle instructions can be more concise. (Conventions are marked with “Unless otherwise specified, …”) This section is significantly longer than similar sections in previous WPC Instruction Booklets; while most of these terms/conventions will be familiar to most WPC veterans, we still recommend reading these first to avoid confusion or misunderstanding.

我们在这一节里介绍本届WPC谜题规则中一些常见的基本用语和约定,以便之后用更简洁的语言解释每个单独题型的规则。(每个约定的开头都会以“除非另外说明,……”的形式标注。)这一节会比以前WPC规则手册中类似的内容长很多;虽然大部分用语/约定对WPC老手来说都很熟悉,但是为了避免对规则的困惑或误解我们还是建议(在阅读具体谜题规则之前)先阅读本节。

这一节的第一页(一共8页)

从2023年开始,笔者参与了最近两年的Puzzle GP的验题工作。除了检验赛题的难度之外,验题工作的另一部分是阅读IB里每个题型的规则文字,及时反馈规则中不准确或者不容易懂的地方。也许是因为是数学系出身,笔者在仔细阅读规则的时候经常能注意到一些定义不完备或者有漏洞的地方,基本上每次都会在各种细节上纠结一段时间。当然,因为Puzzle GP是面向大众的比赛,用太过严谨的文字反倒不好理解,所以笔者只能在有限范围内建议一些小幅更改或者额外说明。
在接手了IB的设计工作之后,笔者也发现虽然有很多种不同规则的题型,但里面有很多共通的概念(例如“相邻”或者“连通”),如果每次提及都解释/定义的话会让整体规则十分冗长,不解释的话又容易产生疑问或漏洞(例如“相邻”是否包括“对角相邻”)。因此,笔者沿用了以前WPC规则手册开头都有的Glossary(术语汇编)部分,用一个固定的单词来描述各个常见的概念,然后在具体规则文件里提及时不再重新解释。
在整理需要放进glossary里的术语时,笔者发现了很多往届WPC里没有涵盖,而且“虽然基本约定俗成但还是值得严格定义一下”的概念,因此决定干脆像写论文那样从零开始定义各种常见的术语。这里笔者翻译一部分不太平凡或者比较容易混淆的定义供读者参考:
  • 如果两个单元格(cell)共用一条边,则称它们相邻(adjacent);如果它们共用至少一个顶点,则称它们接触(touching)。因此,相邻的单元格同样视为接触。
  • 如果一组单元格中任意两个单元格都能通过在组内的一系列两两相邻的单元格相连,则称这一组单元格连通(connected)。对角连通(diagonally connected)的定义相似,只需把前一个定义里的“相邻”换成“接触”即可。
  • 除非另外说明,一个满足特定条件(如涂黑)的连通组”(connected group)是极大的,也就是说不能在破坏连通性的情况下加入其他满足条件的单元格。
  • (block)满足特定条件的单元格指的是一行/列内连续的一组单元格,和“连通组”一样一般认为是极大的(也就是说前后没有更多相邻的同样满足条件的单元格)。
数和里的提示数都代表某一*段*白格里的数之和
  • 两个图形如果可以通过平移、旋转、翻转使得它们完全相同,则称它们全等(congruent)。如果不需要翻转的话,则称它们旋转全等(rotationally congruent)。如果只需要平移的话,则称它们平移全等(translationally congruent)。当然,满足后面的定义的两个图形自动满足前面的定义。

各种全等的示例
  • 盘面中的一条(snake)指的是一系列(至少两个)单元格,其中任意两个连续的单元格互相相邻,但任意两个非连续的单元格都不相邻。如果蛇里面任意两个对角接触(但不相邻)的单元格之间都恰有一个在系列里的单元格,则称这条蛇不和自身接触(not touching itself)。
不和自身接触的蛇、和自身接触的蛇、不是蛇

(前两种情况在不同涉及“蛇”的题型里都出现过)

  • 一个字符(character)可以是一个字母或者一个数码(digit)。一个单词(word)是一串不一定有意义的字符。
  • 除非另外说明,谜题里的所有字母都是大写,非英文的字符以及字符上的附加符号(diacritics,比如韵母ü上面的两个点)都可以忽略。
  • 除非另外说明,谜题里的问号可以代表单个未知的正整数。
问号替换提示数的示例
笔者还另外单独列举了各个大类(涂黑、分区、回路、放置)里面常见的一些约定,比如:
  • 除非另外说明,分区类谜题的答案里不能有多余的分割线。也就是说,画的每条分割线必须介于两个不同区域之间。(注意,非分区类谜题题面给出的区域边界可能有多余的。)

借用一下嘉和老师的谜题元素介绍专栏里的示例图,里面有不少多余的边界 (https://www.bilibili.com/opus/627480591505467579)

  • 一条回路(loop)由一系列(成环的)首尾相连的线段(segment)组成,其中任意两条线段之间有一个角度严格介于0度和180度之间的转弯(turn)。
  • 除非另外说明,如果一条回路(或者路径)允许和自身交叉,那么交点不能恰好在某条直线段的一个端点上。也就是说,相交的两条线段必须都直行通过交叉点。
  • 除非另外说明,需要放置在盘面内的物体需要沿着格线放置,而且两个物体不能占用同一格。
对于大部分选手来说,虽然不读这些不会对理解规则造成太大影响,但只要粗略读一下就能解决不少潜在的疑问。

不过笔者也清楚,除了WPC以外,其他比赛的题型数量都远没有到需要专门整理术语的程度,一般还是直接在题型规则里定义需要的概念比较方便。笔者在这一节上花这么多功夫主要还是想给这纷繁复杂的谜题世界一个相对坚实的理论基础,也有些希望以后可以成为新手了解纸笔谜题时的一份参考资料。


【解答用记号 Notation】
对于(在纸上)解纸笔谜题比较有经验的读者应该知道,解不同题型的谜题时为了方便或者提速经常会使用各种不同的记号来表示答案(即便是同一个大类的题型)。因此,在线下举行的纸笔谜题比赛中,一般允许选手使用自己习惯的记号来解题,只要记号提供的信息能和预定的答案对应上就行。在历届WPC规则手册的开头也会补充说明一些记号方式的具体要求。

2022年WPC的IB的第8页 (https://ectoplsm.github.io/wpc-unofficial.org/pdfs/WPC%202022.pdf)

不过,短短几段文字远不足以涵盖五花八门的记号方式。所以今年笔者在分大类定义概念的时候顺便用图示补充了更多常见的记号示例,让选手更加能确定自己的记号方式是否能被接受。
涂黑类:可以只标记黑格或者只标记白格,而且每个同色的连通组可以用画线的方式连接(分区类也可以用线连接每个区内的所有单元格,但注意单格的连通组/区域必须另外标记)。也可以只画黑白格之间的边界。

回路/路径类:如果是沿格线画一条不交叉的回路,可以用涂黑回路内部或外部的所有单元格的方式代替(对于数回/Slitherlink或者山洞/Cave之类的题型比较有用)。如果是画一条蛇形的路径,也可以用涂黑路径经过的格子表示。

放置类:如果只需要标记每个物体的位置,可以只画物体的边界,或者像分区类那样用线连接同一物体内的单元格。如果额外满足所有物体都是单格(如扫雷/Minesweeper)或者两两不相邻(如战舰/Battleships),则可以用涂黑类谜题允许的记号方式标记所有占用的单元格。
另外,对于一些比较特殊(比如涉及多种元素)的题型,笔者也会在规则文字后(用斜体字)补充一些作答方式要求有关的信息。
帐篷/Tents的答案中必须标记每个帐篷对应哪棵树(对应的方式有时不一定唯一,读者可以思考一下为什么)
仙人指路/Yajilin中虽然不通过的单元格一般用黑格标记,但是只要回路正确就算对

当然,需要强调的是,这些图例没有列举所有允许使用的记号方式,一般只要阅卷人员能看懂就行。


【谜题规则(和例题)】
读者看到这一部分可能会感到有些奇怪:已有题型的规则也有能设计的地方吗?
有的!
在搜索一些不太常见的题型的时候,笔者经常发现不同地方的同一题型的规则在细节上有出入。考虑到不同选手对同一题型规则的理解可能不同,笔者决定在写规则的时候尽可能选择更加宽泛/有包容性的版本,并且在例题中尽可能表现出这些信息。这里包括几个方面:
  • 题面里可以不加说明地把某些提示数隐去或者用问号代替。
没有给全提示数的数桥/Hashi
有未知数的土派艺术/Tapa
  • 规则中尽可能包括所有至少一个版本里出现过的提示类型。
云团/Clouds题面里可以给出部分空格(用叉表示)以及部分涂黑格(包括这些黑格是不是某个云团的一角)
  • 把规则文字里出现的一些常数改成盘面旁的额外信息(相当于小幅推广了题型)。
走廊/Corridors在2013年WPC出现时在规则中限定每个区域必须面积为5,这里把“5”这个常数放在了盘面左上角作为可变量。
简单字符/Easy as中每行列需要出现的字符有时会放在规则文字里甚至标题里(例如Easy as ABC),这里也改为放在了盘面左上角
  • 在例题里打破一些规则里没有说明但是基本所有题都满足的潜规则。
数蛇/Snake的两端不一定都会给出
  • 不同版本不兼容时选择和其他题型更相似的版本。
这个题型有好几个名字。提示数在一些版本里不包括自身,而在另一些版本里包括自身。为了和山洞/Cave以及田鼠挖洞/Kurodoko这些题型统一,笔者选择了后者。

顺带一提,这次IB里很多例题都来自于Puzzle GP的历届IB(https://gp.worldpuzzle.org/content/puzzle-archive)。实际上,Puzzle GP的IB里所有规则以及例题都是可以随便用的(甚至是开源的:https://drive.google.com/drive/folders/0BwXGC8wDbipUOFBsOVhKdk9JV2s),帮笔者省了不少精力。


谜题中文名】
在上文(以及前几篇专栏)中读者应该也早就注意到了,今年WPC中在每个题型的英文名下都附了一个中文名。(读者们可能也记得在个人赛第01轮中也用题型中文名弄了一个隐藏主题。)
对于相对常见的题型,笔者从国内的各种渠道参考了一些已有的译名,包括以下几个:
  • 嘉和老师在独数网站上办的初级赛:http://www.sudokufans.org.cn(虽说最近笔者才发现,这个网站上也有不少2012~2016年之间举办的各种谜题比赛,里面也有很多可以参考的题型译名)
  • 浙江省谜题锦标赛的题型说明:https://mp.weixin.qq.com/s/oLrjaj0b_9iCuXm6tdP2wg
  • 百度贴吧“逻辑谜题吧”里的精品区:https://tieba.baidu.com/f?kw=%E9%80%BB%E8%BE%91%E8%B0%9C%E9%A2%98&ie=utf-8&tab=good(历史相对悠久,但现在基本上转成QQ群了……)
当然,今年的很多题型从来没有在国内任何地方出现过,所以它们的中文名也是笔者专门翻译的。笔者翻译时的优先级大致如下:
  • 如果英文名本身比较好翻译的话一般选择直译。(如果含义太过简单,容易和其他题型搞混的话会在译名里增加一些信息。)
这个题型涉及在盘面里画一堆蛇形的路线代表蠕虫,黑圈表示蠕虫的头。(顺带一提,还有一种填数类的题型也叫Worms:https://wpcunofficial.miraheze.org/wiki/Worms_(Number_Placement),这次WPC没有出现但是如果要翻译的话应该叫“高低起伏”比较贴切)
The Wall如果单纯翻译成“墙”的话容易和数墙之类的搞混,所以根据“数字表示同行/列中位于墙另一侧的格子数”的规则翻译成“隔墙有耳”(虽然笔者也不懂2013年WPC的出题人给这个题型起名的时候是怎么想的……)
  • 如果英文名本身来源于其他语言则尽量从源语言的含义翻译。
Fuzuli是土耳其语里的单词,意思是“多余”,虽然笔者不是很懂和这个题型有什么关系
Makaro是“max arrow”在日式英语下的缩写,所以这里翻译的英文原名(在别的地方也译为“独占鳌头”)
  • 如果英文名原意难以翻译(或者是人造词)的话则尽可能通过翻译来体现题型至少一部分机制。
LITS很多情况下不翻译,这里单纯为了有个中文名,结合了“四格骨牌”和“数墙”的特点翻译成了“四格骨墙”
Voxas是发明者Eric Fox人造的词,没有任何含义。这里笔者根据“把盘面分割成面积为二或三的区域”为基础翻译成了“二三分割”。赛后有人又提出了“三三两两”的译名,感觉比笔者的翻译好。
Lohkous这个题型的发明者是Arvi Teikari(Hempuli,也是Baba Is You的开发者)。笔者没找到原名的原意,这里根据“提示数提示了区域内横竖每一段格子的长/宽度”翻译成“长宽度量”。
  • 一些规则相似的题型则考虑使用相似的译名(通过不同之处来强调规则的不同)。
仙人指路/Yajilin和两种相似的题型
这里再插播两个让笔者翻译时有些头痛的题型:Slant(又称Gokigen Naname/ごきげんななめ)和Slalom(又称Suraromu/スラローム)。
Slant的例题/答案(https://puzz.link/rules.html?gokigen)

Slalom的例题/答案(https://puzz.link/rules.html?slalom)

这两个题型都是Nikoli上首次出现的题型。这里让笔者头痛的主要原因是:Slant在以前的很多谜题比赛中不知为何叫做Slalom,而Slalom则被翻译成了“日式英文”的Suraromu。
2014年WPC的第6轮
2014年WPC的第1轮
也因为这个原因,这两个题型在国内的都曾经被翻译成“障碍滑雪”(Slalom的直译)。虽然现在英文名称基本固定为Slant和Slalom了,但是“障碍滑雪”这个中文名笔者还是不敢用,所以最后决定把前者叫做“斜线迷宫”,后者按照浙锦赛的方案叫做“巡行通关”。
(如果读者翻阅以前WPC的IB的话会发现当年起名状况更加混乱,就连现在(英文)同名的题型名称也不少,比如之前提到的Worms。笔者也不知道这种乱象该如何处理,目前只能尽量避免中文译名也撞车的情况……)

不管怎么说,这些中文名显然不是给国外选手看的,就算是对今年参赛的国内选手来说其实也没多少用。笔者这么执着想给每个题型起一个中文名主要是想为以后在国内推广更多谜题题型时提供一个参考,方便各位爱好者记忆。


【谜题作图】
在出题组各位老师出谜题的时候往往用的是自己习惯用的软件,比如puzz.link、Penpa+、Excel、Adobe Illustrator等等。因此,为了最终选手看到的赛题能在视觉上做到统一,笔者把绝大多数题目重新用Penpa+作图了一遍(唯二的例外是10.09 Sudoku (Penrose)和14.02 Jigsaw Puzzle)。在作图过程中,也有很多需要考虑的设计细节:
  • 为了和IB/PB里的字体统一,所有谜题的字体统一使用Noto Sans。笔者选择这个字体的主要原因一方面是sans-serif字体看上去比较简洁,另一方面是Noto字体系列(https://fonts.google.com/noto)支持上百种语言,并且在不同语言之间的字体风格能保持相对统一。Noto Sans还有等宽字体版本,对于涉及单词表的题型更加适合。笔者保证没在帮Google打广告。
等宽字体也方便选手比较不同单词的长度
  • 一般来说,除了分区类谜题的格线基本都是虚线之外,其他题型的格线用实线还是虚线都没有统一定论。
就连puzz.link的界面都极其不统一(从左到右分别是虚线、灰实线、黑实线)
就连一些有分区元素的题型都会用实线(笔者记得去年WPC赛场上做这题时在画边界时不得不多描几遍)
在考虑作图时该用实线还是虚线时,笔者意识到用虚线可以让选手更加方便在格线上做记号,所以决定除了填数类谜题之外其他题型都用虚线作为格线。(填数类为了和数独那边相对统一还是用的实线,另外题面里的区域边界用的还是粗实线,因为粗虚线看上去实在太怪了。)
当然,有些地方还是不得不用粗虚线
值得一提的是,在线上比赛中,考虑到有些选手会把题面截图然后用画图软件里的颜料桶来做涂黑类谜题,有些情况下还是应该用实线比较好。
  • 有些不规则的盘面里有不属于盘面的洞,为了保证不会看错统一用全黑的格子表示。(因此,在涂黑类谜题中,涂黑的格子都称作"shaded"而非"black"以示区分。)
只有完全封闭的洞需要涂黑
另外,对于有外提示的题型,如果盘面不规则或者有洞的话会用虚线标注行/列中在盘面外的位置,方便选手定位。
Penpa+中用Line > Middle + Short画
  • 这届WPC有很多用圆圈作为提示的题型(比如第07轮Duality)。如果圆圈内没有数字或者是回路类题型的话,笔者一般用的是Penpa+里的中号尺寸,避免完全占满所在的单元格,给选手在这些格子内留一些做记号的空间。(其他情况下酌情使用大号圆圈。)
Balance Loop因为要让有圈的格子里的线也能看得见所以用的是中号,Canal View是涂黑类而且圈内有数字所以可以用大号
  • 对于在区域内给提示数的题型,关于数字是按正常大小放在单元格中央还是缩小放在单元格左上角没有统一说法。笔者最终决定的方案是:
  • 涂黑类谜题中的提示数一律按照正常大小,即便涂黑之后也能看清。

  • 回路类谜题中的提示数一律缩小放在角落,画回路的时候不会挡着。

两个区域内有提示数的题型
  • 对于盘面外提供某一行/列信息的提示数,把数字放在盘面左边/上边还是右边/下边也没有统一说法。笔者把大部分题型的提示数都放在了左/上的位置。
绝大部分题型的提示数不超过两位数
魔夏/Magic Summer这个题型因为和可以超过两位数所以放在了右/下(和Arithmetic Square里把运算结果放在右边/下边有些相似),应该是这届WPC唯一一个例外
  • 另外,在赛题中有时需要强调一下盘面里隐藏的主题,统一通过加粗提示数/边框或者微调颜色来完成。(变化幅度一般都比较小,避免影响盘面里的实际信息。)
IB里的一些样例

当然,上面提到的部分设计不能Penpa+功能完成(比如修改字体),所以笔者在Penpa+上作完初版的图之后还需要导出SVG文件,然后在文字编辑器或者Inkscape之类的SVG编辑软件里进行调整。(大部分谜题的调整都可以通过批量查找替换完成。)具体的细节笔者就不在这里赘述了。


【IB/PB排版】
除了给所有谜题作图之外,笔者还负责了给规则手册和赛题册的排版工作。因为没有多少专业排版的经验,笔者在网友建议下选用了Microsoft Publisher,虽然功能没Adobe Illustrator之类的那么丰富,但是界面以及操作流程和Microsoft Word十分相似所以很好上手,对笔者来说也基本够用了。(笔者注意到的最大一个缺点是Publisher不直接支持SVG图片,但是似乎可以通过先导入Word再复制到Publisher的方式解决?)
在参考了历届WPC的IB设计后,笔者定下的设计主要理念是简洁且好用,用最简单的方式让选手更方便地获取需要的信息。
这里以第07轮PB封面为例介绍在这个理念下的一些设计元素:
和IB里的封面基本相同,但在上面加了姓名/队名栏,在下面加了阅卷用的计分区
  • 全体使用同一字体(上文提到的Noto Sans),确保视觉上的统一性。
  • 把logo做成浅色放在轮次标题后面,尽量保证美观的同时不占用额外面积。
  • 把轮次基本数据(题量、时长、总分)纵向并排列在轮次标题右侧,尽量缩小三个关键数字之间的距离。
  • 把所有分值(包括总分)加粗,让选手只要看到粗体数字就能潜意识地明白这是个分值。(这个在IB的赛程表以及每个谜题的标题也都有体现。)
  • 通过两列排版减少题型名称和对应分值之间的横向距离,方便选手快速对应。
可以和2023年和2022年对比一下
  • 在排版IB/PB里的谜题的时候,笔者也尽量把比较关键的信息(题号、题型中英文名称、分值)集中放在了标题左侧的位置,其他不太重要的信息(副标题、例题作者/来源、阅卷区)则都放在右侧。
PB的样板(一页两题,但也有一页一题的版本)

显然,上面提到的各种设计点基本都不是选手能明确注意到的,但笔者还是希望能通过这些设计减轻选手阅读IB和PB时处理各种信息的负担,把更多精力放在解谜上。


在赛前,邱老师开玩笑称这次IB有种“统一度量衡”的感觉。虽然笔者不觉得自己能和秦始皇相提并论,但这个比喻似乎也还算贴切?不管怎么说,笔者确实想通过这本IB以及这篇专栏,让圈内其他设计谜题或者举办比赛的人了解并开始注意这些容易被忽视但又多少有些重要的细节。
关于赛前的各种准备工作笔者想要介绍的差不多就到这里了。在下一篇专栏,笔者会根据比赛期间的情况以及赛后的反馈做一些总结和反思。


(未完待续)

密码菌
密码菌带你走进密码的世界。
 最新文章