本关给两个单词,然后判断哪个词在词典前面,放入outbox就行。
最开始思路:想着把2个词都放在中间,因为每个词都没超过5个字母,右下脚又是0和10,想着第一个词放0-4格里,第二个词放10-14格里,然后一个字母对一个字母做减法,差额小的在前面就行了。程序跑通了,但是不给过关,说不能应付所有情况(第一次碰到的正好两个词都是5个字母)
然后我有跑了一次,第二次出现第二个单词是2个字母的,程序报错。
在网上找了其他人的方法(照着输入进去也是提示无法覆盖所有情况),发现两个关键点:
1、第二个词不用排列出来,抽取第二个词的每一个字母,依次减第一个词的对应字母就好了;
2、inbox里面每个词后面的0(有2个)都是很重要的终止判定。
ok,那么就开始优化代码。
思路是这样,
1)先把第一个词排列出来,把0放在第一个词后面,作为终止判定记号
2)然后拿第二个词的第一个字母放在地板上,拿第一个词的第一个字母和它作比较
结果为正,说明第一个词的字母靠后,直接输出第二个词的这个字母,以及后面在inbox里的所有字母,拿到0就终止程序;
结果为负,直接输出第一个词的这个字母,以及后面已经排列出来的字母,拿到0就终止程序
结果为0,把该字母输出outbox,然后比较第二个字母。
3)为什么不从inbox里直接拿第二个词直接和第一个词的对应字母做比较呢?可以省一行代码。主要是会出现第一个词字母比第二个词少,如果用第二个词直接减第一个词,会出现字母减0的情况,程序报错。
![](https://tb2.bdstatic.com/tb/editor/images/face/i_f25.png?t=20140803)
(话说代码标签真好用,各种jump用标签隔开,思路就很清晰了)
-- HUMAN RESOURCE MACHINE PROGRAM --
COPYFROM 23 /复制第23格的数字0
COPYTO 20 /复制数字0到第20格,作为辅助计数格
a: /开始将第一个单词放在0-4个内
INBOX /去inbox里拿一个字母
JUMPZ b /如果是0的话就跳转到b步骤
COPYTO [23] /拿完以后放在第23格显示的数字编号那一格里
BUMPUP 23 /将第23格数字编号增加1
JUMP a /重复a步骤,直到拿到0跳转b
b: /拿到0以后,做终止标记
COPYTO [23] /第一个单词后的0放在第一个单词后面格子里
c: /开始做比较
INBOX /去inbox里拿第二个单词的第一个字母
JUMPZ g /如果拿到0,就终止程序
COPYTO 19 /放到第19格
COPYFROM [20] /拿取20格数字对应格数的字母(第一次的话就是第0格,第一个单词的第一个字母)
JUMPZ h /如果拿到0终止程序
SUB 19 /减去第19格的字母
JUMPN e /结果为负数,跳转到e步骤
JUMPZ f /结果为0,跳转到f步骤
COPYFROM 19 /结果为正,输出第二个词对应字母及后面字母输出,先复制对应字母
d: /输出第二个词
OUTBOX /放入outbox
INBOX /去inbox里拿字母
JUMPZ i /拿到0就结束程序
JUMP d /重复d步骤
e:
COPYFROM [20] /c步骤比较的结果为负数,则将第一个词对应字母及后面字母输出,先复制对应字母
JUMPZ j /如果是0就结束程序
OUTBOX /放入outbox
BUMPUP 20 /将20格数字编号加1
JUMP e /重复e步骤
f: /比较结果为0,说明对应位置字母相同,则输出该字母,并且比较下一个字母
COPYFROM 19 /比较后手上是数字,要重新拿一下比较的这个字母
OUTBOX /放入outbox
BUMPUP 20 /将20格数字编号加1
JUMP c /重复C步骤,比较下一个字母
g:
h:
i:
j:
话说我现在也不习惯看这种代码,还是截图比较直观一些
![](http://tiebapic.baidu.com/forum/w%3D580/sign=15dd8a6772a85edffa8cfe2b795509d8/df246a1090ef76c60e03181cdb16fdfaae51672b.jpg?tbpicau=2025-02-27-05_29ba2fb883f63749cf2afb2d71031d69)
最后双星一次达成,远远小于强迫症指标
![](http://tiebapic.baidu.com/forum/w%3D580/sign=3708873a609759ee4a5060c382fa434e/76f1e3071d950a7b3dfaadf34cd162d9f3d3c931.jpg?tbpicau=2025-02-27-05_43f649e94446c2fec50bc31824bc2260)
不知道有没有大佬能再优化的?我总觉得这个方法特别笨
最开始思路:想着把2个词都放在中间,因为每个词都没超过5个字母,右下脚又是0和10,想着第一个词放0-4格里,第二个词放10-14格里,然后一个字母对一个字母做减法,差额小的在前面就行了。程序跑通了,但是不给过关,说不能应付所有情况(第一次碰到的正好两个词都是5个字母)
然后我有跑了一次,第二次出现第二个单词是2个字母的,程序报错。
在网上找了其他人的方法(照着输入进去也是提示无法覆盖所有情况),发现两个关键点:
1、第二个词不用排列出来,抽取第二个词的每一个字母,依次减第一个词的对应字母就好了;
2、inbox里面每个词后面的0(有2个)都是很重要的终止判定。
ok,那么就开始优化代码。
思路是这样,
1)先把第一个词排列出来,把0放在第一个词后面,作为终止判定记号
2)然后拿第二个词的第一个字母放在地板上,拿第一个词的第一个字母和它作比较
结果为正,说明第一个词的字母靠后,直接输出第二个词的这个字母,以及后面在inbox里的所有字母,拿到0就终止程序;
结果为负,直接输出第一个词的这个字母,以及后面已经排列出来的字母,拿到0就终止程序
结果为0,把该字母输出outbox,然后比较第二个字母。
3)为什么不从inbox里直接拿第二个词直接和第一个词的对应字母做比较呢?可以省一行代码。主要是会出现第一个词字母比第二个词少,如果用第二个词直接减第一个词,会出现字母减0的情况,程序报错。
![](https://tb2.bdstatic.com/tb/editor/images/face/i_f25.png?t=20140803)
(话说代码标签真好用,各种jump用标签隔开,思路就很清晰了)
-- HUMAN RESOURCE MACHINE PROGRAM --
COPYFROM 23 /复制第23格的数字0
COPYTO 20 /复制数字0到第20格,作为辅助计数格
a: /开始将第一个单词放在0-4个内
INBOX /去inbox里拿一个字母
JUMPZ b /如果是0的话就跳转到b步骤
COPYTO [23] /拿完以后放在第23格显示的数字编号那一格里
BUMPUP 23 /将第23格数字编号增加1
JUMP a /重复a步骤,直到拿到0跳转b
b: /拿到0以后,做终止标记
COPYTO [23] /第一个单词后的0放在第一个单词后面格子里
c: /开始做比较
INBOX /去inbox里拿第二个单词的第一个字母
JUMPZ g /如果拿到0,就终止程序
COPYTO 19 /放到第19格
COPYFROM [20] /拿取20格数字对应格数的字母(第一次的话就是第0格,第一个单词的第一个字母)
JUMPZ h /如果拿到0终止程序
SUB 19 /减去第19格的字母
JUMPN e /结果为负数,跳转到e步骤
JUMPZ f /结果为0,跳转到f步骤
COPYFROM 19 /结果为正,输出第二个词对应字母及后面字母输出,先复制对应字母
d: /输出第二个词
OUTBOX /放入outbox
INBOX /去inbox里拿字母
JUMPZ i /拿到0就结束程序
JUMP d /重复d步骤
e:
COPYFROM [20] /c步骤比较的结果为负数,则将第一个词对应字母及后面字母输出,先复制对应字母
JUMPZ j /如果是0就结束程序
OUTBOX /放入outbox
BUMPUP 20 /将20格数字编号加1
JUMP e /重复e步骤
f: /比较结果为0,说明对应位置字母相同,则输出该字母,并且比较下一个字母
COPYFROM 19 /比较后手上是数字,要重新拿一下比较的这个字母
OUTBOX /放入outbox
BUMPUP 20 /将20格数字编号加1
JUMP c /重复C步骤,比较下一个字母
g:
h:
i:
j:
![](https://tb2.bdstatic.com/tb/editor/images/face/i_f27.png?t=20140803)
![](http://tiebapic.baidu.com/forum/w%3D580/sign=15dd8a6772a85edffa8cfe2b795509d8/df246a1090ef76c60e03181cdb16fdfaae51672b.jpg?tbpicau=2025-02-27-05_29ba2fb883f63749cf2afb2d71031d69)
最后双星一次达成,远远小于强迫症指标
![](http://tiebapic.baidu.com/forum/w%3D580/sign=3708873a609759ee4a5060c382fa434e/76f1e3071d950a7b3dfaadf34cd162d9f3d3c931.jpg?tbpicau=2025-02-27-05_43f649e94446c2fec50bc31824bc2260)
不知道有没有大佬能再优化的?我总觉得这个方法特别笨