人力资源机器1-6满星攻略
《人力资源机器》(原名:Human Resource Machine,又译:程序员升职记)这款游戏,所使用的游戏规则接近于计算机的汇编,可视化了底层代码,去其繁,益其乐。无论是入坑编程还是初试算法思想都是非常好的选择。当然,仅仅是作为一款益智游戏也是蛮不错的。从一名基层员工,一步一步从基层爬上巅峰,是不是特别地有意思?
简单地介绍一下
在HRM里,你将会扮演Human Resource Machine公司的一名职员,从基层开始锻炼,一步一步走上职场巅峰(然后被解雇?)。将命令合理地组合,处理上司给你的数据然后输出正确的结果,从而通关,让电梯上升一层。在通关的同时也会有一些剧情(对,HRM这小游戏有一点剧情)。
玩法
游戏的场景在一间办公室里,最左侧是输入(INBOX),右边是输出(OUTBOX),中间是地砖(相当于寄存器/RAM),你需要在界面最右侧的指令栏里,通过点击+拖拽组合你的指令,然后点击界面下方的“运行”(上司打断道:听清楚,这叫播放!),你所扮演的员工将会按照程序完成任务。随着剧情的推进,办公室里的场景也有一些细节上的变化,它们正等待着你的仔细观察。
通关方法:只需要输出结果正确即可通关。当然了,你需要编写合适的程序从而保障任务得以顺利完成,并且上司会暗中拿同样类型但是不同的输入数据去监测你的程序,一旦不能通过某组测试数据,我们也是无法通关的。
强迫症诊断标准:游戏里还有挑战内容,通过较少的步数,使用更少的指令完成任务,可以分别获得一星的奖励。当然,有些任务可能无法一箭双雕,需要通过不同代码分别获得两颗星的奖励。
便捷操作:游戏提供了撤销、复制、粘贴、清除等功能,并且你还能在你的代码和地砖上写注释!真的是非常贴心。
电梯:不完成前一层的任务,就无法进入下一层,或者是获得别的分支。就像生活一样,不克服困难,怎能进入下一个阶段?
指令都有哪些?
我们会在指令首次出现的层里一一介绍。
我的体验
与编程不同的是,在HRM里没有常量,包括每一层地砖上自带的数字,你可以随意使用和修改。加减乘除,各种运算,也比以往有了更加灵活的处理方式,在多次尝试(或者查攻略)之后你会发现那种处理方式到底有多么令人称赞。
花了很久的时间一点一点改进,一点一点优化,终于拿了HRM的全部满星。怎能不写一篇攻略来庆祝一下?
攻略
HRM的输入和输出的数量是确定的。也就是说,你可以连续写inbox
和outbox
若干次,从而完成任务。
在我写的攻略系列中,你可能会看到的代码有以下几种类型:
- 最朴素的解法:暴力代码
- 同时满星的代码:AK代码
- 步数超了,但是指令条数达成目标的代码:TLE代码
- 指令条数超了,但是步数没超的代码:MLE代码
一些基本的要素
所有的东西都可以与游戏画面一一对应。当你不理解攻略中的某些操作的时候,再来看看这里会比较好。
手
:就是手员工的手,手上可能拿着一样东西,从而让这样东西参与到程序中来;也可能空手。简言之:可拿可不拿,只能拿一样东西,拿新的东西会替换掉旧的东西。据说,这是比Minecraft的史蒂夫的麒麟臂更强的手,它可以在短时间内拿起任何东西,也可以抛出手上的任何东西,然后把它们摔碎!(误)每当你拿取新的东西时,手上原有的东西就会被员工抛出,然后在地上摔碎。当然了,如果此前你手上没有东西,那么显然员工只会把新的东西好好地放在手上。inbox
:inbox
就是界面左边的传送带。传送带上有一些物品
,物品
可能是数字,也可能是单个的字符。你可以每次从inbox
内拿出一件物品,然后放在手上。如果此前手上已经有了东西,那么新拿的东西会替换掉旧的东西outbox
:outbox
就是界面右边的传送带,你将把手上的物品放上去。当然,员工空手时是不能向传送带放东西的,把物品放上去之后,员工的手就空了。地砖
:地砖就是画面中间的那些方格,每个方格都有唯一的一个数字编号(即地址),你可以通过地址来访问它们。地砖相当于寄存器或者是ROM,它们都能存放唯一的物品。你可以从地砖上复制一份物品,也可以用手上的物品去替换它原有的内容。
电梯1层-收发室
新指令!
→inbox
:从inbox
里面拿出一件物品
,放在手
上。我们也简称这条指令为inbox
。
outbox→
:把你手上的东西放进outbox
里。同样地,简称这条指令为outbox
。
思路是……
解:略,请读者自证(手动滑稽)
AK代码:
1 | -- HUMAN RESOURCE MACHINE PROGRAM -- |
电梯2层-繁忙的收发室
新指令!
jump
:当程序运行遇到到jump
时,程序就会跳转到箭头所指位置,然后继续执行后面的命令。运用jump
,我们可以实现跳转,也可以实现复读机一样的循环。
思路是……
这关告诉了我们如何使用jump
创建一个循环,就是跑到前边去,把自己以前执行过的命令再执行一遍。这关有两种思路,一种是直接反复使用INBOX和OUTBOX打暴力;另一种,也是最一般的思路,就是把一对inbox
和outbox
放在循环里
TLE代码:
1 | -- HUMAN RESOURCE MACHINE PROGRAM -- |
MLE代码是想告诉我们,在这个游戏机制之下,想要获得满星,有可能要写非常复杂的代码。这个思想在后面会发挥很大的作用。MLE代码:
1 | -- HUMAN RESOURCE MACHINE PROGRAM -- |
电梯3层-复印楼层
新指令!
copyfrom
:将地砖上的物品复制到你的手上。使用它会替换你手上原有的内容。
思路是……
这层就是要教给我们怎么使用copyfrom
。而且要我们直接输出”BUG“,非常好玩儿。
思路:分别直接复制B、U、G,复制完成后就直接输出就好。
AK代码:
1 | -- HUMAN RESOURCE MACHINE PROGRAM -- |
电梯4层-解扰码器
新指令!
copyto
:既然能copyfrom
,那么反过来就能copyto
。顾名思义,把手上的内容复制到地砖上。使用它会替换地砖原有的内容。
思路是……
告诉我们如何使用copyto
。
AK代码的思路是,如果输入的两个东西分别是甲、乙,那么输出的时候就是乙、甲。先取一个输出,然后记录一下(copyto
到地砖上),再取第二个输入,直接把第二个输出出去,然后再把第一个拿起来(copyfrom
),输出出去。
AK代码:
1 | -- HUMAN RESOURCE MACHINE PROGRAM -- |
电梯5层-咖啡时间
剧情关,没有任务,以后会把剧情放在一块儿写。
电梯6层-多雨之夏
新指令!
add
:无论你拿着什么值,都会讲地砖上制定地砖的内容加上你手中的值,结果再返回到你的手中。
思路是……
幼儿园级别的题
AK代码:
1 | -- HUMAN RESOURCE MACHINE PROGRAM -- |
勘误
等我把Github Commits弄好就好了