这是我解出的答案示例。其中包含满足两项质量控制指标的方案。你可以在卡关时稍微参考一下,或者在解完后对照着体验乐趣。目前正在编辑中。计划从后面较难的题目开始补充。 3-6 三元素分类器(720 / 41.7) 复杂度:720 / 750 步数:41.7 / 48.8

虽然由于未详细指定转换条件而显示错误,但实际运行没有问题。因为罗列数字会显得难以阅读,所以这里优先考虑可读性。 思路如下: 将3个数字复制到I1~I3中,逐个减1。 从变为0的数字开始,依次打开标记为已完成的开关并输出。 右上角的Iinc用于记录当前已减去的数字数量。 我认为还有其他方法,或许能实现更快或更简单的构造。 3-7 括号移除器(740 / 76.09) 复杂性:740 / 790 步数:76.09 / 90.53

题材非常有趣的问题。解题花了相当多的时间。 各机械的功能如下: IpreB:记录“(”左侧有多少个“x”和数字的计数器 Inow:记录需要处理括号内第几个项目的计数器 Icnt:在2-B中使用Inow时复制内容的临时计数器 Cend:记录正在处理括号内最后一个项目的开关 流程如下: 1. 抄写直到“(”的所有字符串 此时将“(”直前连续的“x”或数字的个数记录到IpreB中 2. 进入括号内,抄写直到找到“+”的所有内容 3.当找到【+】时,搜索【)】的位置,并将Inow增加1 如果找到的不是【+】而是【)】,则将Cend设为ON 4. 搜索到【)】的位置后,只要后面跟着【x】或数字就进行抄写 5. 当遇到【+】或空白时,记录【+】并搜索【(】 6. 向左搜索IpreB数量的位置,返回步骤1 2. 那么,从第二次开始向右搜索Inow数量的【+】 3-8 主计算器 (990 / 106.85) 复杂度: 990 / 1040 步骤数: 106.85 / 149.95

这个问题也很有趣。由于乘法和加法的运算优先级不同,需要妥善处理。 4-4 动词变位器 (560 / 51.15) 复杂度:560 / 620 步数:51.15 / 51.9

4-5 电报码翻译器(300 / 80.5) 复杂性:300 / 340 步数:80.5 / 100.2

4-7 语法检查器(1080 / 710.53) 复杂性:1080 / 1110 步数:710.53 / 725.86

这似乎是个有多种解决方法的棘手问题。我纠结于如何设计处理循环,也为循环的结束条件该如何设定而烦恼。 以下是处理步骤的大致框架: 使用INvoc将单词符号化,这一步还算简单。 接下来的处理大致分为两部分: 1. 将Tnote的语言符号输入INgmr,检查是否能完成转换。 a. 若在6个字符以内完成转换(转换成功):将转换后的字符串写入Text,然后进行下一个语言符号的判定。 b. 若连续7个字符以上未完成转换(转换失败):返回到开始读取的位置,将首个语言符号直接写入Text,然后进行下一个语言符号的判定。 2.当语言符号消失时,将文本内容复制到便签并进入循环。循环的结束条件是判断文本内容是否比便签内容短。但仅在初次循环时,即使发生字符串转换,也可能不会使字符串变短(例如$N→$NP、$VI→$VP等),因此使用C2nd作为条件,仅在第二次循环及之后生效。成功条件的判定是判断是否仅存在$S。5-1 书籍密码(360 / 65.75)复杂度:360 / 360 步骤数:65.75 / 65.75

5-2 之字形密码(520 / 141.3) 复杂度:520 / 520 步数:141.3 / 148.14

5-3 一次性密码本加密法 (510 / 120.35) 复杂性: 510 / 640 步数: 120.35 / 122.35

5-4 卒的移动 (1740 / 159.06) 复杂性:1740 / 1820 步数:159.06 / 447.53


之前在步数方面一直很困扰,不过从其他玩家的攻略中获得了灵感并重新进行了组合。感谢。 5-5 骑士移动(1840 / 275) 复杂度:1840 / 2690 步数:275 / 351

5-6 皇后移动 (1550 / 596.33) 复杂性: 1550 / 1690 步数: 596.33 / 627.53

通过A・B对每行每列是否有棋子进行判定,并将空出的编号记录到磁带上 通过C根据刚才磁带上得出的、纵横方向都没有棋子的格子,从斜向十字方向进行搜索 通过D进行递归处理。递归处理方面做了一些巧妙设计 在Tcol中,对于排除出候选的行编号位置,用【$】进行填充 在TcolB中按顺序记录放置了棋子的行,递归时从后往前将其返回至Tcol Trow不使用【$】,仅通过左右移动进行处理 注意:在D内的第二个映射器M33中,虽然显示为TcolB→Icol,但由于A~H对应0~7,因此只有这里需要进行改写 5-7 区域分析(840 / 425.8) 复杂度:840 / 1360 步数:425.8 / 1295.3

将问题重新解读后,可以看作是在找到B之前填充区域的问题。作为一种简单的填充方法,我尝试用递归进行处理(个人偏好上,优先考虑流程图的简洁性而非步数): 1. 从A格开始探索 2. 在检查是否处于墙边的同时,按上下左右方向依次进行探索 3. 此时,将前进的方向用1-4记录在磁带Tdir上 4-1. 如果前进的目的地是■或A,就返回原位置并尝试下一个方向 4-2. 如果前进的目的地是空白,就在该位置标记A 5. 若上下左右方向的探索结果均为墙壁或A,就回溯磁带,按照数字所记录的方向的反方向返回 6.探索数字所指示的下一个方向 5-8 迷宫分析(790 / 361.7) 复杂性:790 / 137 步数:361.7 / 744.3

几乎和5-7一样……或者说,5-7可以用这道题相同的解法来解决。 与5-7的区别在于,前进时记录×,返回时将记录的×消除。 在5-7中,由于屏幕上残留着A这个记录,所以形成了填充效果, 而在5-8中,因为会消除记录的×,所以也可以通过其他路径踩到同一个格子。




换一换 


















