0%

Human Resource Machine Completion Guide

  • 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
2
3
4
5
6
INBOX   
OUTBOX
INBOX
OUTBOX
INBOX
OUTBOX

– Commands: 6/6 Steps: 6/6 –

PS: 关于输入语句INPUT和输出语句OUTPUT如何使用的教程关卡,可以类比高级语言中的std::cinstd::cout

Year 2: Busy Mail Room

– HUMAN RESOURCE MACHINE PROGRAM –

1
2
3
4
a:
INBOX
OUTBOX
JUMP a

– Commands: 3/3 Steps: 30/25

PS: 关于循环语句JUMP的如何使用的教程关卡,可以类比高级语言中的forwhile等循环控制语句。

Year 3: Copy Floor

– HUMAN RESOURCE MACHINE PROGRAM –

1
2
3
4
5
6
COPYFROM 4 -- 'B"
OUTBOX
COPYFROM 0 -- 'U'
OUTBOX
COPYFROM 3 -- 'G'
OUTBOX

– Commands: 6/6 Steps: 6/6 –

PS: 关于获取指令COPYFROM如何使用的教程关卡,地板可以理解成内存,COPYFROM的作用是从内存中取对应位置的值,本关依次取出地面上对应值输出即可满足两个优化条件。

Year 4: Scrambler Handler

– HUMAN RESOURCE MACHINE PROGRAM –

1
2
3
4
5
6
7
8
a:
INBOX
COPYTO 0
INBOX
OUTBOX
COPYFROM 0
OUTBOX
JUMP a

– Commands: 7/7 Steps: 21/21 –

PS: 关于设置指令COPYTO如何使用的教程关卡,COPYTO的作用是从将当前手中的值设置(拷贝)到内存中对应位置。

Year 5: Coffee Time

Year 6: Rainy Summer

– HUMAN RESOURCE MACHINE PROGRAM –

1
2
3
4
5
6
7
a:
INBOX
COPYTO 0
INBOX
ADD 0
OUTBOX
JUMP a

– Commands: 6/6 Steps: 24/24 –

PS: 关于加法指令ADD如何使用的教程关卡,ADD的作用是从将当前手中的值和地板上指定位置的值相加后替换当前手中的值。

Year 7: Zero Exterminator

– HUMAN RESOURCE MACHINE PROGRAM –

1
2
3
4
5
6
a:
b:
INBOX
JUMPZ b
OUTBOX
JUMP a

– Commands: 4/4 Steps: 23/23 –

PS: 关于条件判断跳转语句JUMPZ如何使用的教程关卡,类似高级语言中的条件判断,若满住当前手中的值为0则跳转执行相应的逻辑。

Year 8: Tripler Room

– HUMAN RESOURCE MACHINE PROGRAM –

1
2
3
4
5
6
7
a:
INBOX
COPYTO 0
ADD 0
ADD 0
OUTBOX
JUMP a

– Commands: 6/6 Steps: 24/24 –

PS: 在没有乘法的世界里,将输入的值相加三次就是乘以三。

Year 9: Zero Preservation Initiative

– HUMAN RESOURCE MACHINE PROGRAM –

1
2
3
4
5
6
7
8
a:
b:
INBOX
JUMPZ c
JUMP b
c:
OUTBOX
JUMP a

– Commands: 5/5 Steps: 28/25

PS: 和第七关刚好相反,只要0,条件判断的简单应用。

Year 10: Octoplier Suite

– HUMAN RESOURCE MACHINE PROGRAM –

1
2
3
4
5
6
7
8
9
10
a:
INBOX
COPYTO 0
ADD 0
COPYTO 1
ADD 1
COPYTO 2
ADD 2
OUTBOX
JUMP 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
2
3
4
5
6
7
8
9
10
11
a:
INBOX
COPYTO 0
INBOX
COPYTO 1
SUB 0
OUTBOX
COPYFROM 0
SUB 1
OUTBOX
JUMP a

– Commands: 10/10 Steps: 40/40 –

PS: 因为需要输出 a-b 和 b-a,所以两个输入都需要存储。

Year 12: Tetracontiplier

– HUMAN RESOURCE MACHINE PROGRAM –

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
a:
INBOX
COPYTO 0
ADD 0
COPYTO 1
ADD 1
COPYTO 2
ADD 2
COPYTO 3
ADD 3
ADD 4
ADD 4
ADD 3
OUTBOX
JUMP 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
2
3
4
5
6
7
8
9
10
11
12
    JUMP     b
a:
COPYFROM 0
OUTBOX
b:
c:
INBOX
COPYTO 0
INBOX
SUB 0
JUMPZ a
JUMP c

– Commands: 9/9 Steps: 27/27 –

PS: 两个数是否相同,用SUBJUMPZ命令在做判断。

