Auto Exam v0.1 問題作成用
もうサポートは終わっているようですが,練習問題に使わせていただいているCGIのAuto Exam v0.1は大変便利です。以下はその問題作成用スクリプトです。
たとえば,正解を回答例の筆頭とするタブ区切りの以下のようなデータ jugemu.txt
「じゅげむじゅげむ」の次は? ごこうのすりきれ かいじゃりすいぎょのすいぎょうまつ うんらいまつ ふうらいまつ くうねるところにすむところ
「やぶらこうじのぶらこうじ」の次は? ぱいぽぱいぽ ぱいぽのしゅーりんがん しゅーりんがんのぐーりんだい ぐーりんだいのぽんぽこぴーの ぽんぽこなーの
「ちょうきゅうめいの」の次は? ちょうすけ じゅげむじゅげむ ごこうのすりきれ うんらいまつ ふうらいまつ
を,gawk -f 2AE.awk jugemu.txt のように処理すると,回答例がランダムに並び替えられ,jugemu.ae
Q1:「じゅげむじゅげむ」の次は?
S1:ふうらいまつ,くうねるところにすむところ,うんらいまつ,ごこうのすりきれ,かいじゃりすいぎょのすいぎょうまつ
A1:4
M1:1
Q2:「やぶらこうじのぶらこうじ」の次は?
S2:しゅーりんがんのぐーりんだい,ぱいぽのしゅーりんがん,ぽんぽこなーの,ぐーりんだいのぽんぽこぴーの,ぱいぽぱいぽ
A2:5
M2:1
Q3:「ちょうきゅうめいの」の次は?
S3:ふうらいまつ,ごこうのすりきれ,ちょうすけ,じゅげむじゅげむ,うんらいまつ
A3:3
M3:1
が出力されます。練習問題をいくつも作るのに便利です。ランダムに並び替えるところは極めて原始的な方法を用いました。もっとスマートにならないかな・・・。
# 2AE.awk AutoExam 整形用
BEGIN {
FS="\t"
split(ARGV[1], f, ".")
outfile = f[1]".ae"
ln = 0
srand()
}
{
ln++;
print "Q"ln":"$1 > outfile
#
x=int( 120*rand() ) + 1
s=select5(x)
split(s, ss, ",")
printf("S%d:", ln) > outfile
#
tt = ss[1] + 1
printf("%s,", $tt) > outfile
tt = ss[2] + 1
printf("%s,", $tt) > outfile
tt = ss[3] + 1
printf("%s,", $tt) > outfile
tt = ss[4] + 1
printf("%s,", $tt) > outfile
tt = ss[5] + 1
printf("%s", $tt) > outfile
print "" > outfile
#
for(i=1; i<=5; i++) {
if(ss[i] == 1) { ans = i; break }
}
print "A"ln":"ans > outfile
print "M"ln":1\n" > outfile # 便宜上,配点はすべて1点とする.
printf("%d\r", NR)
}
END { print "" }
function select5(x, t) {
t[1]="1,2,3,4,5"
t[2]="1,2,3,5,4"
t[3]="1,2,4,3,5"
t[4]="1,2,4,5,3"
t[5]="1,2,5,3,4"
t[6]="1,2,5,4,3"
t[7]="1,3,2,4,5"
t[8]="1,3,2,5,4"
t[9]="1,3,4,2,5"
t[10]="1,3,4,5,2"
t[11]="1,3,5,2,4"
t[12]="1,3,5,4,2"
t[13]="1,4,2,3,5"
t[14]="1,4,2,5,3"
t[15]="1,4,3,2,5"
t[16]="1,4,3,5,2"
t[17]="1,4,5,2,3"
t[18]="1,4,5,3,2"
t[19]="1,5,2,3,4"
t[20]="1,5,2,4,3"
t[21]="1,5,3,2,4"
t[22]="1,5,3,4,2"
t[23]="1,5,4,2,3"
t[24]="1,5,4,3,2"
t[25]="2,1,3,4,5"
t[26]="2,1,3,5,4"
t[27]="2,1,4,3,5"
t[28]="2,1,4,5,3"
t[29]="2,1,5,3,4"
t[30]="2,1,5,4,3"
t[31]="2,3,1,4,5"
t[32]="2,3,1,5,4"
t[33]="2,3,4,1,5"
t[34]="2,3,4,5,1"
t[35]="2,3,5,1,4"
t[36]="2,3,5,4,1"
t[37]="2,4,1,3,5"
t[38]="2,4,1,5,3"
t[39]="2,4,3,1,5"
t[40]="2,4,3,5,1"
t[41]="2,4,5,1,3"
t[42]="2,4,5,3,1"
t[43]="2,5,1,3,4"
t[44]="2,5,1,4,3"
t[45]="2,5,3,1,4"
t[46]="2,5,3,4,1"
t[47]="2,5,4,1,3"
t[48]="2,5,4,3,1"
t[49]="3,1,2,4,5"
t[50]="3,1,2,5,4"
t[51]="3,1,4,2,5"
t[52]="3,1,4,5,2"
t[53]="3,1,5,2,4"
t[54]="3,1,5,4,2"
t[55]="3,2,1,4,5"
t[56]="3,2,1,5,4"
t[57]="3,2,4,1,5"
t[58]="3,2,4,5,1"
t[59]="3,2,5,1,4"
t[60]="3,2,5,4,1"
t[61]="3,4,1,2,5"
t[62]="3,4,1,5,2"
t[63]="3,4,2,1,5"
t[64]="3,4,2,5,1"
t[65]="3,4,5,1,2"
t[66]="3,4,5,2,1"
t[67]="3,5,1,2,4"
t[68]="3,5,1,4,2"
t[69]="3,5,2,1,4"
t[70]="3,5,2,4,1"
t[71]="3,5,4,1,2"
t[72]="3,5,4,2,1"
t[73]="4,1,2,3,5"
t[74]="4,1,2,5,3"
t[75]="4,1,3,2,5"
t[76]="4,1,3,5,2"
t[77]="4,1,5,2,3"
t[78]="4,1,5,3,2"
t[79]="4,2,1,3,5"
t[80]="4,2,1,5,3"
t[81]="4,2,3,1,5"
t[82]="4,2,3,5,1"
t[83]="4,2,5,1,3"
t[84]="4,2,5,3,1"
t[85]="4,3,1,2,5"
t[86]="4,3,1,5,2"
t[87]="4,3,2,1,5"
t[88]="4,3,2,5,1"
t[89]="4,3,5,1,2"
t[90]="4,3,5,2,1"
t[91]="4,5,1,2,3"
t[92]="4,5,1,3,2"
t[93]="4,5,2,1,3"
t[94]="4,5,2,3,1"
t[95]="4,5,3,1,2"
t[96]="4,5,3,2,1"
t[97]="5,1,2,3,4"
t[98]="5,1,2,4,3"
t[99]="5,1,3,2,4"
t[100]="5,1,3,4,2"
t[101]="5,1,4,2,3"
t[102]="5,1,4,3,2"
t[103]="5,2,1,3,4"
t[104]="5,2,1,4,3"
t[105]="5,2,3,1,4"
t[106]="5,2,3,4,1"
t[107]="5,2,4,1,3"
t[108]="5,2,4,3,1"
t[109]="5,3,1,2,4"
t[110]="5,3,1,4,2"
t[111]="5,3,2,1,4"
t[112]="5,3,2,4,1"
t[113]="5,3,4,1,2"
t[114]="5,3,4,2,1"
t[115]="5,4,1,2,3"
t[116]="5,4,1,3,2"
t[117]="5,4,2,1,3"
t[118]="5,4,2,3,1"
t[119]="5,4,3,1,2"
t[120]="5,4,3,2,1"
#
return t[x]
}
GAWKホームページに戻る