图鉴中的多个开关状态可以用一个整数表达。这个整数不是收集数量,而是一组位置权重相加的结果。理解编码和还原,有助于区分状态保存正确与界面计数正确这两件事。
下面是一份输入完整的独立练习。先明确规则和端点约定,再逐项推演;可以遮住计算结果自行记录,出现差异时从第一处不同查起。每项输入都是本例设定,不代表所有游戏采用同一套规则。
物品编号从零开始,编号对应二的该次方;重复点亮不叠加,移除未点亮项也不改变状态。演示操作只有点亮和熄灭,不包含未知编号或存档兼容迁移。
图鉴共7项,初始全灭 [['点亮', 4], ['熄灭', 0], ['点亮', 1], ['熄灭', 5], ['点亮', 6], ['熄灭', 2], ['熄灭', 6], ['熄灭', 6], ['熄灭', 0], ['熄灭', 2], ['熄灭', 6], ['点亮', 5], ['点亮', 0], ['熄灭', 1], ['熄灭', 0]]
点亮编号4,该位权重16:编码0变为16,从高位到低位写作0010000;还原已点亮编号[4],共1项。
熄灭编号0,该位权重1:编码16变为16,从高位到低位写作0010000;还原已点亮编号[4],共1项。
点亮编号1,该位权重2:编码16变为18,从高位到低位写作0010010;还原已点亮编号[1, 4],共2项。
熄灭编号5,该位权重32:编码18变为18,从高位到低位写作0010010;还原已点亮编号[1, 4],共2项。
点亮编号6,该位权重64:编码18变为82,从高位到低位写作1010010;还原已点亮编号[1, 4, 6],共3项。
熄灭编号2,该位权重4:编码82变为82,从高位到低位写作1010010;还原已点亮编号[1, 4, 6],共3项。
熄灭编号6,该位权重64:编码82变为18,从高位到低位写作0010010;还原已点亮编号[1, 4],共2项。
熄灭编号6,该位权重64:编码18变为18,从高位到低位写作0010010;还原已点亮编号[1, 4],共2项。
熄灭编号0,该位权重1:编码18变为18,从高位到低位写作0010010;还原已点亮编号[1, 4],共2项。
熄灭编号2,该位权重4:编码18变为18,从高位到低位写作0010010;还原已点亮编号[1, 4],共2项。
熄灭编号6,该位权重64:编码18变为18,从高位到低位写作0010010;还原已点亮编号[1, 4],共2项。
点亮编号5,该位权重32:编码18变为50,从高位到低位写作0110010;还原已点亮编号[1, 4, 5],共3项。
点亮编号0,该位权重1:编码50变为51,从高位到低位写作0110011;还原已点亮编号[0, 1, 4, 5],共4项。
熄灭编号1,该位权重2:编码51变为49,从高位到低位写作0110001;还原已点亮编号[0, 4, 5],共3项。
熄灭编号0,该位权重1:编码49变为48,从高位到低位写作0110000;还原已点亮编号[4, 5],共2项。
最后编码为48,有效项目数为2。
从整数中逐位还原已点亮编号,再与集合形式的操作结果比较。最高编号很大时数值会很大,这不说明收集很多;两种表示应记录同一组对象。
二进制字符串通常把高位写在左边,而编号零对应最右边。调试界面若把编号顺序从左到右排列,就要明确这两种阅读方向,不能直接按字符串位置当物品编号。
练习结束后,保留输入、每一步的中间状态和最终结果。可以仅修改一个边界输入,再比较变化来自哪条规则;不要同时改动多个条件后只凭最终画面判断。若实际作品表现不同,应先确认它使用的时间、坐标或结算约定,再决定是否属于异常。