教师参考答案

构建小程序

收集四类证据:相关状态的预测;多种案例(包括边界)的行为;依据轨迹和状态的解释;对一次不一致作出有理由的修正。使用纸面或学校现有批准流程,将各项记录为初步、需支持或独立完成。挑战通过证明的是机器行为,不证明作者身份或完全掌握。接受等效正确程序;公开答案是示范,并非唯一答案。

公开教学材料。答案是示例;等效的正确程序也可能通过实际检查。

28. 迷你目标游戏

用保存的状态与计分规则制作三轮游戏。

打开本课 →

1. 预测与跟踪

运行试做程序前,预测输出,并跟踪最先执行的三条指令。按需要记录相关寄存器、标志或内存,再逐步执行进行比较。

STORE 5 200
LOAD [200] R1
LOAD 0 R2
LOOP 3
INPUT
CMP R1
JUMP_IF_ZERO hit
JUMP next
hit: LOAD R2
ADD 1
COPY R0 R2
next: NOP
RETURN
LOAD R2
STORE 201
PRINT
HALT

加入输入队列: 5, 2, 5

初始化内存: 200: 5

试做预测答案

输出: 2

指令执行前 PC执行后 PC执行前 R0执行后 R0相关状态输出
STORE0100{"registers":[0,0,0,0,0,0,0,0],"flags":{"zero":false,"negative":false,"overflow":false},"sp":255,"stack":[],"callStack":[],"loopStack":[],"memoryReads":[],"memoryWrites":[200]}无
LOAD1200{"registers":[0,5,0,0,0,0,0,0],"flags":{"zero":false,"negative":false,"overflow":false},"sp":255,"stack":[],"callStack":[],"loopStack":[],"memoryReads":[200],"memoryWrites":[]}无
LOAD2300{"registers":[0,5,0,0,0,0,0,0],"flags":{"zero":true,"negative":false,"overflow":false},"sp":255,"stack":[],"callStack":[],"loopStack":[],"memoryReads":[],"memoryWrites":[]}无

2. 构建与检查

内存 200 包含目标字节。恰好读取三次猜测,计算匹配次数,保存到内存 201,并输出该分数一次。

必需的指令类型: INPUT, CMP, LOOP, STORE, JUMP_IF_ZERO

挑战示例答案

LOAD [200] R1
LOAD 0 R2
LOOP 3
INPUT
CMP R1
JUMP_IF_ZERO hit
JUMP next
hit: LOAD R2
ADD 1
COPY R0 R2
next: NOP
RETURN
LOAD R2
STORE 201
PRINT
HALT

实际检查器测试数据

案例 1
输入
5, 2, 5
初始内存
200: 5
预期输出
2
预期最终内存
200: 5, 201: 2
必需的内存读取
200
案例 2
输入
1, 2, 3
初始内存
200: 9
预期输出
0
预期最终内存
200: 9, 201: 0
必需的内存读取
200
案例 3
输入
0, 0, 0
初始内存
200: 0
预期输出
3
预期最终内存
200: 0, 201: 3
必需的内存读取
200
案例 4
输入
17, 1, 2
初始内存
200: 17
预期输出
1
预期最终内存
200: 17, 201: 1
必需的内存读取
200

3. 解释机器

猜对和猜错时,哪些状态改变?

推理与教学说明

仅相等时分数递增;目标仍为保存的输入或规则数据。三次猜测产生数字分数。