2021/11/16

ヒューマン・リソース・マシーン 入社24年目−あまりはいくつ?

1)課題

左側の数値2つ(A, B)ごとに割り算(A÷B)を行い、その剰余(あまり)を右側へ運んで下さい。実際に割り算をする必要はありません。割り算の意味を改めて考えてみましょう。

この課題ではマイナス値は出ません。また、2つ目の数字に0が来る事はありません。

2)解説

入社20年目で掛け算をしました. A×Bを計算するために, 0から始めて, AをB回加えました. この課題ではA÷Bを行い, 余りを求めます. 考え方としては, 掛け算と逆にAからBを引き続ければ答えに近づけそうです. まず, 例として8÷3を考えてみます. 

「A」に8, 「B」に3を配置し, 「A」から「B」を引いた結果を「A」に配置していきます.

  A  B
  8 3
  5 3
  2 3
 ―1 3

4行目で「A」が負の数となりました. 8÷3の余りは2ですから, 4行目の一つ上にある3行目の「A」の値2が求める答えです. プログラムでは, 「Aがマイナスになる一つ手前」とは言えません. 代わりに, 「AがマイナスになったらBを加え, その結果が求める余り」とします. 

問題文にあるように, 負の数や「B」が0となることはありませんので, これ以上, 考える必要は無さそうです. この考えに従いプログラムを作ります.

1行目から4行目で, 左のコンベアから取ったパネルをカーペットに配置しています. 5行目と6行目で「A-B」を計算し, 結果がマイナスになったか判定しています. マイナスの場合, 10行目にジャンプし, 「B」の値を加えて右のコンベアに運びます. マイナスでない場合, 8行目で引き算した結果を「A」にコピーして, 6行目に戻ります. このプログラムを実行すると課題をクリアーできます.

サイズ目標, スピード目標共に達成できました. プログラムを最適化すると, これらの目標を下回ることができます.

目次

0 件のコメント:

コメントを投稿

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

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