javascript日和の成果物

とりあえずさっきまでの学習を形にしてみました。本当はGoogleガジェットでこのページに載せようと思ったんですが、意外と学習することが多そうなのでコードだけ載せておきます。(次のステップXMLを学習する1(理論編) - たぬきのねどこ)
内容は、(超簡易)自己学習システム。最初はちゃらんぽらんなことを聞いてきますが、きちんと答えているとまともな質問をし始めます。おかしな答えをし続ければ、そういう風に学習していきます。


メモ帳にコピペして、tanuki.htmlという名前でも付けて保存すれば見れるはずです。Array内の言葉を変えて遊んでくださいな(名詞や動詞の数の増減にも対応してます)。*1

<html>
<body>
<script language="JavaScript"><!--
var noun=new Array("ごはん","布団","洋服");
var verb=new Array("食べた","着た","叩いた","作った","羽織った","よそった");
var score=new Array(noun.length);
for(var i=0;i<noun.length;i++)score[i]=new Array(verb.length);
for(var i=0;i<noun.length;i++)
		for(var j=0;j<verb.length;j++)
			score[i][j]=100/verb.length;
var result="";
function init(){
	makeQ();
	document.myForm.marubatu.value=result;
}
function makeQ(){
	tempN=Math.floor(Math.random()*noun.length);
	tempV1=findVerb(tempN);
	tempV2=findVerb(tempN);
	while(tempV1==tempV2)tempV2=findVerb(tempN);
	document.myForm.question.value=""+noun[tempN]+"は、"+verb[tempV1]+"り"+verb[tempV2]+"りするもの?";
}
function findVerb(tempN){
	var maxTotalScore=0;
	for(var i=0;i<verb.length;i++)maxTotalScore+=score[tempN][i];
	var probe=maxTotalScore*Math.random();
	var totalScore=0;
	var tempV=-1;
	while(probe>totalScore){
		tempV++;
		totalScore+=score[tempN][tempV];
	}
	return tempV;
}
function clickYes(){
	for(var i=0;i<verb.length;i++)score[tempN][i]*0.9;
	var up=(document.myForm.study.checked)? 2:1.8;
	score[tempN][tempV1]*=up;
	score[tempN][tempV2]*=up;
	result+="○";
	init();
}
function clickNo(){
	var down=(document.myForm.study.checked)? 0.8:0.9;
	score[tempN][tempV1]*=down;
	score[tempN][tempV2]*=down;
	result+="×";
	init();
}

//-->
</script>

<form name="myForm">
<input type="text" size="50" name="question"><br>
<input type="button" value="はい" onClick="clickYes()">
<input type="button" value="いいえ" onClick="clickNo()">
<br><br>
<textarea cols="20" rows="10" name="marubatu"></textarea>
<br><br>
<input type="checkbox" name="study" checked>高速学習
</form>

<script language="JavaScript"><!--
	init();
//-->
</script>

</body>
</html>

*1:何故かうまく表示されなかったので色付けを消しました