#!/usr/bin/ruby # start timer # rand rand rand(+-*) # compter bonnes et mauvaises reponses class Quizzer OPERATIONS = [:+, :-, :*, :/] attr_reader :bad_ans, :history def initialize(posonly = false) @posonly = posonly @history = [] end def quizz op = OPERATIONS[rand(OPERATIONS.length)] op1 = 1+rand(10) op2 = 1+rand(10) case op when :/ op1 *= op2 when :- op1, op2 = op2, op1 if @posonly and op2 > op1 end str = "#{op1} #{op} #{op2}" @history << str puts str ans = gets.to_i if ans != op1.send(op, op2) @bad_ans += 1 puts 'NOK' else puts 'OK' end puts end def time_quizz(nr) tstart = Time.now @bad_ans = 0 nr.times { quizz } tend = Time.now puts "resultat:", " erreurs: #@bad_ans sur #{nr}", " duree: #{'%.1f' % (tend - tstart)}s" end end if __FILE__ == $0 q = Quizzer.new(ARGV.shift == 'positive') puts 'Appuyez sur [entree]' gets q.time_quizz(10) end