30代SEの自由帳

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

ヒューマン・リソース・マシーン 攻略 入社37年目 次へつなげよ

ここで解説している内容なりヒントなりはあくまで筆者の解法に基づいたものなので、別の考え方ももちろんあるよ。ってのは念頭に置いてください。

課題

6つのデータペアが配置されている。右側の数値は次のペアの位置番号です。
右側の各数値に対し、数珠つなぎにペアをたどり、その際に通過したペアの左側の文字を右側に運んで下さい。
右側の数値がマイナスの場合、数珠つなぎは終了です。

使用可能な命令

  • inbox
  • outbox
  • copyfrom
  • copyto
  • add
  • sub
  • bump+
  • bump-
  • jump
  • jump_if_zero
  • jump_if_neg

効率目標

  • サイズ:8行
  • スピード:63ステップ

ヒント

その1

問題文を命令に置き換えるだけ。

その2

次の参照位置は運んだ文字の右側にあるので、単純に参照位置を右にずらす(→+する)だけ

回答例 + 解説

サイズ + スピード

回答例 + 解説

ラベル1// 1セットの開始位置
1. inbox
ラベル2// 対象の文字を運ぶ
2. copyto idx
3. copyfrom [idx]
4. outbox
5. bump+ idx
6. copyfrom [idx]
7. jump_if_neg:ラベル18. jump:ラベル2

問題文を命令に置き換えるだけ。

パネルを拾って(inbox)、参照位置として保持(copyto idx)
参照位置の文字を取得(copyfrom [idx])して、右へ運ぶ(outbox)
次の参照位置を取得(bump+)し、マイナスなら(jump_if_neg)なら次のパネルへ
マイナスじゃなければ、次のカーペット上の文字へ(jump)

  

<前:36年目> <目次> <次:38年目>