2021/11/04

ヒューマン・リソース・マシーン 入社20年目−掛け算のしかた

 


1)課題

左側の数値2つごとに、掛け算を行った結果を右側へ運んでください。この課題では0以上の数値だけが運ばれてきます。

「ラベル」が使えるようになりました。うまく活用し、各場所の用途を忘れない様にメモしておきましょう。

2)掛け算のしかた

この課題では, 2枚のパネルの掛け算をします. パネルには1桁の数字しか書いていないようなので, 九九を習っていれば暗算で答えてしまえます.しかし, ヒューマン・リソース・マシーンの世界で使えるのは足し算と引き算だけなので, これらを使って掛け算をする方法を考えます.

ここで, 例として5×4を考えてみます.足し算を使って5×4を表現すると次のようになります.

5×4=5+5+5+5

つまり, 5を4回足し合わせるということです.

「5を4回足す」に相当するコマンドがありませんので, この計算をもう少し分解します. 5に掛けてある4を1つ減らし, 代わりに5を加えるようにします. 次のように式を変形できます.

5×4=5×3+5
5×4=5×2+5+5
5×4=5×1+5+5+5
5×4=5×0+5+5+5+5
5×4=5+5+5+5

「5+5+5+5」を計算できれば掛け算の答えが得られるのですが, ヒューマン・リソース・マシーンで「5+5+5+5」を扱う方法が見つからないので, 別の方法を考えます. 「5+5+5+5」と足し算を並べる代わりに, その都度, 5を足しこめば良さそうです.

5×4=5×3+5
5×4=5×2+10
5×4=5×1+15
5×4=5×0+20
5×4=20

このようにすれば,ヒューマン・リソース・マシーンで使えるコマンドだけで「5×4」を計算できそうです. しかし, プログラムにするためには,上の式の1行目をもう少し丁寧に書く必要があります. 

5×4=5×4+0
5×4=5×3+5
5×4=5×2+10
5×4=5×1+15
5×4=5×0+20

等号の右側には3つの数字が現れています. それぞれの数字にラベルを付けます.

  • 5のまま変化しない数字を「A」とします.
  • 4, 3, 2, 1, 0と減っていく数字を「B」とします.
  • 0から始まって5ずつ増え, 最終的に掛け算の答えとなる数字を「こたえ」とします.

ここまで書ければ, プログラムを作る準備が整いました. 

3)プログラムをつくる

上で考えたアルゴリズムからプログラムを作っていきます. この問題から, ラベルを使えるようになりました. カーペットにラベルを付けて, 数字の意味を思い出せるようになります. 

カーペットにラベルを付けました. 

  • カーペットの0番を「A」とします.
  • カーペットの1番を「B」とします.
  • カーペットの2番を「こたえ」とします.

元々あったラベルの使い方を説明するコードを取り除きます. 左のコンベアからパネルを取り出し, 掛け算をする準備をします. 左のコンベアから取り出したパネルをそれぞれ, 「A」と「B」とラベルを付けたカーペットに置きます. また, 「こたえ」には0を置き, 初期化します.

7行目以降に, 「B」が0になるまで「A」を「こたえ」に足し込むコードを書きました. 図は, 確認のためにプログラムを実行した結果です. プログラムを開始した時, 「B」は4だったので, 「こたえ」が期待通りの20になっています. 


続けて, 「B」が0となった時, 「こたえ」を右のコンベアに運ぶコードを追加しました. JUMP if zeroコマンドを実行する前に, COPYFROMコマンドを使って「B」のパネルを持ちます. また, 16行目のJUMPコマンドですが, 図では途切れていますが先頭に戻っています. このプログラムを実行すると, 課題をクリアーできます.

コードを1行減らせばサイズ目標を達成できますが, スピード目標はかなり頑張らないと達成できそうにありません. プログラムを実行している様子を見ていると, 「A」が0の時にも「B」回, 「こたえ」に0を足し込んでいます. 「A」が0なら掛け算の結果も0ですから, もっと工夫できそうです.

0 件のコメント:

コメントを投稿

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

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