Sasa is an Automatic Scoring Application for "PandA1".
Sasa は PandA1 の課題の採点を自動化するための CLI アプリケーションです。
Sasa は以下の作業を自動化します。
- ソースファイルの UTF-8 へのエンコード
- エンコードされたソースファイルのコンパイル
- バイナリファイルの実行
- 実行結果の採点
Sasa はコマンド一つで採点を終わらせます。
gcc
あるいはclang
をインストール済みであること
ここからバイナリファイルsasa
をダウンロードできます。
- 作業ディレクトリを新規作成(例 :
workspace/
) - 作業ディレクリにダウンロードした
sasa
を配置 - ターミナル上で作業ディレクリに移動
$ cd workspace
$ ls
sasa
- ターミナル上で
./sasa init
を実行 (src/
、answer.txt
、.sasarc.yaml
が自動で生成される)
$ ./sasa init
$ ls
src/ sasa answer.txt .sasarc.yaml
- 模範解答プログラムを用意して実行(例 :
hello_ans.c
)
$ gcc hello_ans.c -o hello_ans
$ ./hello_ans
hello, world
- 上記 5 の出力結果(
hello, world
)をanswer.txt
にコピー&ペースト - LETUS から課題をダウンロード ("提出をフォルダに入れてダウンロードする"のチェックは外す)
- ダウンロードした Zip を展開し、中のソースファイルを
src/
内に移動
- ターミナル上で
./sasa all
を実行 (encoded/
、build/
、output/
、database.csv
が自動で生成される)
$ ./sasa all
[1/4] Encoding...
[2/4] Building...
[3/4] Running...
[4/4] Checking...
$ ls
src/ encoded/ build/ output/
sasa answer.txt .sasarc.yaml database.csv
- 採点結果が記録された
database.csv
を見ながら、LETUS 上で評点を行う (Score が低いプログラムは、encoded/
内のファイルを個別で確認する)
コマンドのヘルプを表示します。
Sasa のバージョンを表示します。
作業ディレクトリの初期化コマンドです。
src/
、answer.txt
、.sasarc.yaml
を自動生成します。既に上記のディレクトリ・ファイルが存在する場合には、それを上書きせずに無視します。
ソースファイルのエンコードコマンドです。現在、Shift JIS / UTF-8 に対応しています。
src/
のソースファイルをエンコードし、encoded/
に出力します。UTF-8 はそのまま、UTF-8 以外のものは UTF-8 にエンコードして出力します。出力ファイル名は[学籍番号]_[名前].c
です。
src/
が存在しない場合には、エラーになります。
ソースファイルのコンパイルコマンドです。
encoded/
のソースファイルをコンパイルし、build/
に出力します。コンパイル時に警告・エラーを吐く場合、ログファイルを出力します。エラーを吐く場合、バイナリファイルは出力されません。バイナリファイル名は[学籍番号]_[名前]
、ログファイル名は[学籍番号]_[名前].log
です。
encoded/
が存在しない場合には、エラーになります。
バイナリファイルの実行コマンドです。
build/
のバイナリファイルを実行し、標準出力をログファイルとしてoutput/
に出力します。ログファイル名は[学籍番号]_[名前].log
です。
build/
が存在しない場合には、エラーになります。input.txt
が存在する場合には、その中身を標準入力に使用します。
出力結果の採点コマンドです。
output/
のログファイルとanswer.txt
の内容を比較して採点します。同じ行 1 つにつき、1 点を加点します。採点結果はdatabase.csv
に記録されます。
output/
やanswer.txt
が存在しない場合には、エラーになります。
上記encode
/build
/run
/check
の 4 つを一括で行うコマンドです。
LETUS からダウンロードしたソースファイルを配置するディレクトリです。
コマンドinit
によって自動生成されます。
UTF-8 にエンコードされたソースファイルが出力されるディレクトリです。
コマンドencode
によって自動生成されます。
コンパイルされたバイナリファイルが出力されるディレクトリです。コンパイル時のエラーや警告は、ログファイルとして出力されます。
コマンドbuild
によって自動生成されます。
バイナリファイルを実行した際の標準出力が、ログファイルとして出力されるディレクトリです。
コマンドrun
によって自動生成されます。
Sasa の設定ファイルです。ディレクトリ名・ファイル名などを変更できます。
コマンドrun
によって自動生成されます。
採点時に比較される出力結果ファイルです。このファイルの内容を正しい出力結果とみなし、対象の出力結果と同じ行 1 つにつき、対象を 1 点加点します。
コマンドrun
によって自動生成されます。模範解答プログラムの出力結果をコピー&ペーストして下さい。
標準入力として使用するファイルです。
課題でscanf()
等の標準入力を扱う際に使用します。必要な場合、自身で作成して下さい。
採点結果等が記録されるデータベースファイルです。
コマンドencode
によって自動生成され、build
/run
/check
によって参照・更新されます。
各列は以下を表しています。
- ID : 学籍番号
- Name : 名前
- Charset : 推測された元の文字コード
- CanCompile : コンパイルできたか
- Score : 出力結果において
answer.txt
と同じ行の個数
Rainbow CSVという拡張機能が便利です。
作業ディレクトリから見たパスにファイルを配置して下さい。
例えば、以下のような場合には
fp = fopen("input.csv")
作業ディレクトリ(例:workspace)直下に読み取るファイルを配置して下さい。
$ cd workspace
$ ls
src/ input.csv ...
以下のような場合には
fp = fopen("./resource/input.csv")
workspace/resource/input.csv
に読み取るファイルを配置して下さい。
$ cd workspace
$ ls
src/ resource/ ...
$ ls resource
input.csv ...
作業ディレクリ直下にinput.txt
を作成し、中に標準入力を記述して下さい。
例えば、以下のような場合には
printf("xを整数で入力してください:\n");
scanf("%d", &x);
printf("yを整数で入力してください:\n");
scanf("%d", &y);
input.txt
内に以下のように記述して下さい。改行区切りで一つずつ読み込まれます。空行は無視されます。
12
345
この時、answer.txt
に使用する出力結果は、同じinput.txt
を使用し、リダイレクト>
を用いて取得して下さい。
$ ls
input_prob_ans.c input.txt ...
$ gcc input_prob_ans.c -o input_prob_ans
$ input.txt > ./input_prob_ans
xを整数で入力してください: ...
yを整数で入力してください: ...
...