1)課題
左側の数値を8倍にして右側に運んでください。
[ADD]をたくさん使えば、課題自体は簡単ですが、効率が悪いです。[ADD]の使用回数は3回でいけるハズです。考えてみましょう。
2)解説
ADDコマンドを7回使えば数値を8倍にできますが, 問題文にある通り効率が良くありません. 問題文には, ADDコマンドの使用回数は3回で良い, と書いてあります. 勘の良い人であれば, 2の3乗は8になることに気づくと思います. ヒューマン・リソース・マシーンのコマンドを組み合わせて, 8倍にする方法を探してみます.
左側のコンベアからパネルを取り, カーペットの0番と1番に置きます. 続けて, カーペットの1番に対してADDコマンドを実行し, その結果をカーペットの1番に置きます. カーペットの0番にパネルを置いた理由は, パネルの初期値を保存しておけば, 動作の確認がしやすくなるからです. このコードを実行することで, 左側のコンベアから取り出したパネルを2倍にできました. これを続けます.
ADDコマンドとCOPYTOコマンドを追加しました. これにより, 7を4倍した28になりました.
この組み合わせをもう一つ追加すれば, 8倍にできます. ここまでできれば, もう少しでプログラムが仕上がります.
課題をクリアーするために, OUTBOXコマンドで持っているパネルを右側のコンベアに運び, JUMPコマンドで先頭に戻るようにしました.
サイズ目標とスピード目標を達成できていません. 無駄なコマンドを取り除き, プログラムを最適化します. 2行目と9行目のCOPYTOコマンドは, 説明のために入れたコマンドですので, 取り除いてもプログラムの実行結果に影響を与えません.
サイズ目標である9行に収まりました.
サイズ目標とスピード目標の両方を達成できました.
0 件のコメント:
コメントを投稿