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とすれば実行されます。