本楼层的任务是对于输入栏的每一个数字,把它和0之间的每一个数(包括它本身和0)都送入到outbox中,这其实就是一个计时器。
在这一楼层,又新增了两条指令bump+和bump-,这两条指令可以把地毯上的数字加一或者减一,然后把结果同时放回地毯和手上。
思路解析1
1. 从inbox取一个数字
2. 放入地毯0位置
3. 判断是否为负数,如果为负数,跳转到8
4. 输出
5. 把地毯0位置数字减1
6. 判断是否为负数,如果为负数,跳转到1,处理下一个数字
7. 跳转到4
8. 输出
9. 把地毯0位置数字加1
10. 判断是否为0,为0跳转到12
11. 跳转到8
12. 输出
13. 跳转到1,处理下一个数字
代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 -- HUMAN RESOURCE MACHINE PROGRAM --
a:
b:
INBOX
COPYTO 0
JUMPN d
c:
OUTBOX
BUMPDN 0
JUMPN b
JUMP c
d:
e:
OUTBOX
BUMPUP 0
JUMPZ f
JUMP e
f:
OUTBOX
JUMP a
这段代码没有达到效率最佳
思路2
1. 从inbox取一个数字
2. 放入地毯0位置
3. 判断是否为负数,如果为负数,跳转到8
4. 输出
5. 把地毯0位置数字减1
6. 判断是否为负数,如果为负数,跳转到1,处理下一个数字
7. 跳转到4
8. 输出
9. 把地毯0位置数字加1
10. 判断是否为负,为负跳转到8
11. 输出
12. 跳转到1,处理下一个数字
第二种解法和第一种的区别在于第10步,前者进行0判断,后者进行负判断
1 |
|