30代SEの自由帳

最初のタイトルは頓挫した

ヒューマン・リソース・マシーン 攻略 入社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:ラベル210. sub 7
11. jump_if_zero:ラベル112. 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)。

  

<前:32年目> <目次> <次:35年目>