久しぶりにRubyを使ってみる

SPIで食塩水の濃度を出す練習用のスクリプトを書いてみました。下のように、かなり怪しい出題をしますがw

155gの水に95gの食塩を完全に溶かしたとき、この食塩水の濃度はいくらか?
95 / (95 + 155) * 100 = ?
#!/usr/bin/ruby

# 100 * 塩の量 / 水溶液の量 で割り切れる塩の量のリストを求める関数
def mod_0(water, saltmax)
  list = []
  (saltmax-1).downto(50) {|salt|
    solution = water + salt
    if (salt * 100) % solution == 0 then
      list << salt
    end
  }
  list
end

# 問いの生成
list = []
while list.length == 0
  # 2から22の乱数
  seed_water = rand(20) + 2
  # まず水の量を (100 + 5 * 2から22の乱数) で求める
  water = 100 + 5 * seed_water
  # 100 * 塩の量 / 水溶液の量 で割り切れる塩の量のリストを求める
  list = mod_0(water,water)
  #p list
end

# 塩の量リストから一要素選択する
salt = list[rand(list.length-1)]

# 問題文の出力
puts "#{water}gの水に#{salt}gの食塩を完全に溶かしたとき、この食塩水の濃度はいくらか?"

# ヒントの出力
puts "#{salt} / (#{salt} + #{water}) * 100 = ?"

# 解答を受け付ける
answer = $stdin.gets.to_i

# 正解を計算
correct = (salt / (water + salt).to_f * 100)

# 正解の四捨五入したものと解答が一致していれば"Correct!"と表示する
if answer == (correct + 0.5).to_i
  puts "Correct!"
else
  puts "Incorrect."
end

# 正解・不正解に関わらず、解き方の式を出力する
puts "The correct answer is #{salt} / #{salt+water} * 100 = #{correct} =~ #{(correct+0.5).to_i}"

# 終わり