暗算強化月間

 暗算が苦手です。こんにちは。
 先日の2桁の掛け算で目から鱗が出た俺ですが、その感動を人に伝えたら笑われた・・・。
 「桁で分けて計算とか普通の筆算と同じじゃんwwwwwww」
 そうじゃないんだ、複雑な問題を分かりやすい問題に分ける事*1や、従来のやり方を捨てて理解しやすい方法を編み出すことや、ソリューションの美しさで覚えた感動を伝えたかっただけなんだ。
 なんにしても頭のいい人にバカが感じた感動を伝えるのは難しい。象を飲み込んだウワバミの話を思い出したよ。

計算が苦手なのを克服したいので

 暗算の問題を自動生成するプログラム作ったよ!足し算だけだけど、折を見て四則演算を全部盛り込みつつ、モジュロ演算や階乗やルートや総和の問題なんかも出したい!全部暗算で出来るように、このプログラムで特訓します・・・。

<html>
<head>
<style type="text/css">
#question{
	float	: left;
	width	: 10em;
	height	: 1em;
}
#level{
	float	: left;
	width	: 10em;
	height	: 1em;
}
#score{
	float	: left;
	width	: 10em;
	height	: 1em;
}
</style>
<script>
var gScore, gLevel, gLife;
var gAnswer	= "";
var gCount	= 0;

var $ = function(id) {
	var obj = document.getElementById(id);

	obj.T = function(s){
		var ret_t;

		if(obj.innerText == undefined){
			if(s != undefined) obj.textContent = s;
			ret_t = obj.textContent;
		}else{
			if(s != undefined) obj.innerText = s;
			ret_t = obj.innerText;
		}
		return ret_t;
	}
	return obj;
};

function $q(s){ return parseInt(Math.random() * 100000) % (s * 10); }

function GetQuestion() {
	var valX = $q(gLevel), valY = $q(gLevel);

	$('question').T(valX + " + " + valY);
	$('answer').value = "";
	$('answer').focus();

	gAnswer = valX + valY;
}

function Redraw(s)
{
	var strLife = "";

	for(var i=0;i<gLife;i++) strLife += "(´・ω・`)";
	
	$('level').T("LEVEL:" + gLevel);
	$('score').T("SCORE:" + gScore);
	$('life' ).T(strLife);
	$('disp' ).innerHTML = s ? s:"";
}

function GameReset()
{
	gScore	= 0;
	gLevel	= 1;
	gLife	= 3;

	Redraw();
	
	$('btnStart' ).style.display = '';
	$('question' ).T("");
	$('answer'   ).value = '';
	$('btnAnswer').disabled = false;
}

function GetAnswer()
{
	var strDisp = "";
	
	if($('answer').value == gAnswer){
		gScore	+= 10;
		if((++gCount) % (10 * gLevel) == 0) { gLevel++; gCount = 0; }
		if(gScore % 3000 == 0) gLife++;
		strDisp = "正解!<br>";
	}else{
		strDisp = "ハズレ!<br>正解は " + gAnswer + " でした。<br>";
		gLife --;
	}
	if(gLife > 0){
		GetQuestion();
	}else{
		strDisp += "Game Over<br>";
		$('btnAnswer').disabled = true;
	}
	Redraw(strDisp);
}

function GameStart()
{
	GameReset();
	$('btnStart').style.display = 'none';
	GetQuestion();
}
</script>
</head>
<body>
<div id="level">LEVEL:1</div><div id="score">SCORE:0</div><br style="clear:both"><br>
<form action="javascript:GetAnswer()">
	<div id="question"></div><div>=<input type="text" id="answer">
		<input type="button" id="btnAnswer" value="答える" onClick="GetAnswer()">
	</div><br>
	残機:<span id="life"></span>
	<div id="disp"></div>
	<input type="button" id="btnStart" value="ゲーム開始" onClick="GameStart()">
	<input type="button" id="btnReset" value="リセット" onClick="GameReset()">
</form>
</body>
</html>

 燕雀いずくんぞ鴻鵠の志を知らんや。賢くなりたいなぁ・・・。

追記

 IEでもFirefoxでも動くように改造しました。

*1:分けたことで俺の理解が進んで、2桁同士の掛け算に対する面倒意識がなくなった事。これが一番大事。