Year 14: Maximization Room

– HUMAN RESOURCE MACHINE PROGRAM –

1
2
3
4
5
6
7
8
9
10
11
12
13
a:
INBOX
COPYTO 0
INBOX
SUB 0
JUMPN c
ADD 0
b:
OUTBOX
JUMP a
c:
COPYFROM 0
JUMP b

– 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
2
3
4
5
6
7
8
9
10
11
    JUMP     c
a:
COPYTO 0
SUB 0
SUB 0
b:
OUTBOX
c:
INBOX
JUMPN a
JUMP b

– Commands: 8/8 Steps: 34/36 –

PS: 若输入为正数则直接输出,若输入为负数则-a为正数,其中-a = a - a - a。

Year 17: Exclusive Lounge

– HUMAN RESOURCE MACHINE PROGRAM –

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
a:
INBOX
JUMPN c
INBOX
JUMPN d
b: -- +,+ or -,-
COPYFROM 4 -- Pick up a 0
OUTBOX
JUMP a
c:
INBOX
JUMPN b
d: -- +,- or -,+
COPYFROM 5 -- Pick up a 1
OUTBOX
JUMP 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
2
3
4
5
6
7
8
9
10
11
12
13
14
a:
INBOX
COPYTO 0
b:
c:
OUTBOX
COPYFROM 0
JUMPZ a
JUMPN d
BUMPDN 0
JUMP c
d:
BUMPUP 0
JUMP b

– Commands: 10/10 Steps: 114/82

PS: 这一关引入了BUMP+(BUMPUP)和BUMP-(BUMPDN)两个指令,这两个指令可以实现对地板上指定位置的数值进行自增或自减,操作完成后更新手中的值和地板上的值。

Year 20: Multiplication Workshop

– HUMAN RESOURCE MACHINE PROGRAM –

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
a:
INBOX
COPYTO 0
COPYFROM 9 -- Tile 9 is preloaded with 0
COPYTO 2
INBOX
COPYTO 1
b:
BUMPDN 1
JUMPN c
COPYFROM 0
ADD 2
COPYTO 2
JUMP b
c:
COPYFROM 2
OUTBOX
JUMP a

– Commands: 15/15 Steps: 167/109 –

PS: 实现对两个输入值的乘法操作,只需将一个输入的值与另一个输入指定的次数相加即可。

Year 21: Zero Terminated Sum

– HUMAN RESOURCE MACHINE PROGRAM –

1
2
3
4
5
6
7
8
9
10
11
12
13
14
a:
INBOX
JUMPZ d
b:
COPYTO 0
INBOX
JUMPZ c
ADD 0
JUMP b
c:
COPYFROM 0
d:
OUTBOX
JUMP a

– Commands: 10/10 Steps: 72/72 –

PS: 这一关很直接,将0之前的数字全部相加输出即可。

Year 22: Fibonacci Visitor

– HUMAN RESOURCE MACHINE PROGRAM –

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
a:
INBOX
COPYTO 5
COPYFROM 9 -- '0'
COPYTO 0
COPYTO 1
BUMPUP 0
OUTBOX
b:
COPYFROM 0
COPYTO 2
ADD 1
COPYTO 0
COPYFROM 5
SUB 0
JUMPN a
COPYFROM 2
COPYTO 1
COPYFROM 0
OUTBOX
JUMP b

– Commands: 19/19 Steps: 156/156 –

PS: 一种简单的方法是开辟两个位置来存储斐波那契数列中的最后两个值,相加,然后使用新结果和先前结果更新这两个位置。根据需要重复循环,直到输出值大于输入。为了实现目标,要在循环开始之前输出第一个值。

Year 23: The Littlest Number

– HUMAN RESOURCE MACHINE PROGRAM –

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
a:
INBOX
COPYTO 0
b:
c:
INBOX
JUMPZ e
SUB 0
JUMPN d
JUMP b
d:
ADD 0
COPYTO 0
JUMP c
e:
COPYFROM 0
OUTBOX
JUMP a

– Commands: 13/13 Steps: 75/75 –

PS: 略

Year 24: Mod Module

– HUMAN RESOURCE MACHINE PROGRAM –

1
2
3
4
5
6
7
8
9
10
11
12
13
14
a:
INBOX
COPYTO 0
INBOX
COPYTO 1
COPYFROM 0
b:
SUB 1
JUMPN c
JUMP b
c:
ADD 1
OUTBOX
JUMP a

– Commands: 11/12 Steps: 53/57 –

PS: 略

Year 25: Cumulative Countdown

– HUMAN RESOURCE MACHINE PROGRAM –

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
a:
INBOX
JUMPZ d
COPYTO 1
COPYTO 0
b:
BUMPDN 0
JUMPZ c
ADD 1
COPYTO 1
JUMP b
c:
COPYFROM 1
d:
OUTBOX
JUMP a

