たし算ジェネレータ

下記テキストをtasizan.rtxtとして保存。「erb tasizan.rtxt」で実行できる。

たし算ドリル

次のたし算を計算しなさい。制限時間は3分です。

<% 10.times do |i| %>
<% n = i + 1 %>
<% a = rand(10) %>
<% b = rand(10) %>
(第<%= n %>問) <%= a %> + <%= b %> = <%= a + b %>
<% end %>

うわ、これじゃ無駄な空行入りまくり(追記:erbコマンドに「-T 2」を渡せば無駄な改行はなくなる。ERB.newの場合はtrim_modeを2にする)。HTMLにすれば空行を無視できるけど、HTMLのタグが入ると<% 〜 %>が見えにくくなるんだよなあ。文字の濃さや色を工夫すれば読みやすくなるかなあ。あと、これだと答えも一緒に出力されてしまう。答えは配列に積んで、あとでeachで回して出力するべき。

HTML版。Rubyコードを差別化するために、HTMLタグは大文字にしてみた。どうかな。

<HTML>
<BODY>
<H1>たし算ドリル</H1>

<P>次のたし算を計算しなさい。制限時間は3分です。</P>

<% 10.times do |i| %>
  <% a = rand(10) %>
  <% b = rand(10) %>
  (第<%= i + 1 %>問) <%= a %> + <%= b %> = <%= a + b %><BR />
<% end %>

</BODY>
</HTML>

思ったより複雑にならなかった。わりといい気がする。

答えを別で出力するバージョン。上記からここへの流れで解説すればいい気がする。

<HTML>
<BODY>
<H1>たし算ドリル</H1>

<P>次のたし算を計算しなさい。制限時間は3分です。</P>

<H2>問題</H2>
<% answers = [] %>
<% 10.times do |i| %>
  <% a = rand(10) %>
  <% b = rand(10) %>
  <% answers << a + b %>
  (第<%= i + 1 %>問) <%= a %> + <%= b %> = <BR />
<% end %>
        
<H2>答え</H2>
<% answers.each_with_index do |a, i| %>
  (問<%= i + 1 %>) <%= a %><BR />
<% end %>
          
</BODY>
</HTML>

うん、このHTMLを使ったサンプルはいいかもしれない。これをRubyコードに埋め込もうとするとちょっと面倒なことになりそうだから、これにはERBを使うメリットが現れている。

HTMLバージョーン1の出力結果を張っておく。

<HTML>
<BODY>
<H1>たし算ドリル</H1>

<P>次のたし算を計算しなさい。制限時間は3分です。</P>




  (第1問) 4 + 9 = 13<BR />



  (第2問) 1 + 8 = 9<BR />



  (第3問) 1 + 3 = 4<BR />



  (第4問) 0 + 3 = 3<BR />



  (第5問) 4 + 6 = 10<BR />



  (第6問) 9 + 4 = 13<BR />



  (第7問) 7 + 0 = 7<BR />



  (第8問) 7 + 6 = 13<BR />



  (第9問) 3 + 2 = 5<BR />



  (第10問) 5 + 2 = 7<BR />


</BODY>
</HTML>