ヒューマン・リソース・マシーン 攻略 入社13年目 同じかどうか
ここで解説している内容なりヒントなりはあくまで筆者の解法に基づいたものなので、別の考え方ももちろんあるよ。ってのは念頭に置いてください。
課題
左側の数値2つごとに同値か否か判断してください。
同値である場合、その値を1つ右側に運んでください。同値ではない場合は、捨てちゃってください。
使用可能な命令
- inbox
- outbox
- copyfrom
- copyto
- add
- sub
- jump
- jump_if_zero
効率目標
- サイズ:9行
- スピード:27ステップ
ヒント
その1
同値ということは、A = B これを式変換(移項)するとどうなる?
その2(スピード目標)
[9年目]のスピード目標と同じ発想。 スピード目標を考えるときは良く使う発想なのかも。
回答例 + 解説
サイズ + スピード
回答例 + 解説
- jump:①へ
- ②
- copyfrom 0
- outbox
- ①
- inbox
- copyto 0
- inbox
- sub 0
- jump_if_zero:②へ
- jump:①へ
同値ということはA-B=0なので、2つを減算して0の時だけ右側に運べば良い。
この時、手元のパネルは計算結果(=0)なので、保持していたパネルを手元に用意するのを忘れずに。
左のパネルをとって(inbox)、比較用に一旦保持(copyto)、
次のパネルをとって(inbox)、一致するか減算(sub)で判定。
一致(=0)している場合(jump_if_zero)、保持していたデータを手元にコピーして(copyfrom)、右側に運ぶ(outbox)
一致していない場合はinboxに戻る(jump)。
この時、[9年目]と同様に無駄なジャンプが発生しないようにoutboxとinboxがつながるように配置して、初回のoutboxは実行しないように飛ばす。