ヒューマン・リソース・マシーン 攻略 入社34年目 母音を省け
ここで解説している内容なりヒントなりはあくまで筆者の解法に基づいたものなので、別の考え方ももちろんあるよ。ってのは念頭に置いてください。
課題
左側の文字を右側へ運んでください。
ただし、母音(A,E,I,O,U)は捨ててください。
使用可能な命令
- inbox
- outbox
- copyfrom
- copyto
- add
- sub
- bump+
- bump-
- jump
- jump_if_zero
- jump_if_neg
効率目標
- サイズ:13行
- スピード:323ステップ
ヒント
その1
母音はカーペット上に並んでいるから順番にチェックすれば良い。 行が変わっているから分かり難いけど、"U"の次は0なので終端判断も出来る。
回答例 + 解説
サイズ + スピード
回答例 + 解説
1. jump:ラベル1へ ラベル2:// パネルを右に運ぶ 2. copyfrom 7 3. outbox ラベル1:// 1セットの開始位置 4. copyfrom 5 5. copyto idx 6. inbox 7. copyto 7 ラベル3:// 母音との一致判定 8. copyfrom [idx] 9. jump_if_zero:ラベル2へ 10. sub 7 11. jump_if_zero:ラベル1へ 12. bump+ idx 13. jump:ラベル3へ
カーペット上に配置されている母音と一致しているかをチェックして行けば良い。 行が変わっているから分かり難いが、"U"の次は0なので、終端判定は0で実施
0を取得(copyfrom 5)して、参照位置を初期化(copyto idx)。
その後、左のパネルを拾って(inbox)、比較用に一旦保持(copyto)
終端(=0)になる(jump_if_zero)まで、参照位置の母音を取得(copyfrom [idx])して、保持していたパネルと比較(sub)
一致する場合(jump_if_zero)は次のパネルへ
終端まで一致しなかった場合は保持していたパネル(copyfrom)を右側へ運ぶ(oubbox)
例によって無駄なジャンプが発生しないようにoutboxとinboxがつながるように配置して、初回の無駄処理(初期化より前)は実行しないように飛ばす(jump)。