– Commands: 12/12 Steps: 82/82 –

PS: 略

Year 26: Small Divide

– HUMAN RESOURCE MACHINE PROGRAM –

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
a:
INBOX
COPYTO 0
INBOX
COPYTO 1
COPYFROM 9
COPYTO 8
b:
COPYFROM 0
SUB 1
COPYTO 0
JUMPN c
BUMPUP 8
JUMP a
c:
COPYFROM 8
OUTBOX
JUMP a

– Commands: 15/15 Steps: 76/78

PS: 略

Year 27: Midnight Petroleum

Year 28: Three Sort

– HUMAN RESOURCE MACHINE PROGRAM –

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
a:
INBOX
COPYTO 0
INBOX
COPYTO 1
INBOX
COPYTO 2
COPYFROM 1
SUB 2
JUMPN c
b:
COPYFROM 2
COPYTO 3
COPYFROM 1
COPYTO 2
COPYFROM 3
COPYTO 1
c:
COPYFROM 0
SUB 1
JUMPN d
COPYFROM 1
COPYTO 3
COPYFROM 0
COPYTO 1
COPYFROM 3
COPYTO 0
d:
COPYFROM 2
SUB 1
JUMPN b
COPYFROM 0
OUTBOX
COPYFROM 1
OUTBOX
COPYFROM 2
OUTBOX
JUMP a

– Commands: 34/34 Steps: 78/134 –

PS: 略

Year 29: Storage Floor

– HUMAN RESOURCE MACHINE PROGRAM –

1
2
3
4
5
6
a:
INBOX
COPYTO 10
COPYFROM [10]
OUTBOX
JUMP a

– Commands: 5/5 Steps: 25/25 –

PS: 略

Year 30: String Storage Floor

– HUMAN RESOURCE MACHINE PROGRAM –

1
2
3
4
5
6
7
8
9
a:
INBOX
COPYTO 24
b:
COPYFROM [24]
JUMPZ a
OUTBOX
BUMPUP 24
JUMP b

– Commands: 7/7 Steps: 203/203 –

PS: 实现对两个输入值的乘法操作,只需将一个输入的值与另一个输入指定的次数相加即可。

Year 31: String Reverse

– HUMAN RESOURCE MACHINE PROGRAM –

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
a:
BUMPUP 14 -- '0' to '1'
b:
INBOX
JUMPZ c
COPYTO [14]
BUMPUP 14
JUMP b
c:
d:
BUMPDN 14
JUMPZ a
COPYFROM [14]
OUTBOX
JUMP d

– Commands: 11/11 Steps: 121/122 –

PS: 略

Year 32: Inventory Report

– HUMAN RESOURCE MACHINE PROGRAM –

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
a:
COPYFROM 14 -- '0'
COPYTO 16
COPYTO 17
INBOX
COPYTO 15
JUMP d
b:
BUMPUP 17
c:
BUMPUP 16
d:
COPYFROM [16]
JUMPZ e
SUB 15
JUMPZ b
JUMP c
e:
COPYFROM 17
OUTBOX
JUMP a

– Commands: 16/16 Steps: 282/393 –

PS: 略

Year 33: Where is Carol?

Year 34: Vowel Incinerator

– HUMAN RESOURCE MACHINE PROGRAM –

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
a:
b:
COPYFROM 5 -- '0'
COPYTO 7
INBOX
COPYTO 6
c:
COPYFROM [7]
JUMPZ d
SUB 6
JUMPZ a
BUMPUP 7
JUMP c
d:
COPYFROM 6
OUTBOX
JUMP b

– Commands: 13/13 Steps: 323/323 –

PS: 略

Year 35: Duplicate Removal

– HUMAN RESOURCE MACHINE PROGRAM –

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    INBOX   
COPYTO 0
a:
OUTBOX
b:
INBOX
COPYTO 12
COPYFROM 14
COPYTO 13
c:
COPYFROM [13]
SUB 12
JUMPZ b
BUMPDN 13
JUMPN d
JUMP c
d:
BUMPUP 14
COPYFROM 12
COPYTO [14]
JUMP a

– Commands: 17/17 Steps: 159/167 –

PS: 略

Year 36: Alphabetizer

