【11年目~21年目】攻略!ヒューマン・リソース・マシーン(HUMAN RESOURCE MACHINE) #02

この記事では、プログラミングパズルゲーム
ヒューマン・リソース・マシーンの、私の解答を紹介します。

夫や他サイトさんの解答と見比べて、
人によって解き方が違うのが面白かったので、
私の解答も記録として残してみることにしました。

注意事項

  • あくまでへっぽこ元プログラマーの解答です。←ココ大事
  • 効率化目標を達成していないステージもあります。
  • もっとよい解き方があるかもしれないことをご承知おきください。

自分の解答とくらべて、
参考にする(なる?)もよし、
鼻で笑うもよし、
違いを楽しんでいただけたら幸いです。

今回は11年目~21年目までです。
他のステージの解答は下の記事にまとめています。

スポンサーリンク

11年目:引き算の結果

11年目:引き算の結果

「sub」は、手元のデータからカーペット上のデータを減算します。
手元のデータは、減算結果に上書きされ、
カーペット上のデータは、減算前と変わらずそのまま残ります。

12年目:40の作り方

12年目:40の作り方

10年目の応用。
32倍+8倍で40倍を作ります。

カーペットの
0は入力データ、
1は入力データの2倍の値、
2は入力データの4倍の値、
3は入力データの8倍の値、
4は入力データの16倍の値、
を記憶しています。

13年目:同じかどうか

13年目:同じかどうか

2つの値を引き算して、0なら同じ値だと判断できます。

「copyfrom」と「outbox」を上に持って行き、
最初だけスルー(1行目のjump)させると、
「jump」を通過する回数が減って、スピード目標を達成できます。

14年目:大は小を兼ねる

14年目:大は小を兼ねる

「jump if neg」は、
手元のデータがマイナスの場合、指定の場所にJUMPします。
手元のデータが0以上の場合は、次の行を実行します。

2つの値を引き算して、結果がマイナスか否かでどちらが大きいか判定します。

「add」を使い、2つ目のデータを復元することで
2つ目のデータをカーペット上にコピーする1手を減らせます。

スポンサーリンク

16年目:必ずポジティブに

16年目:必ずポジティブに

中学校で習った「負数の引き算」を思い出せるかがカギ。

データがマイナスの場合:1回目のsubで0を作る→1回目のsubでプラスに。
データがマイナスでない(0以上)の場合:そのまま右のコンベアへ。

17年目:同じならゼロ

17年目:同じならゼロ

カーペットの4には0、
カーペットの5には1が入っています。

線がぐちゃぐちゃで見づらいですが、
1つ目のデータを判定した後、
2つ目のデータを判定して、
処理を分岐させているだけです。

1つ目プラス :2つ目プラス  → 0
1つ目プラス :2つ目マイナス → 1
1つ目マイナス:2つ目プラス  → 0
1つ目マイナス:2つ目マイナス → 1

スポンサーリンク

19年目:カウントダウン

  • 「bump +」は、
    カーペット上の数字を+1して、手持ちにもコピーする。
  • 「bump -」は、
    カーペット上の数字を-1して、手持ちにもコピーする。

サイズ目標とスピード目標、別々に達成。

サイズ目標

19年目:カウントダウン(サイズ目標)

6行目の「jump if neg」でカウントアップする場合と
カウントダウンする場合で処理を分けています。

スピード目標

19年目:カウントダウン(スピード目標)

最初にデータがゼロか判定をして、ゼロの場合はそのまま出力。

カウントアップ(ダウン)のループを抜ける条件を
negからzeroにして、最後の余分なbumpを通らないようにしています。

20年目:掛け算のしかた

20年目:掛け算のしかた

この辺りから効率化目標達成が苦しくなってきました。
サイズ目標のみ達成。

Aに1つ目、Bに2つ目のデータを保管。
AをB回Ansに足しています。

スポンサーリンク

21年目:ゼロが区切り

サイズ目標

21年目:ゼロが区切り(サイズ目標)

スピード目標

21年目:ゼロが区切り(スピード目標)

1件目が0だった時の処理を追加しています。

他のステージの解答

行数の多いステージの画像が見にくくて申し訳ありません。
拡大してなんとか見ていただければと思います。

他のステージの解答は下の記事にまとめています。

 

タイトルとURLをコピーしました