2021/10/12

ヒューマン・リソース・マシーン 入社10年目−3回で8を

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 件のコメント:

コメントを投稿

ヒューマン・リソース・マシーン 入社41年目−並べ替えよ

目次 1)課題 0を終端とした文字列がいくつか流れてきます。各文字列に対してソート(並べ替え)を行い、小さい順(昇順)に右側へ運んでください。 2)状況の確認 この問題では, 予めコードが入っています. このコードを実行して, 何をするコードなのか確かめます.  左のコンベアから...