Kodama's home / tips.

脳を鍛える計算ドリル(問題作成 ruby スクリプト)

これで, PC 上でいつでも納得ゆくまで計算ドリルができる!

簡単な和,差,積,商などの計算問題を素早く繰り返し行うだけで脳を活性化させることができるらしい. 以下のスクリプトは, 100問の計算問題を作成しコンソールに表示, 又は, 印刷用の LaTeX 文書を出力する.

和,差,積のうち単独の計算に的をしぼるなら 100マス計算 を使う.

使用法

ruby 言語 が必要です. Ruby もインストールしちゃって下さい. プログラミングの練習にもなります.

スクリプトをそのまま実行すると ターミナルに 4列 25行で計100問の問題が表示される. 縦に25問ならぶので, 縦方向に計算してゆく. 実行するターミナルは文字を大きめにしておくと良い. 画面上での目視で計算を行う. (コンソール上で解の入力まで行うのは困難なので...)

LaTeX 用の出力を用いて紙に印刷しても良いだろう. コンソール出力と LaTeX 出力の切替えは,スクリプト中の変数の書き換えで行う.

できるだけ素早く計算する. 所要時間のとりあえずの目標としては, 1セット(100問)で 2分程度. 早い人は 1分程度でできるらしい.

一日あたり, 3〜4セットこのドリルを行う.

実行例

所要時間も表示してみた. calc-ex.rb が問題作成の本体. 他の部分は所要時間を調べるための飾り.
$ echo;d1=`date +'%s'`;./calc-ex.rb;read;d2=`date +'%s'`;echo "elapsed: `expr $d2 - $d1` sec"
    (Enter キーを打鍵)

 5 × 5 =       5 + 6 =      24 ÷ 3 =      63 ÷ 7 =      
 6 − 3 =       5 × 9 =      32 ÷ 8 =      10 − 4 =      
 4 × 9 =       2 + 2 =       9 × 9 =      12 − 8 =      
....略
14 ÷ 7 =      16 − 8 =       5 × 6 =       9 + 5 =      
 3 × 5 =      13 − 5 =      10 − 3 =      16 − 9 =      
 6 + 5 =       6 × 9 =       2 + 7 =       8 × 5 =      
    (Enter キーを打鍵)

elapsed: 145 sec
    (経過時間を表示)

Ruby スクリプト

#!/usr/local/bin/ruby 
# calc-ex.rb
# K.Kodama 2004-08-10.
#
# Usage1: ./calc-ex.rb
# Usage2: echo;d1=`date +'%s'`;./calc-ex.rb;read;d2=`date +'%s'`;echo "elapsed: `expr $d2 - $d1` sec"

Tbl=[[],[],[],[]]

def tbl_init(t)
	Tbl[t]=Array.new;
	if t==0 or t==1 then base=1 # 和/差
	else base=2  # 積/商
	end;
	for a in base..9;
		for b in base..9;
			Tbl[t].push([a,b]);
		end;
	end;
end;

def ex1(t=rand(4))
	# t= dafault(和/差/積/商 混合), 0(和), 1(差), 2(積), 3(商)
	fmt="%2d %s %d";
	if Tbl[t].size==0; tbl_init(t); end;
	a,b=Tbl[t].delete_at(rand(Tbl[t].size))
	if t==0; return sprintf(fmt, a, "+", b)
	elsif t==1; return sprintf(fmt, a+b, "−", a)
	elsif t==2; return sprintf(fmt, a, "×", b) 
	else return sprintf(fmt, (a*b) + rand(b), "÷", b)
	end;
end;

def ex(n=4,r_func=proc{rand(4)})
	# 問題数 25n. コンソール出力用
	25.times{n.times{printf("%s =      ",ex1(r_func.call))}; print "\n"}
end;

def tex_100(r_func=proc{rand(4)})
	#  LaTeX A4 版, 100問
	print "\\documentclass[a4j]{jarticle}\n\\begin{document}\\pagestyle{empty}\\Large 計算練習.\\vfill\n"
	print "\\begin{tabular}{"+"r@{ =\\hspace*{10mm}}"*4+"}\n"
	25.times{s=""; 4.times{printf("%s%s",s,ex1( r_func.call )); s=" & "};print "\\\\\n"}
	print "\\end{tabular}\\vfill\n"
	print "\\hfill\\underline{日付\\hspace*{2cm}}\\underline{所要時間\\hspace*{1cm}分\\hspace*{1cm}秒}\n"
	print "\\end{document}\n"
end;

srand;

s="r4.100"

case s
when "tex.r4.100" then	### 100問 混合(和/差/積/商)  LaTeX A4 版
	tex_100(proc{rand(4)})
when "tex.r3.100" then	### 100問 混合(和/差/積) LaTeX A4 版
	tex_100(proc{rand(3)})
when "tex.e2.100" then	### 100問 かけ算  LaTeX A4 版
	tex_100(proc{2}) 
when "r4.100" then ### 100問 混合(和/差/積/商)
	ex(4,proc{rand(4)})
when "r3.100" then ### 100問 混合(和/差/積)
	ex(4,proc{rand(3)})
when "e2.50" then ### 50問 かけ算
	ex(2,proc{2})
end;

# end of the script.

参考


Kodama's home / tips.