gotagota日記

「面白きことは良きことなり」

『たのしいRuby 第4版』第12章 数値(Numeric)クラス

第12章 数値(Numeric)クラス

模範解答はこちら

(1)

問題

摂氏温度を華氏温度に変換する cels2fahr メソッドを定義しろ、という問題です。

私的解答
def cels2fahr(cels)
  fahr = (9.0 / 5.0) * cels + 32.0
  fahr.to_f
end
1.upto(100) do |i|
  puts cels2fahr(i)
end

模範解答にもある通り、途中の計算結果が浮動小数点数になるように公式の数値を9.0などにするのがポイントかと思います。

(2)

問題

さっきとは逆に、華氏温度を摂氏温度に変換する fahr2cels メソッドを定義しろ、という問題です。

私的解答

def fahr2cels(fahr)
  cels = (5.0 / 9.0) * (fahr - 32.0)
  cels.to_f
end
puts fahr2cels(32)

ポイントは(1)と同じ。

(3)

問題

サイコロを振って出た目を返す dice メソッドを定義しろ、という問題です。

私的解答
def dice
  rand(6) + 1
end
puts dice

0から引数にとった値の手前までの乱数を発生させる rand メソッドを使います。

(4)

問題

サイコロを10回振って出た目の合計を返す dice10 メソッドを定義しろ、という問題です。

私的解答
def dice10
  total = 0
  10.times do
    me = rand(6) + 1
    total += me
  end
  total
end
puts dice10

模範解答は(3)で作った dice メソッドを流用しているのでもっと短かったです。

しかし、サイコロの目だからといって変数名を me にするこのセンスをどうにかせねば。。。

(5)

問題

与えられた引数が素数であるかどうかを調べる prime? メソッドを定義しろ、という問題。

私的解答

と行きたいところですが、あまりの難しさに禿げ上がりそうになったので断念してしまいました。。。

以下、模範解答コピペ

def prime?(num)
  return false if num < 2
  2.upto(Math.sqrt(num)) do |i|
    if num % i == 0
      return false
    end
  end
  return true
end

この問題は、平方根が用いられていることからも高度な数学的知識を要求する問題であろうことが推察されます。

・・・ん?そーでもないのかな?(笑)