– HUMAN RESOURCE MACHINE PROGRAM –

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
a:
b:
c:
d:
COPYFROM 23
COPYTO 22
e: -- read in first word
INBOX
COPYTO [22]
JUMPZ f
BUMPUP 22
JUMP e
f: -- read in second word
COPYFROM 23
COPYTO 22
INBOX
JUMPZ b
g: -- compare letters
COPYTO 21
SUB [22]
JUMPZ i -- if equal, keep going
JUMPN j -- 2nd word comes first
h: -- output first word
COPYFROM [22]
JUMPZ l
OUTBOX
BUMPUP 22
JUMP h
i: -- letters same. output, get next
COPYFROM [22]
OUTBOX
BUMPUP 22
COPYFROM [22]
JUMPZ m
INBOX
JUMPZ a
JUMP g
j: -- write out rest of 2nd word
COPYFROM 21
k:
OUTBOX
INBOX
JUMPZ d
JUMP k
l: -- throw away rest of first word
m:
n:
INBOX
JUMPZ c
JUMP n

more clearly version:

HUMAN RESOURCE MACHINE PROGRAM --
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46

begin:
COPYFROM 23
COPYTO 22
readword1:
INBOX
COPYTO [22]
JUMPZ readword2
BUMPUP 22
JUMP readword1
readword2:
COPYFROM 23
COPYTO 22
INBOX
JUMPZ begin
checkletters:
COPYTO 21
SUB [22]
JUMPZ nextletter
JUMPN writeword2
writeword1:
COPYFROM [22]
JUMPZ tossword2
OUTBOX
BUMPUP 22
JUMP writeword1
nextletter:
COPYFROM [22]
OUTBOX
BUMPUP 22
COPYFROM [22]
JUMPZ tossword2
INBOX
JUMPZ begin
JUMP checkletters
writeword2:
COPYFROM 21
loopword2:
OUTBOX
INBOX
JUMPZ begin
JUMP loopword2
tossword2:
INBOX
JUMPZ begin
JUMP tossword2

– Commands: 36/39 Steps: 75/109 –

PS: 略

Year 37: Scavenger Chain

– HUMAN RESOURCE MACHINE PROGRAM –

1
2
3
4
5
6
7
8
9
10
a:
INBOX
b:
COPYTO 5
COPYFROM [5]
OUTBOX
BUMPUP 5
COPYFROM [5]
JUMPN a
JUMP b

– Commands: 8/8 Steps: 63/63 –

PS: 略

Year 38: Digit Exploder

– HUMAN RESOURCE MACHINE PROGRAM –

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
a:
INBOX
COPYTO 1
COPYFROM 9
COPYTO 3
COPYTO 4
b:
COPYFROM 1
SUB 11
JUMPN c
COPYTO 1
BUMPUP 3
JUMP b
c:
COPYFROM 3
JUMPZ d
OUTBOX
d:
e:
COPYFROM 1
SUB 10
JUMPN f
COPYTO 1
BUMPUP 4
JUMP e
f:
COPYFROM 4
JUMPZ i
g:
OUTBOX
h:
COPYFROM 1
OUTBOX
JUMP a
i:
COPYFROM 3
JUMPZ h
COPYFROM 4
JUMP g

– Commands: 30/30 Steps: 214/165 –

PS: 略

Year 39: Re-Coordinator

– HUMAN RESOURCE MACHINE PROGRAM –

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
a:
COPYFROM 14
COPYTO 0
INBOX
b:
SUB 15
JUMPN c
COPYTO 1
BUMPUP 0
COPYFROM 1
JUMP b
c:
ADD 15
OUTBOX
COPYFROM 0
OUTBOX
JUMP a

– Commands: 14/14 Steps: 76/76 –

PS: 略

Year 40: Prime Factory

– HUMAN RESOURCE MACHINE PROGRAM –

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
    COPYFROM 24
COPYTO 23
BUMPUP 23
a:
INBOX
COPYTO 0
COPYFROM 23
COPYTO 3
b:
BUMPUP 3
COPYFROM 24
COPYTO 2
COPYFROM 0
c:
d:
SUB 3
COPYTO 1
JUMPN b
JUMPZ e
BUMPUP 2
COPYFROM 1
JUMP d
e:
COPYFROM 3
OUTBOX
COPYFROM 2
JUMPZ a
COPYTO 0
COPYFROM 24
COPYTO 2
BUMPUP 0
JUMP c

– Commands: 27/28 Steps: 426/399 –

PS: 略

Year 41: Sorting Floor

– HUMAN RESOURCE MACHINE PROGRAM –

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
a:
b:
BUMPUP 24
INBOX
JUMPZ d
COPYTO [24]
JUMP b
c:
COPYFROM [21]
OUTBOX
COPYFROM [24]
COPYTO [21]
d:
BUMPDN 24
JUMPZ a
COPYTO 21
COPYTO 22
e:
f:
BUMPDN 22
JUMPZ c
COPYFROM [21]
SUB [22]
JUMPN f
COPYFROM 22
COPYTO 21
JUMP e

– Commands: 21/34 Steps: 648/714 –

PS: 略

Year 42: End Program. Congratulations.