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)のアルファベット番号を入れよ。
A0
AS
BC
S0
AS
BC
X
AS
BC
X
AS
BC
X
B0X1
 -─X1X2X3
正解 '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の動作を説明する真理値表を完成させなさい。
 
A B c d e f g h out
0 0
0 1
1 0
1 1
正解 '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を使うときは,関数を定義すると,簡潔に記述できることが多い。以下では関数をより短く記述できるアロー記法と即時関数を使っている。
関数の文が1つの場合
関数の引数が1つの場合
即時関数

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形式に変換されるので,選択を開始したセルの右上のセルで「貼り付け」を行うと,各解答の横にフォーマットされた,得点と誤答,記述問題を一覧することができる。

例: