30代SEの自由帳

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

ヒューマン・リソース・マシーン 攻略 入社35年目 ダブりを省け

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

課題

入力側のデータを出力側に運んでください。ただし、重複したデータは破棄してください。

使用可能な命令

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

効率目標

  • サイズ:17行
  • スピード:167ステップ

ヒント

その1

考え方は34年目とさして変わらない。
初めからテーブルが存在しているか。自分でテーブルを作るかの違い。

その2

運んだパネルでテーブルを作れば良い。
終端判断は[32年目]と同じ考え方。

回答例 + 解説

サイズ + スピード

回答例 + 解説

1. inbox
ラベル2// テーブルに保持して運ぶ
2. copyto [14]
3. outbox
ラベル1// 1セットの開始位置
4. copyfrom 14
5. copyto idx
6. inbox
7. copyto 13
ラベル3// テーブルとの比較を繰り返す
8. sub[idx]
9. jump_if_zero:ラベル110. bump- idx
11. jump_if_neg:ラベル412. copyfrom 13
13. jump:ラベル3// ラベル4
14. bump+ 14
15. copyfrom 13
16. jump:ラベル2

考え方自体は34年目と同じ。34年目は初めからテーブル用意されているが、今回は自分で運んだパネルのテーブルを作る。
テーブルは可変長となるが、可変長に対する処理は[32年目]と同じ考え方。

最初のパネル(inbox)は、絶対に重複しないので、即テーブル登録(copyto) + 右へ運ぶ(outbox)
テーブルの最終登録位置(copyfrom 14)を取得して、参照位置を初期化(copyto idx)し、 次のパネルを拾って(inbox)、比較用に一旦保持(copyto)
テーブルの参照位置の内容と比較(sub)して、一致している場合(jump_if_zero)は次のパネルへ
一致していない場合は、参照位置を更新(bump-)して、テーブル範囲を抜ける(jump_if_neg)までパネル(copyfrom)とテーブルの内容の比較を繰り返す(jump) 最後まで一致せずにテーブルを抜けた場合は、テーブルの登録位置を更新(bump+)し、パネルを登録(copyto)してから運ぶ(outbox)

  

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