下一个 向上的 以前的
下一步: 平衡账簿 向上: UTICPC Take 2 上一页: 从我的独木舟到你

3图灵(是的,图灵!)

仅仅因为UofT现在在第一年教Java,这并不意味着你可以忘记图灵。阿兰·图灵几乎是定义明确的计算机通过定义一个以他的名字命名的计算设备。您的任务是编写一个(简化的)图灵机模拟器。

图灵机是一种读取和写入符号的状态机一个称为磁带,使用名为. 在这个问题中,这些符号是十进制数字的子集0到9,带有数字9表示空白。

磁带被初始化为一些非空的数字串,并进行解释作为机器的输入。

+机器中有2种状态。这个活动状态编号为0到-1.状态-1表示接受国家;状态-2是拒绝状态。

机器的“程序”存储在索引的三元组表中通过活动状态编号和符号。如果三重存储用于状态q个和符号d日是(d日',,q个'),然后当机器处于状态时q个并看到符号d日在下面它的头部,然后头部覆盖d日具有d日',移动它的头位置向右(为1或-1-1表示向左移动一个符号),然后进入状态q个'.

机器在状态0下启动,头部位于最左侧磁带的符号。然后反复需要根据上述规则执行步骤。如果机器进入状态-1接受输入并停止。如果它进入状态-2不合格品输入并停止。如果它试图移动到头部开始的左侧拒绝输入并停止。如果它当前试图移动到数字字符串的右侧在磁带上,它解释用符号9填充新(空白)单元格,并继续。

输入:机器及其输入使用数字和数字字符串,由空格(空格、制表符和换行符)分隔。第一项是数字符号d日; 机器使用符号0到d日、和9。第二项是,是活动状态的数量。

接下来的项目对状态转换表进行编码。提供三个表示所有可能的状态转换顺序:首先是状态0索引的所有三元组,然后是所有那些被索引的按状态1,直到所有由; 在每个这样的“行”中,三元组的顺序是先用符号0索引三元组,直到符号索引的三元组d日最后是三重由9索引(“空白”)。每个三元组数字符号d日',和然后移动数字-1或1,以及最后是州编号q个'. 输入将始终有效。

最后,给出一个最多100位的十进制字符串,它是解释作为磁带单元的初始值字符串。

图灵机程序使用的磁带永远不会超过1000个细胞,并且最终会通过接受或拒绝来停止。

输出:给定机器描述和输入,模拟机器直到停止。如果已接受,则打印字符串接受然后一个空格,后面是磁带的内容和一个换行符。如果拒绝,打印字符串拒绝然后一个空格,后面是磁带的内容和一个换行符。通过“磁带内容”,我们是指任何方块的内容在输入时具有指定值(包括9),或超过该值机器的读/写头在执行期间传递。

样机说明:以下示例中的机器将其输入视为二进制数n个.如果和n个可被4整除,则机器会留下一个二进制表示n个/4 在磁带上(一些尾随的9代表空格),并接受。否则机器拒绝。

示例输入:

140 1 0    1 1 0     9 -1 19 -1 2   9 -1 3    9 -1 -29 -1 -1  9 -1 -2   9 -1 -29 -1 -2  9 -1 -2   9 -1 -2010100
对应输出:
接受0101999
样本输入(同一台机器,不同输入):
140 1 0    1 1 0     9 -1 19 -1 2   9 -1 3    9 -1 -29 -1 -1  9 -1 -2   9 -1 -29 -1 -2  9 -1 -2   9 -1 -2110101
对应输出:
拒绝1101999


下一个 向上的 以前的
下一步: 平衡账簿 向上: UTICPC取2 上一页: 从我的独木舟到你

大卫·内托
1997年9月18日星期四16:32:16 EDT