久しぶりに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}" # 終わり