-
카테고리
-
세부 분야
알고리즘 · 자료구조
-
해결 여부
미해결
맥북(mac os) 자동 채점 방법을 고민해보았습니다.
21.09.30 22:01 작성 조회수 316
3
출력값이 긴 파일은 하나씩 눈으로 보고 체크하기가 어려워서 방법을 찾아보았습니다. 별다른 설치 파일 필요 없이 그냥 리눅스 명령어로 만들어진 쉘 스크립트만 생성해주면 되므로 간단합니다. 다른 언어로 개설된 강의를 듣는 mac유저들도 쉘 스크립트로 빠르게 채점이 가능할 듯합니다.
1. 쉘 스크립트 생성
작성한 코드가 있는 폴더에서 run.sh 파일을 생성합니다. 해당 파일을 열어서 아래 내용을 붙여넣어줍니다.
실행할 cpp 파일 명은 code.cpp로 바꾸어주세요.
#!/bin/bash
g++ code.cpp -o code
"./code" "./test/in1.txt" "./test/result1.txt"
"./code" "./test/in2.txt" "./test/result2.txt"
"./code" "./test/in3.txt" "./test/result3.txt"
"./code" "./test/in4.txt" "./test/result4.txt"
"./code" "./test/in5.txt" "./test/result5.txt"
echo "test1 :" && diff -w -s "./test/result1.txt" "./test/out1.txt"&& echo " "
echo "test2 :" &&diff -w -s "./test/result2.txt" "./test/out2.txt"&& echo " "
echo "test3 :" &&diff -w -s "./test/result3.txt" "./test/out3.txt"&& echo " "
echo "test4 :" &&diff -w -s "./test/result4.txt" "./test/out4.txt"&& echo " "
echo "test5 :" &&diff -w -s "./test/result5.txt" "./test/out5.txt"&& echo " "
2. 채점 파일 등록
해당 폴더에 test폴더를 생성하여 채점 파일에 있는 파일들을 넣어줍니다.
3. 메인 코드 수정
메인의 코드를 살짝 수정해주어야 합니다.
code.cpp파일을 열어 아래와 같이 수정 해 줍니다.
int main(int argc, char* argv[]){
freopen(argv[1], "rt", stdin);
freopen(argv[2], "w", stdout);
main함수에 매개 변수를 입력할것이므로 인자를 넣어주고 결과 파일을 작성할 코드도 추가합니다.
4. 실행
cpp 파일이 있는 폴더에서 쉘 스크립트를 실행합니다.
$ sh run.sh
5. 결과 확인하는 법
성공
내가 작성한 코드의 결과값과 채점파일의 답이 일치하면 identical이라는 문구가 뜹니다.
실패
틀린 답은 해당 번호에 코드 출력 결과값을 보여줍니다.
구분선 --- 위쪽은 내가 작성한 코드의 출력값, 아래는 채점 파일의 출력값입니다.
실행시간 확인하기
c++코드에서 시간 라이브러리를 넣어 측정할 수 있지만 귀찮아서 시간 측정은 잘 안했는데 리눅스 명령어로도 확인이 가능하네요.
#!/bin/bash
g++ code.cpp -o code
time "./code" "./test/in1.txt" "./test/result1.txt"
time "./code" "./test/in2.txt" "./test/result2.txt"
time "./code" "./test/in3.txt" "./test/result3.txt"
time "./code" "./test/in4.txt" "./test/result4.txt"
time "./code" "./test/in5.txt" "./test/result5.txt"
이렇게 실행 명령어 앞에 time 을 붙여주면 실행 시간을 출력해줍니다.
쉘 스크립트 문법을 몰라서 그냥 한줄 한줄 작성했는데 세련되어보이진 않지만 채점파일 추가,삭제는 직관적으로 가능하다는 장점이 있다고 우겨보겠슴다.
수정하고 싶은 부분은 간단한 검색으로도 많은 자료가 있으니 수정하셔서 사용하면 될 듯합니다.
궁금하거나 수정할 부분이 있다면 알려주세요.
답변을 작성해보세요.
답변 2