前些时候,无意间发现一个神奇的游戏Human Resource Machine
。玩了之后发现这货简直是汇编的入门神器。作为对汇编无比神往的我,自然不能放过它。顺便把解法记录下来,算是一个极不正式的汇编学习笔记吧。
2. 繁忙的收发室
取出inbox
中的每件东西,然后放到outbox
中。
最少指令:
inbox
outbox
jump 1
最快运行:
inbox
outbox
inbox
outbox
jump 1
4. 解扰码器
从inbox
中取出前两件东西然后以相反的顺序扔进outbox
中。重复直到inbox
为空。
inbox
copyto 0
inbox
outbox
copyfrom 0
outbox
jump 1
6. 多雨之夏
对于inbox
中的两个数加起来,然后把结果放在outbox
中。
inbox
copyto 0
inbox
add 0
outbox
jump 1
7. 零之杀手
把所有不是零的东西发到outbox
。
inbox
jump_zero 0
outbox
jump 0
8. 八倍扩大室
对于inbox
中的每样东西,将其增加到三倍,然后outbox
结果。
inbox
copyto 0
add 0
add 0
outbox
jump 1
9. 保护零行动
只把零送到outbox
。
最少指令:
inbox
jump_zero 4
jump 1
outbox
jump 1
最快运行:
inbox
jump_zero 6
inbox
jump_zero 6
jump 0
outbox
10. 八倍扩大器套件
对于inbox
中的每个数,将其乘以8,然后把结果放在outbox
中。
inbox
copyto 0
add 0
copyto 0
add 0
copyto 0
add 0
outbox
jump 1
11. Sub走廊
对于inbox
中的每两个东西,先把第1个从第2个中送去,并把结果放在outbox
内。然后,把第2个从第1个中减去,再把结果放在outbox
内。重复。
inbox
copyto 0
inbox
copyto 1
sub 0
outbox
copyfrom 0
sub 1
outbox
jump 1
12. 四十倍扩大器
对于inbox
内的每个数,将其乘以40,将结果放入outbox
。
inbox
copyto 0
add 0
copyto 0
add 0
copyto 1
add 1
copyto 1
add 1
copyto 2
add 2
add 1
outbox
jump 1
13. 平等化室
从inbox
中取出两样东西,如果相等,把1个放到outbox
里。不相等的扔掉。重复!
最少指令:
inbox
copyto 0
inbox
sub 0
jump_zero 7
jump 1
add 0
outbox
jump
最快运行:
inbox
copyto 0
inbox
sub 0
jump_zero 12
inbox
copyto 0
inbox
sub 0
jump_zero 12
jump 1
copyfrom 0
outbox
jump 1
14. 最大化室
从inbox
中取两样东西,将较大的放入outbox
。如果它们相等,就随便哪个都行。重复!
最快运行:
inbox
copyto 0
inbox
sub 0
jump_neg 9
add 0
outbox
jump 1
copyfrom 0
outbox
jump 1
16. 绝对正能量
把inbox
中的每样东西送到outbox
中。但是,如果是个负数,请先去掉它的负号。
最少指令:
inbox
jump_neg 4
jump 7
copyto 0
sub 0
sub 0
outbox
jump 1
最快执行:
inbox
jump_neg 5
outbox
jump 1
copyto 0
sub 0
sub 0
outbox
jump 1
17. VIP休息室
对于inbox
中的每两个数字:如果两个数字符号相同,把0
送到outbox
里面。如果两个数字符号不同,把1
送到outbox
里面。一直重复,直到index
为空。
最少指令:
inbox
jump_neg 6
inbox
jump_neg 8
jump 10
inbox
jump_neg 10
copyfrom 5
jump 11
copyfrom 4
outbox
jump 1
最快执行:
inbox
jump_neg 6
inbox
jump_neg 8
jump 11
inbox
jump_neg 11
copyfrom 5
outbox
jump 1
copyfrom 4
outbox
jump 1
22.斐波那契参观者
对于inbox
中的每个数,将斐波那契数列中不满那个数的所有数都发送到outbox
中。
最少指令:
inbox
copyto 0
bump+ 9
ocpyto 8
copyfrom 0
sub 9
jump_neg 16
copyfrom 9
outbox
copyfrom 9
add 8
copyto 8
sub 9
copyto 9
jump 5
copyfrom 9
sub 9
copyto 9
jump 1
23. 最小的数字
对于inbox
中的每个零结尾串,将你在串中看到的最小的数字发送到outbox
。你永远不会得到空串。重置之后对每一个串都重复一次。
inbox
copyto 0
inbox
jump_zero 11
sub 0
jump_neg 8
jump 3
add 0
copyto 0
jump 3
copyfrom 0
outbox
jump 1
24. 模运算块
对于inbox
中的每两个东西,outbox
将第一个除以第二个所得的余数。别担心,你其实并不需要做除法。现在也暂老远不必担心负数。
inbox
copyto 0
inbox
copyto 0
copygrom 0
sub 1
jump_neg 9
jump 6
add 1
outbox
jump 1
25. 累加的倒计时
对于inbox
中的每个数,outbox
不超过它的所有自然数的种。例如,如果inbox
为3,outbox
应为6
,因为3+2+1+0=6
。
最少指令:
inbox
copyto 0
copyto 1
bump- 0
jump_neg 9
add 1
copyto 1
jump 4
copyfrom 1
outbox
jump 1
最快执行:
inbox
jump_zero 13
copyto 0
copyto 1
bump- 0
jump_zero 10
add 1
copyto 1
jump 5
copyfrom 1
outbox
jump 1
outbox
jump 1
29. 仓库楼层
想象一下index
每个值都是一个地址,而每个地址指向一块地板上0-9
的地砖。你的任务:对于inbox
中的每个地址,捡起那个地址上的字母并送到outbox
。
inbox
copyto 10
copyto [10]
outbox
jump 1