トラック
/
Ruby
Ruby
/
演習
/
組み立てライン
組み立てライン

組み立てライン

学習演習

はじめに

数値

Rubyでよく使われる数値の型は、次の2つです。

  • 整数: 小数点以下の桁がない数値(つまり整数)です。例としては-6、0、1、25、976、500000などがあります。
  • 浮動小数点数: 小数点以下の桁が1つ以上ある数値です。例としては-2.4、0.1、3.14、16.984025、1024.0などがあります。

これらはIntegerクラスとFloatクラスで実装されています。

これらのクラスには、値を一方から他方へ変換するメソッドがあります。Integerの数値は整数単位で正確ですが、Floatの精度は整数に対する小数になります。

  • Integer#to_f: 新しい浮動小数点数に変換します
  • Float#ceil: 最も近い整数に切り上げます
  • Float#floor: 最も近い整数に切り下げます
  • Float#round: 最も近い整数に丸めます
  • Float#to_i: 最も近い整数に切り捨てます

条件分岐

Rubyには、制御フロー式と呼ばれるものがあります。これはプログラムの実行の仕方を制御するために使われ、真とみなされる値か偽とみなされる値をとります。 真とみなされる値や偽とみなされる値を作るために使える演算子があり、これらは比較演算子と呼ばれます。

どのコードが実行され、どれが実行されないかを制御する主な制御式が2つあります。言い換えると、どの分岐が実行されるかです。

その2つとは、if式とunless式です。

比較演算子

比較演算子は、値を比較してtrueまたはfalseを返すために使われます。 以下の演算子は、比較する2つの値が同じ型であることを必要とします。 値が同じ型でない場合、コンパイラーはエラーを投げます。 演算子の一覧と、trueを返す例を次に示します:

メソッド 説明 例
< より小さい 4 < 5
<= 以下 4 <= 4
> より大きい 3 > 1
>= 以上 2 >= 2

等しい・等しくない演算子は、すでに説明した演算子とは異なり、どのような型の値でも比較できます。 ==演算子は、2つの値が等しいかどうかを確認するために使われ、値の型の確認も含まれます。 !=も同じように動作しますが、値が等しくない場合はtrueを返し、等しい場合はfalseを返します。 等しい・等しくない演算子の一覧と、trueを返す例を次に示します:

メソッド 説明 例
== 等しい 4 == 4
!= 等しくない 5 != 4

if文

if文は、与えられた条件が「真とみなされる」か「偽とみなされる」かを確認するために使われます。 条件が真とみなされる場合、if文の中のコードが実行されます。 if文はendキーワードで終わります。

value = 1
if value == 1
  "1 is equal to 1"
end
# => "1 is equal to 1"

if value > 2
  "1 is greater than 2"
end
# => nil

unless文

unless文はif文とよく似た動作をしますが、条件が偽とみなされる場合にunless文の中のコードを実行します。

value = 1
unless value == 1
  "1 is not equal to 1"
end
# => nil

unless value > 2
  "1 is not greater than 2"
end
# => "1 is not greater than 2"

else文

else文はif文と組み合わせて使うことができます。 else文は、ifの分岐が実行されない場合に実行されます。

value = 1
if value == 1
  "1 is equal to 1"
else
  "1 is not equal to 1"
end
# => "1 is equal to 1"

「ifの連鎖」文

elsif文はif文と組み合わせて使うことができます。 elsif文は、ifの分岐が実行されず、かつelsif文の条件が真とみなされる場合に実行されます。 elsif文は連鎖させることができ、最初に真とみなされた条件が実行されます。 if文の最後にelse文を置くこともでき、それより前のどの文も真にならなかった場合に実行されます。

value = 1
if value != 1
  "1 is not equal to 1"
elsif value > 2
  "1 is greater than 2"
else
  "1 is not equal to 1 and 1 is not greater than 2"
end
# => "1 is not equal to 1 and 1 is not greater than 2"

説明

この演習では、自動車工場の組み立てラインの生産を分析するコードを書きます。 組み立てラインの速度は、0(停止)から10(最大)まで設定できます。

最も遅い速度(1)では、1時間に221台の車が生産されます。 生産量は速度に比例して増加します。 そのため、速度を4に設定すると、1時間に4 * 221 = 884台の車を生産することになります。 ただし、速度が上がるほど、欠陥のある車が生産される可能性が高くなり、そうした車は廃棄しなければなりません。 次の表は、速度が成功率にどのように影響するかを示しています。

  • 1から4:成功率100%。
  • 5から8:成功率90%。
  • 9:成功率80%。
  • 10:成功率77%。

タスクは2つあります。

1. 1時間あたりの生産率を計算する

AssemblyLine#production_rate_per_hourメソッドを実装して、成功率を考慮した組み立てラインの1時間あたりの生産率を計算します。 戻り値はFloatのインスタンスであることに注意してください。

AssemblyLine.new(6).production_rate_per_hour
#=> 1193.4

2. 1分あたりに生産される完成品の数を計算する

AssemblyLine#working_items_per_minuteメソッドを実装して、1分あたりに完成した、正常に動作する車が何台生産されるかを計算します。 戻り値はIntegerのインスタンスであることに注意してください。

AssemblyLine.new(6).working_items_per_minute
#=> 19
GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
Ruby Exercism

組み立てラインを始める準備はできましたか?

Exercismに登録すれば、21個のコンセプト121個の演習、そして本物の人間によるメンタリングとともに、Rubyを学んでマスターできます。すべて無料です。