30代SEの自由帳

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

ヒューマン・リソース・マシーン 攻略 入社11年目 引き算の結果

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

課題

左側のパネル2つごと(A,B)に、2つのパネルを右に運んでください。
その際、1つめは(B-A),2つめが(A-B)になるように運んでください。

使用可能な命令

  • inbox
  • outbox
  • copyfrom
  • copyto
  • add
  • sub
  • jump
  • jump_if_zero

初出命令

  • sub
     手元のパネルから、指定した番号のカーペット上にあるデータを減算する。  
    上に何も乗っていないカーペットを指定すると?  上司に怒られてお仕事中断(終了)。  
     
    パネルを手に持っていない状態で実施すると?  上司に怒られてお仕事中断(終了)。  

効率目標

  • サイズ:10行
  • スピード:40ステップ

ヒント

その1

2つの数字を使う必要があるから、2つとも別々のところに退避しよう。

回答例 + 解説

サイズ + スピード

回答例 + 解説

ラベル1// 1セットの開始位置
1. inbox
2. copyto 0
3. inbox
4. copyto 2
5. sub 0
6. outbox
7. copyfrom 0
8. sub 2
9. outbox
10. jump:ラベル1

左のパネル(A)をとって(inbox)、一旦保持(copyto)
次のパネル(B)をとって(inbox)、一旦保持(copyto)
Bは既に手に持った状態なので、保持しておいたAを減算(sub)して、右側に運ぶ(outbox)
A-Bをするために、保持しておいたAを拾って(copyfrom)、Bを減算(sub)して、右側に運ぶ(outbox)
これを1セットとして、ひたすらに繰り返す(jump)

  

<前:10年目> <目次> <次:12年目>