ans.jsサンプル
このページの正解ファイルa.jsはここ ,
それをエンコードしたa64.jsはここ 。
本システムについて説明した紀要(プレプリント)はここ 。
文字列の判定
問(Q03-1)
ORゲートの動作は,スイッチ2つをどのように接続したものと同じか。漢字二文字で記入なさい。
正解
'Q03-1': ['並列'],
tableでinput textを配置した例
問(Q03-3)
4桁の2進数の加算をおこなう回路を描け。
入出力
A3 A2 A1 A0
+ B3 B2 B1 B0
---------------
S3 S2 S1 S0
または,端子(X1~X3)のアルファベット番号を入れよ。
正解
'Q03-3': ['A1','S1','A2','S2','A3','S3','B1','X2','B2','X3','B3'],
数値の判定
preでinput textを配置した例
readonlyのinput textを使って外観をそろえている。
問(Q03cal)
2進数の足し算(筆算)
2進数 10進数
←
+) ← +)
--------- ---------
→
正解
'Q03cal': ["3","9",'1100',"12"],
正規表現による判定
学籍番号
問題idをidとして学籍番号を入力させる。
問(id) 7桁数字の学籍番号(pp20100など)を記入してください。
正解
'id': [/^[A-Za-z][A-Za-z]2\d\d\d\d$/],
プログラムのコード
問(B13-Q6)
次のif文を「s==b2ならばsetBackground(Color.WHITE); 」をおこなうif文に修正しなさい。
正解
'B13-Q6':[/^((if|else\sif)\((s==b2|s!=b1|!\(s==b1\))\)|else)({setBackground\(Color\.WHITE\);}|setBackground\(Color\.WHITE\);)$/],
文字間に空白がある場合
問(Q03-2)
回路の各点の動作からXORの動作を説明する真理値表を完成させなさい。
正解
'Q03-2': [/1 *1 *0 *0 *1 *0 *1/, /0 *0 *1 *1 *0 *1 *1/, /0 *1 *1 *0 *0 *0 *0/],
JavaScriptによる判定
誤差
問(Q00) 解答が0.02125±0.001であるか?
正解
'Q00': ["{Math.abs(ans-0.02125)<0.001;}"],
JavaScriptと正規表現による判定
JavaScriptを使うときは,関数を定義すると,簡潔に記述できることが多い。以下では関数をより短く記述できるアロー記法と即時関数を使っている。
通常の記法 function a(x,y){文1; 文2; return 値;}
アロー記法 var a=(x,y)=>{文1; 文2; return 値;};
関数の文が1つの場合
通常の記法 function a(x,y){return 値;}
アロー記法 var a=(x,y)=>値;
関数の引数が1つの場合
通常の記法 function a(x){文1; 文2; return 値;}
アロー記法 var a=x=>{文1; 文2; return 値;};
即時関数
通常の記法 (function (x,y){文1; 文2; return 値;})(xに渡す値,yに渡す値);
アロー記法 ((x,y)=>{文1; 文2; return 値;})(xに渡す値,yに渡す値);
Maxima形式の数式
数式を数式処理システムで用いられる表現で解答してもらう。数式処理システムの表現を正規表現の置換(replace)でJavaScriputの表現に変換して,評価evalで評価する。
発展課題(Q07-h7/adv)
縦横の画素数をx, y,サイズをLインチとする。ディスプレィの解像度ppiを計算するx, y, Lの式を求めなさい。
式は,和差積商,べき乗,平方根,括弧を + - * / ^ sqrt,()と書いて下さい(例えば (-b+sqrt(b^2-4*a*c))/(2*a) など)。
正解
'Q03-h7': ["{var c=(x,y,L)=>eval(ans.replace(/\^/g,'\*\*').replace(/sqrt/g,'Math\.sqrt'))==Math.sqrt(x*x+y*y)/L; c(1280,1024,17)&&c(640,480,12)&&c(320,240,2.8)&&c(720,1280,4.6);}"],
単位付きの数値
関数perparseFloatは末尾の文字を無視して数値に変換するので,末尾の文字は正規表現で評価することで,単位付きの数値を判定できる。
発展課題(Q02-h4/adv)
動画:動画は,静止画を1秒間に30枚紙芝居のように切り替える。圧縮していない640×480画素の動画30分のファイルサイズはいくらか。適当な接頭辞をつけて答えよ。
答え
正解
'Q02-h4': ["{Math.abs(parseFloat(ans)-49.7664)<0.1 && ans.match(/G\s*B$/)!=null;}"],
別の解答の参照
比
n個の数の比の穴埋めの正解は,以下のようにn個の同じ正解になる。
問(Q3) 590nm単色光のRGB表色系の3刺激値を求めよ。
Q = ( , , )
正解
'Q3':["{var i, n=v=>v[i]/Math.sqrt(v[0]**2+v[1]**2+v[2]**2);((v,u)=>{var r=true;for(i=0;i<3;i++)r=r&&Math.abs(n(v)-n(u))<0.01;return r;})(ansa,[0.3093,0.0975,-0.0008]);}","{var i, n=v=>v[i]/Math.sqrt(v[0]**2+v[1]**2+v[2]**2);((v,u)=>{var r=true;for(i=0;i<3;i++)r=r&&Math.abs(n(v)-n(u))<0.01;return r;})(ansa,[0.3093,0.0975,-0.0008]);}","{var i, n=v=>v[i]/Math.sqrt(v[0]**2+v[1]**2+v[2]**2);((v,u)=>{var r=true;for(i=0;i<3;i++)r=r&&Math.abs(n(v)-n(u))<0.01;return r;})(ansa,[0.3093,0.0975,-0.0008]);}"],
発展課題(Q02-h1/adv)
1文字を8ビットであらわす。Aは01000001。B~Zは順に1つづ増えた数。2進数で自分の苗字をつくってみなさい。
苗字 ,2進数のデータ
正解
'Q02-h1': [/^[A-Z]+$/, "{((a,b)=>{for(var i=0; i<a.length; i++) if(a.charCodeAt(i)!=parseInt(b.substr(8*i,8),2)) return false; return true;})(ansa[0],ans);}"],
記述問題
記述問題は,問題idの末尾をdocにして,正誤に関わらず,copyallvalues関数でクリップボードにコピーできようにする。それをLMSに解答を貼り付けるように指示しておき,教師が読む。
発展課題(Q03-h8doc/adv)
あなたのパソコンや携帯電話,スマートフォンなどの解像度ppiを調べるか,計算しなさい。
正解
'Q03-h8doc': [/^.+$/],
終了したら,
をクリックして,学習支援システム(Google Classroomなど)に貼り付けて下さい。
発展課題もやった学生は,
をクリックして,「発展課題」に貼り付けて下さい。
教師は,ansclip.batを実行しておき,LMSから解答をダウンロードしてスプレッドシートで表示し,base64でエンコードされた文字列の入った解答欄を選択して,クリップボードにコピーする。すると,ansclipで即座にtsv形式に変換されるので,選択を開始したセルの右上のセルで「貼り付け」を行うと,各解答の横にフォーマットされた,得点と誤答,記述問題を一覧することができる。
例: