BEGIN{
len=40
# (1) 課題文を作成して画面に表示
kadai=mkkadai(len)
print "課題は [ ] 内の文字列です。それと同じ文字列を入力してください。"
print "[ ] は入力しないでください。入力が終わったら改行キーを打ちます。"
print ""
printf "課題: [%s]\n",kadai
printf "入力: "
# (2) 現在時刻を記憶 (入力開始時刻)
time1=systime()
time2=0
Loops=1 # 何回目の入力か
}
{ ## ここはキーボードからの 1 行の入力が済んだ後に実行される
# (3) 現在時刻を記憶 (入力終了時刻)
time2=systime()
# (4) 入力行と課題文とを比較
N=check(kadai,$0)
# (5) 違いがなければ終了し、
# 違いがあればその結果を表示し、現在時刻を記憶 (入力開始時刻)
if(N==0) exit
else{
printf "[%d] ミス = %d 個、時間 = %d 秒\n",Loops,N,time2-time1
printf "課題: [%s]\n",kadai
printf "入力: "
time1=systime()
time2=0
Loops++
}
}
END{
# (6) 途中でやめた場合はそのような表示をする
# (7) 正常終了した場合はそのような表示をする
if(time2==0) print "途中であきらめましたね。次回また頑張ってください。"
else{
printf "おめでとうございます。正解です。\n"
printf "回数 = %d 回、時間 = %d 秒\n",Loops,time2-time1
}
}
function mkkadai(M, j,x,N,a,s)
{
s=""
srand()
N=split("abcdefghijklmnopqrstuvwxyz ",a,"")
for(j=1;j<=M;j++){
x=int(rand()*N)+1
s = s a[x]
}
return s
}
function check(s1,s2, h1,h2,N1,N2,N,L,j,diff)
{
N1=split(s1,h1,"")
N2=split(s2,h2,"")
if(N1<=N2){ N=N1; L=N2-N1 }
else{ N=N2; L=N1-N2 }
for(j=1;j<=N;j++) if(h1[j]!=h2[j]) diff++
return diff+L
}
上記のファイルを type.awk とでもして、
awk -f type.awkとすれば実行されます。