1)課題
左側の数値を2つごとに、判断を行い、2つの数字のプラスorマイナスが同じ場合は「0」を違う場合は「1」を右側に運んでください。
2)考え方
2つの数値で掛け算をして, 結果がプラスなら同じ, マイナスなら異なると判断できますが, ヒューマン・リソース・マシーンでは掛け算を使えません. 一つずつ解決していきます.
まず, 左のコンベアから1枚目のパネルを取り出し, プラスかマイナスかを判定します.
- プラスの場合, 2枚目のパネルを取り出し, プラスかマイナスかを判定します.
プラスなら「0」,
マイナスなら「1」
を右のコンベアに運びます. - マイナスの場合, 同じように2枚目のパネルを判定します.
プラスなら「1」,
マイナスなら「0」
を右のコンベアに運びます.
この考え方に従い, 課題を解決していきます.
3)実装
左のコンベアからパネルを取り出し, 数値がプラスかマイナスかを判定します. JUMP if negativeコマンドを使えばマイナスであるかを判定できます. JUMP if negativeコマンドを使って条件分岐を作っていきますが, 構造が複雑になるためラベルを使います. また, ゴールを明確にするために, 出力するコードを作ります.
数値の正負が同じなら「0」, 違うなら「1」を右のコンベアに運びます.
続けて, 左のコンベアからパネルを取り出し, その正負を判定します. 1枚目のパネルの名前を「A」とします.
「A」がプラスの場合, 左のコンベアからパネルを取り出し, その正負を判定します. 2枚目のパネルの名前を「B」とします. 「B」がプラスなら「同じ」へ, マイナスなら「ちがう」へジャンプさせています.
同様にして, 「A」がマイナスの場合, 左のコンベアから2枚目のパネル「B」を取り出し, その正負を判定します.「B」がプラスなら「ちがう」へ, マイナスなら「同じ」へジャンプさせています. 「B」がマイナスの場合のJUMPコマンドは要りませんが, 対称性を尊重しています.
ここまでできれば課題をクリアーできます. 分かりやすさを優先してプログラムを作成したので, サイズ目標, スピード目標共に達成できていません.
0 件のコメント:
コメントを投稿