评论详情
江妗 骑兵(Lv10)
不知道大家留意没,这个游戏的编程是没有终止命令的,而绝大多数任务都是靠循环的,那到底怎么样才算程序的结束呢?通过头机关,不难发现,代码走完了,程序就结束了,这个符合直觉对吧。但那些无法跳到底的程序呢,我觉得是靠触发inbox来实现的,当使用inbox时,如果输入队列为空,则程序跳出。这里就产生了一个问题,如果inbox离循环入口太远,那输出最终结果后,又得多运行几个动作才能到达inbox(null),增加总步数,如无必要,此处可优化。
程序结果的审核
一般最常见的错误是程序中意外的空手操作或类型不匹配,比如空手outbox、空手加减、空格子读取、字母加减数字等。其次,是错误输出值不符合要求,这里需要展开。
1.你往往会发现只要输出一个错误结果,程序就会报错“程序期待输出某值,而你输出某值”,所以我们觉得,这个数值一定是预先算过的,就等着看你给错了哪个,这种猜想多数情况下是成立的。
2.但还有稍不常见的错误,当你执行完毕按需输出后,程序报错“虽然你正确输出,但我能给出一个反例”,这种情况是你不完全理解题干,程序里出现某些特例不能兼顾的地方,或者投机取巧,仅仅为满足当前输入序列去产生特定的输出序列。我估计,系统在测试完当前给出的序列后,在后台对备用的所有序列都做了测试,行不通的就报错并在下次抛出这个序列。然而,系统有一个总步数评分系统,游戏作者主观上当然是希望它的备用序列在同一程序下跑分要一样,生成序列时可能用到一些理论或专业工具进行评估,但这或许还会遗留一些差异,或者说BUG,或许可以利用这些差异进行优化。
3.还有更不常见的错误,如 loop{ ... ; outbox; .... ; inbox; ... }。“你输出了所有期待的值,但输出结果过多”(如1,2,3,4, 1,3,5,7, 1)。前面提到程序结束是以inbox(null)为标志的,所以在inbox前慎用outbox。
跳转出固有思维
jump,或者我更喜欢称为goto,是程序实现条件判断、循环、子程序等的关键,高级语言中的goto、if、for、while、case、function等统统通过jump和它两个不成器的条件跳转兄弟来完成。汇编语言之所以灵活高效,跟这些“无条件”跳转指令不能说没有关系,虽然以高级语言的角度。用goto乱跳意味着以后你的代码将难以调试(write-only、通心粉代码),所以很多高级语言摒弃了类似的命令。高级语言是面向对象的,咳咳,就算面向过程至少也该可以定义几个函数不是么?即便没有函数也至少有循环语句不是么?
人力资源机器
角色益智模拟学习横屏原版MOD版
2018-10-21 08:47  10     1
相关回复