맥북(mac os) 자동 채점 방법을 고민해보았습니다.
558
작성한 질문수 1
출력값이 긴 파일은 하나씩 눈으로 보고 체크하기가 어려워서 방법을 찾아보았습니다. 별다른 설치 파일 필요 없이 그냥 리눅스 명령어로 만들어진 쉘 스크립트만 생성해주면 되므로 간단합니다. 다른 언어로 개설된 강의를 듣는 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
테스트 케이스 질문
0
374
1
병합정렬 시간복잡도 질문
0
464
1
41.연속된 자연수의 합 문제풀이에서 수학적인 원리를 모르고 있습니다.
0
1351
2
질문드립니다.
0
378
1
질문드립니다!
0
432
1
dev 프로그램 질문
0
275
1
문제가 이해가 안되요
0
376
1
4번 나이차이 문제 접근법 질문 드립니다.
0
307
1
source file not compiled
0
1050
3
59번 질문드립니다.
0
373
1
25번 문제 질문
0
349
1
4. 나이차이 문제 질문입니다.
0
374
1
90번 라이언 킹 심바 1번 테스트 케이스
0
470
1
71번 문제 전역 변수 질문 있습니다
0
365
1
75번, 79번 priority_queue관련
1
356
1
75.최대 수입 스케줄
0
401
2
복면산 정답의 수
0
432
1
테스트 케이스에 대해서
0
447
1
수업 내용 질문입니다!
1
233
1
풀어보면 좋은 문제 목록 - 2580 스토쿠 DFS 질문입니다!!
0
825
2
12. 플로이드-와샬(그래프 최단거리) . 27:25초
0
255
1
다른 풀이 방식
0
317
1
크루스칼 vs 프림
0
309
1
숫자 총개수 small 질문있습니다.
0
243
1





