History: 알고스팟 온라인 저지/문제 내기
아오지에 문제 내기
5문제 이상을 해결한 사용자는 온라인 저지에 새 문제를 출제할 수 있다. 자신이 출제한 문제나, 다른 곳에서 사용된 문제 (이 경우에는 저작권에 문제가 없어야 한다) 들을 업로드할 수 있다.
문제 내기 메뉴에서 "새 문제 내기" 링크를 클릭하면 새 문제를 업로드할 수 있다. 대부분의 항목은 문제를 좀 풀어본 사람들에겐 직관적이지만, 다음과 같은 사항에 유의하면 좋다.
- 노트 란은 사용자에겐 보이지 않으며, 운영진에게 전하는 말을 쓰는 란이다.
입출력 파일
문제를 작성했으면 입출력 파일을 만들어 첨부하자. 입출력 파일은 텍스트 파일로, 임의의 파일명에 대해 .in과 .out이 짝지어져 있어야만 수행된다. 예를 들어, a.in, b.in, a.out 의 세 개의 파일이 있을 경우 AOJ는 a.in과 a.out의 쌍만 인식한다.
채점 모듈 선택
채점 모듈은 출력된 답을 어떻게 비교할 것인가를 결정한다. 대부분의 경우 ignore_whitespace (공백 무시)를 사용하며, 실수 출력인 경우 relative_float 를 선택하면 절대/상대 오차 1e-8 범위 안의 답을 정답으로 인정할 수 있다.
스페셜 저지
만약 답이 여러 개 있어서 별도의 프로그램을 사용해 답안을 채점해야 한다면 (Special Judge 참고) 답안 채점하는 프로그램을 첨부할 수 있다.
첨부 프로그램은 어떤 언어로 작성되어도 상관 없지만 checker라는 파일명을 가져야 하며, 맨 위에 '#!' (shebang) 을 추가해 적절한 인터프리터로 실행되도록 하여야 한다. 만약 채점 프로그램이 C++ 등의 컴파일 언어인 경우, AMD64 리눅스 환경에서 채점될 수 있도록 컴파일해 첨부해도 된다. (자바의 경우 안타깝지만 아직 방법이 없다. ㅜ.ㅜ)
checker에는 세 개의 명령줄 파라미터가 주어진다. 이들은 각각 (입력 파일명) (프로그램의 출력 파일명) (정답 파일명)
을 나타낸다.
checker는 파일들을 입력받아 답을 확인한 뒤 정답이면 YES를, 오답이면 NO를 표준 출력에 출력한다. 이 외의 어떠한 출력도 stdout 이나 stderr 에 출력해서는 안된다. checker는 최대 10초 내에 수행되어야 한다.
아래는 대소문자와 공백을 무시하는 채점 프로그램의 예를 보여준다.
#!/usr/bin/env python
import sys
i, o, e = sys.argv[1:]
good = open(o).read().lower().split() == open(e).read().lower().split()
print 'YES' if good else 'NO'
예제 답안 제출
데이터까지 첨부했으면 문제를 저장하고, 예제 답안을 제출해 시간 내에 채점이 잘 되나 확인한다.
리뷰 신청 및 공개
채점이 잘 되면 문제 상태를 "PENDING REVIEW"로 바꿔 저장한다. 제출된 문제들은 운영진의 리뷰를 거쳐 업로드된다.