【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をコピーしました