プログラミング初心者のために『Human Resource Machine』の解法をアドバイスしてみる(YEAR 1〜YEAR 14)

『Human Resource Machine』を購入
Nintendo Switch版『Human Resource Machine(HRM)』を購入しました。携帯モード時はタッチ、TVモー...

昨日『Human Resource Machine』の記事を書きましたが、私の記事とは全く関係がないと思うんですけども、地味に私のTLで購入者が続出しています。中にはプログラムが初めてという方も結構いて、序盤からかなり苦戦しておられるようなので、序盤の解法をまとめてみました。ただし、答えを全部書くのは全く面白くないので、攻略の参考法だけに留めておきます。考えるのが楽しいゲームですからね。

YEAR 1 運び屋さん

左の箱を何も考えず右に置くだけです。inboxで左のコンベアから箱を持ち、outboxで右のコンベアに置きます。左にある箱の数だけこれを繰り返すように命令をセットすればいいだけです。

YEAR 2 忙しい運び屋さん

では、箱の数が1万個以上だったら?1万個inboxとoutboxを置くことは現実的ではありません。jumpを使います。プログラマーの鉄則は、必要のない同じ命令を繰り返すことを避けることです。総命令数の課題がクリアできない?…jumpも一つの命令ですから。

YEAR 3 コピーのお仕事

左のコンベアに関係なく、真ん中の作業スペースから「B」「U」「G」の箱を右に乗せる課題です。inboxではなくcopyfromを使います。jumpを使って繰り返そうとすると同じ箱しか取り出せないので、ここでは使いません。

YEAR 4 逆にして運んで

左のコンベアの箱の順番を二つ毎に入れ替えて右のコンベアに置く課題です。左のコンベアに上から「ABCDEF」と並んでいれば、右のコンベアに下から「BADCFE」と並び替えて置いていきます。社員は一つしか箱を持てないので、inboxにcopytoを組み合わせて、一旦作業スペースに二つの箱を置いた後にcopyfromからoutboxします。

YEAR 6 真夏の雨

左のコンベアの箱を二つ毎に加算した箱を右のコンベアに置く課題です。左のコンベアに「1、2、3、4」と並んでいれば、答えは「3、7」です。copytoで置いた箱とinboxで持って来た箱をaddしてoutboxします。

YEAR 7 ゼロを取り除け

基本的にはYEAR 2と同じですが、左のコンベアから「0」だけを取り除きます。if zeroを使います。手元の箱が「0」であれば、命令の先頭に戻ればいいだけです。

YEAR 8 当社比300%

左のコンベアの箱の値を無条件に3倍して右のコンベアに置く課題です。ここからそれなりに算数の課題が入って来ます。左のコンベアから取り出した箱の値をaとすると、右のコンベアには3aを置けばいいことになります。掛け算と足し算の関係から、次式が成り立ちます。

$$3a = a + a + a$$

ということで、addで実現できます。

YEAR 9 ゼロだけを残せ

YEAR 7と真逆の処理をします。if zeroを使い、条件を満たさない時にjumpで先頭に戻ればいいだけです。

YEAR 10 3回で8を

ここも簡単な算数です。左のコンベアから取り出した箱の値をaとすると、右のコンベアには8aを置けばいいことになります。

$$2a = a + a$$

より、

$$4a = 2a + 2a$$

が成り立ちます。したがって、

$$8a = 4a + 4a$$

より、3回の計算で値を8倍にできます。

YEAR 11 引き算の結果

左のコンベアの箱の値を二つ毎に減算して右のコンベアに置く課題です。二つの箱をcopytoで作業スペースに置いた後に、適宜copyfromとsubを使ってください。

YEAR 12 40の作り方

左のコンベアから取り出した箱の値をaとすると、右のコンベアには40aを置けばいいことになります。YEAR 10の倍々計算を引き続き行い、

$$16a = 8a + 8a$$

より、

$$32a = 16a + 16a$$

今回は40aを求めればいいので、

$$40a = 32a + 8a$$

計算結果はしっかりとcopytoで保管しておきましょう。

YEAR 13 同じかどうか

左のコンベアの箱の値を二つ毎に比較し、値が同じであればその値を、そうでなければ破棄します。「1、1、2、3、4、4」の場合は、答えは「1、4」です。これはアセンブラでは典型的な比較問題です。このゲームでも、使用できる命令群には二つの値を比較する命令はありません。しかし、複数の命令を組み合わせれば、これを実現できます。一つ目に取り出した箱の値をa、二つ目に取り出した箱の値をbとすると、abが同じ条件は次式を満たす場合に限られます。

$$a-b = 0$$

ここまで書けば、後は煮るなり焼くなり、お好きにどうぞ。

YEAR 14 大は小を兼ねる

左のコンベアの箱の値を二つ毎に比較し、値が大きい方の箱を右のコンベアに運び、そうでない方を破棄します。同じであればどちらをコンベアに運んでも構いません。YEAR 12の応用(?)となる問題です。一つ目に取り出した箱の値をa、二つ目に取り出した箱の値をbとすると、次式を満たすとき、aの方がbより大きいことになります。

$$a – b > 0$$

では、bの方が大きい場合は?

まとめ

これより先は君の目で確かみてみろ!
疲れた。後は全部クリアして気が向けば書きます。ただしあまり書く気はないです。

YEAR 28まで書きました。

プログラミング初心者のために『Human Resource Machine』の解法をアドバイスしてみる(YEAR 14〜YEAR 28)
過去にこんな記事を書いていたのですが、もう少し攻略したので解法のアドバイスを追加で書いていこうかなと。 YEAR 16 必ずポ...
スポンサーリンク
Twitchで動画を配信中です
Twitchは現在オフラインです