Ruby技術者認定試験シルバーの勉強用アプリを試作してみた

次のような内部DSLを書いて、メインプログラムを走らせると、ランダムに問題が出題されるアプリを作ってみました。

# -*- encoding: utf-8 -*
problem "範囲演算子の問題" do
  size = 5
  str = Rcert::random_string(size)
  f = rand(size-1)
  l = f + 1 + rand(size-(f + 1))
  description <<-DESC
以下のコードを実行したとき表示されるものを1つ選択してください
DESC
  src <<-SRC
puts "#{str}"[<%= @range %>]
SRC
opts = ["#{f}..#{l}", "#{f}...#{l}"].sort_by {rand}
  answer :range => opts[0]
  option :range => opts[1] 
end

problem "first/shift" do
array = ["Ruby", "Perl", "Python", "PHP"].sort_by {rand}
    description <<-DESC
以下のコードを実行したとき表示されるものを1つ選択してください
DESC
  src <<-SRC
x = #{array} 
  puts x.<%= @method_name %>
  puts x[0] 
SRC
ms = ["first", "shift"].sort_by {rand}
  answer :method_name => ms[0] 
  option :method_name => ms[1] 
end

problem :problem_3 do
array = (1..4).sort_by {rand}
    description <<-DESC
以下のコードを実行したとき表示されるものを1つ選択してください
DESC
  src <<-SRC
a = #{array.inspect} 
b = a
c = b.<%= @method_name %>
puts a.inject {|x, i| x * i} + c
SRC
ms = ["first", "shift"].sort_by {rand}
  answer :method_name => ms[0] 
  option :method_name => ms[1] 
end

こんなの作ってないで、資格試験の勉強しろって話ですが、デモ動画も撮ってみました。

デモ動画