- Human Resource Machine is a visual programming-based puzzle video game developed by Tomorrow Corporation.
- In each level, your boss gives you a job. Automate it by programming your little office worker! If you succeed, you will be promoted up to the next level for another year of work in the vast office building. Congratulations!
- This game is really interesting, especially the optimization as a programmer, and this blog is written as a technical document for myself to review in the future. It is not necessarily the best solution, I am just explaining my thoughts :)
Year 1: Mail Room
– HUMAN RESOURCE MACHINE PROGRAM –
1 | INBOX |
– Commands: 6/6 Steps: 6/6 –
PS: 关于输入语句INPUT
和输出语句OUTPUT
如何使用的教程关卡,可以类比高级语言中的std::cin
和std::cout
。
Year 2: Busy Mail Room
– HUMAN RESOURCE MACHINE PROGRAM –
1 | a: |
– Commands: 3/3
Steps: 30/25–
PS: 关于循环语句JUMP
的如何使用的教程关卡,可以类比高级语言中的for
,while
等循环控制语句。
Year 3: Copy Floor
– HUMAN RESOURCE MACHINE PROGRAM –
1 | COPYFROM 4 -- 'B" |
– Commands: 6/6 Steps: 6/6 –
PS: 关于获取指令COPYFROM
如何使用的教程关卡,地板可以理解成内存,COPYFROM
的作用是从内存中取对应位置的值,本关依次取出地面上对应值输出即可满足两个优化条件。
Year 4: Scrambler Handler
– HUMAN RESOURCE MACHINE PROGRAM –
1 | a: |
– Commands: 7/7 Steps: 21/21 –
PS: 关于设置指令COPYTO
如何使用的教程关卡,COPYTO
的作用是从将当前手中的值设置(拷贝)到内存中对应位置。
Year 5: Coffee Time
Year 6: Rainy Summer
– HUMAN RESOURCE MACHINE PROGRAM –
1 | a: |
– Commands: 6/6 Steps: 24/24 –
PS: 关于加法指令ADD
如何使用的教程关卡,ADD
的作用是从将当前手中的值和地板上指定位置的值相加后替换当前手中的值。
Year 7: Zero Exterminator
– HUMAN RESOURCE MACHINE PROGRAM –
1 | a: |
– Commands: 4/4 Steps: 23/23 –
PS: 关于条件判断跳转语句JUMPZ
如何使用的教程关卡,类似高级语言中的条件判断,若满住当前手中的值为0则跳转执行相应的逻辑。
Year 8: Tripler Room
– HUMAN RESOURCE MACHINE PROGRAM –
1 | a: |
– Commands: 6/6 Steps: 24/24 –
PS: 在没有乘法的世界里,将输入的值相加三次就是乘以三。
Year 9: Zero Preservation Initiative
– HUMAN RESOURCE MACHINE PROGRAM –
1 | a: |
– Commands: 5/5
Steps: 28/25–
PS: 和第七关刚好相反,只要0,条件判断的简单应用。
Year 10: Octoplier Suite
– HUMAN RESOURCE MACHINE PROGRAM –
1 | a: |
– Commands: 9/9 Steps: 36/36 –
PS: 题目要求只能用3个ADD
实现乘以8,8的特别之处在于它是2的三次方,8 = 2 * 2 * 2,所以转换为将输入进行三次翻倍操作即可。
Year 11: Sub Hallway
– HUMAN RESOURCE MACHINE PROGRAM –
1 | a: |
– Commands: 10/10 Steps: 40/40 –
PS: 因为需要输出 a-b 和 b-a,所以两个输入都需要存储。
Year 12: Tetracontiplier
– HUMAN RESOURCE MACHINE PROGRAM –
1 | a: |
– Commands: 14/14 Steps: 56/56 –
PS: 和第十题八倍放大是一样的思路,a * 40 = (a * 16) + (a * 16) + (a * 8),注意区分哪些倍数哪些数需要暂存。
Year 13: Equalization Room
– HUMAN RESOURCE MACHINE PROGRAM –
1 | JUMP b |
– Commands: 9/9 Steps: 27/27 –
PS: 两个数是否相同,用SUB
和JUMPZ
命令在做判断。
Year 14: Maximization Room
– HUMAN RESOURCE MACHINE PROGRAM –
1 | a: |
– Commands: 10/10 Steps: 33/34 –
PS: 判断两个值的大小关系(b-a是否为负,If a < b, then a-b < 0.)后回归原值输出:先将a储存,当a更大时可以直接读取a的值输出,而当b更大时则有b = b-a+a,再用一个ADD
指令即可。
Year 15: Employee Morale Insertion
Year 16: Absolute Positivity
– HUMAN RESOURCE MACHINE PROGRAM –
1 | JUMP c |
– Commands: 8/8 Steps: 34/36 –
PS: 若输入为正数则直接输出,若输入为负数则-a为正数,其中-a = a - a - a。
Year 17: Exclusive Lounge
– HUMAN RESOURCE MACHINE PROGRAM –
1 | a: |
– Commands: 12/12 Steps: 28/28 –
PS: 需要用条件判断跳转语句实现四种条件的判断与跳转(++, +-, -+, and –),a为正时,若b为正则输出0,若b为负则输出1;a为负时,若b为负则输出0,b为正则输出1;
Year 18:Sabbatical Beach Paradise
Year 19: Countdown
– HUMAN RESOURCE MACHINE PROGRAM –
1 | a: |
– Commands: 10/10
Steps: 114/82–
PS: 这一关引入了BUMP+
(BUMPUP)和BUMP-
(BUMPDN)两个指令,这两个指令可以实现对地板上指定位置的数值进行自增或自减,操作完成后更新手中的值和地板上的值。
Year 20: Multiplication Workshop
– HUMAN RESOURCE MACHINE PROGRAM –
1 | a: |
– Commands: 15/15 Steps: 167/109 –
PS: 实现对两个输入值的乘法操作,只需将一个输入的值与另一个输入指定的次数相加即可。
Year 21: Zero Terminated Sum
– HUMAN RESOURCE MACHINE PROGRAM –
1 | a: |
– Commands: 10/10 Steps: 72/72 –
PS: 这一关很直接,将0之前的数字全部相加输出即可。
Year 22: Fibonacci Visitor
– HUMAN RESOURCE MACHINE PROGRAM –
1 | a: |
– Commands: 19/19 Steps: 156/156 –
PS: 一种简单的方法是开辟两个位置来存储斐波那契数列中的最后两个值,相加,然后使用新结果和先前结果更新这两个位置。根据需要重复循环,直到输出值大于输入。为了实现目标,要在循环开始之前输出第一个值。
Year 23: The Littlest Number
– HUMAN RESOURCE MACHINE PROGRAM –
1 | a: |
– Commands: 13/13 Steps: 75/75 –
PS: 略
Year 24: Mod Module
– HUMAN RESOURCE MACHINE PROGRAM –
1 | a: |
– Commands: 11/12 Steps: 53/57 –
PS: 略
Year 25: Cumulative Countdown
– HUMAN RESOURCE MACHINE PROGRAM –
1 | a: |
– Commands: 12/12 Steps: 82/82 –
PS: 略
Year 26: Small Divide
– HUMAN RESOURCE MACHINE PROGRAM –
1 | a: |
– Commands: 15/15
Steps: 76/78–
PS: 略
Year 27: Midnight Petroleum
Year 28: Three Sort
– HUMAN RESOURCE MACHINE PROGRAM –
1 | a: |
– Commands: 34/34 Steps: 78/134 –
PS: 略
Year 29: Storage Floor
– HUMAN RESOURCE MACHINE PROGRAM –
1 | a: |
– Commands: 5/5 Steps: 25/25 –
PS: 略
Year 30: String Storage Floor
– HUMAN RESOURCE MACHINE PROGRAM –
1 | a: |
– Commands: 7/7 Steps: 203/203 –
PS: 实现对两个输入值的乘法操作,只需将一个输入的值与另一个输入指定的次数相加即可。
Year 31: String Reverse
– HUMAN RESOURCE MACHINE PROGRAM –
1 | a: |
– Commands: 11/11 Steps: 121/122 –
PS: 略
Year 32: Inventory Report
– HUMAN RESOURCE MACHINE PROGRAM –
1 | a: |
– Commands: 16/16 Steps: 282/393 –
PS: 略
Year 33: Where is Carol?
Year 34: Vowel Incinerator
– HUMAN RESOURCE MACHINE PROGRAM –
1 | a: |
– Commands: 13/13 Steps: 323/323 –
PS: 略
Year 35: Duplicate Removal
– HUMAN RESOURCE MACHINE PROGRAM –
1 | INBOX |
– Commands: 17/17 Steps: 159/167 –
PS: 略
Year 36: Alphabetizer
– HUMAN RESOURCE MACHINE PROGRAM –
1 | a: |
more clearly version:
1 |
|
– Commands: 36/39 Steps: 75/109 –
PS: 略
Year 37: Scavenger Chain
– HUMAN RESOURCE MACHINE PROGRAM –
1 | a: |
– Commands: 8/8 Steps: 63/63 –
PS: 略
Year 38: Digit Exploder
– HUMAN RESOURCE MACHINE PROGRAM –
1 | a: |
– Commands: 30/30 Steps: 214/165 –
PS: 略
Year 39: Re-Coordinator
– HUMAN RESOURCE MACHINE PROGRAM –
1 | a: |
– Commands: 14/14 Steps: 76/76 –
PS: 略
Year 40: Prime Factory
– HUMAN RESOURCE MACHINE PROGRAM –
1 | COPYFROM 24 |
– Commands: 27/28 Steps: 426/399 –
PS: 略
Year 41: Sorting Floor
– HUMAN RESOURCE MACHINE PROGRAM –
1 | a: |
– Commands: 21/34 Steps: 648/714 –
PS: 略