一个短二进制状态不断移位,并把若干位的异或值放回末端,可以形成可复现的状态序列。不同反馈位置可能产生不同循环,不能只看到序列变化就认为它一定遍历所有非零状态。
本例使用固定宽度的整数,位编号从最低位零开始。反馈是列出的抽头位异或;旧状态右移一位,再把反馈放到最高位。记录首次重复的状态,以它第一次出现的位置区分前段与循环段。
宽度6,抽头位[0, 1],初值2(000010)。
旧状态 | 抽头位值 | 反馈 | 新状态 000010 | [0, 1] | 1 | 100001 100001 | [1, 0] | 1 | 110000 110000 | [0, 0] | 0 | 011000 011000 | [0, 0] | 0 | 001100 001100 | [0, 0] | 0 | 000110 000110 | [0, 1] | 1 | 100011 100011 | [1, 1] | 0 | 010001 010001 | [1, 0] | 1 | 101000 101000 | [0, 0] | 0 | 010100 010100 | [0, 0] | 0 | 001010 001010 | [0, 1] | 1 | 100101 100101 | [1, 0] | 1 | 110010 110010 | [0, 1] | 1 | 111001 111001 | [1, 0] | 1 | 111100 111100 | [0, 0] | 0 | 011110 011110 | [0, 1] | 1 | 101111 101111 | [1, 1] | 0 | 010111 010111 | [1, 1] | 0 | 001011 001011 | [1, 1] | 0 | 000101 000101 | [1, 0] | 1 | 100010 100010 | [0, 1] | 1 | 110001 110001 | [1, 0] | 1 | 111000 111000 | [0, 0] | 0 | 011100 011100 | [0, 0] | 0 | 001110 001110 | [0, 1] | 1 | 100111 100111 | [1, 1] | 0 | 010011 010011 | [1, 1] | 0 | 001001 001001 | [1, 0] | 1 | 100100 100100 | [0, 0] | 0 | 010010 010010 | [0, 1] | 1 | 101001 101001 | [1, 0] | 1 | 110100 110100 | [0, 0] | 0 | 011010 011010 | [0, 1] | 1 | 101101 101101 | [1, 0] | 1 | 110110 110110 | [0, 1] | 1 | 111011 111011 | [1, 1] | 0 | 011101 011101 | [1, 0] | 1 | 101110 101110 | [0, 1] | 1 | 110111 110111 | [1, 1] | 0 | 011011 011011 | [1, 1] | 0 | 001101 001101 | [1, 0] | 1 | 100110 100110 | [0, 1] | 1 | 110011 110011 | [1, 1] | 0 | 011001 011001 | [1, 0] | 1 | 101100 101100 | [0, 0] | 0 | 010110 010110 | [0, 1] | 1 | 101011 101011 | [1, 1] | 0 | 010101 010101 | [1, 0] | 1 | 101010 101010 | [0, 1] | 1 | 110101 110101 | [1, 0] | 1 | 111010 111010 | [0, 1] | 1 | 111101 111101 | [1, 0] | 1 | 111110 111110 | [0, 1] | 1 | 111111 111111 | [1, 1] | 0 | 011111 011111 | [1, 1] | 0 | 001111 001111 | [1, 1] | 0 | 000111 000111 | [1, 1] | 0 | 000011 000011 | [1, 1] | 0 | 000001 000001 | [1, 0] | 1 | 100000 100000 | [0, 0] | 0 | 010000 010000 | [0, 0] | 0 | 001000 001000 | [0, 0] | 0 | 000100 000100 | [0, 0] | 0 | 000010 首次重复状态2,前段长度0,循环长度63。
表中编号只标记本例对象,不表示排名或另一组数据中的身份。先确认输入单位与边界约定,再逐步核对中间值。零、空结果和不存在是不同状态,不能因为显示相近就互相替代;分数用精确形式保留,便于重新演算。
固定宽度只有有限个状态,因此持续运行必然重复。全零状态在这套无常量反馈规则下会一直为零。起点不同可能落入不同循环,循环长度必须按实际状态轨迹确认,不能直接用二的宽度次方减一代替。
每一步核对抽出的位、异或结果和新状态,特别注意最高位补入位置。首次重复状态不应再计为一个新状态。为了看清零陷阱,可额外从零开始运行;为了检查周期,则应保存首次出现索引,而不是只比较相邻两个状态是否相同。
这是教学用的线性状态机,不适合拿来保护秘密,也不声称其输出满足任何游戏对随机性的全部需求。位序、移动方向和抽头编号一旦改变,序列也会改变,名称相似不代表实现一致。
这份记录用于理解明确规则下的游戏机制。改变输入后,结果也应随之重新计算;若操作规则不同,应先把新规则写清再比较。可以从一两个步骤手算开始,找出第一处差异,而不是只对照最后一个数值。全部中间记录都属于当前案例,不能直接当成其他场景的固定答案。