티스토리 뷰

학업

codeforces polygon 사용법

기리이이이이인 2017. 10. 23. 01:51

 https://polygon.codeforces.com/

 폴리곤은 알고리즘 문제를 출제할 때 유용하게 쓸 수 있는 일종의 플랫폼이다.


 문제를 풀 수 있는 환경을 제공하는 곳이 아니라, 데이터를 만들고 솔루션을 검증해볼 수 있는 사이트이다. 코드포스 라운드 공지에 자주 적혀 있는 폴리곤도 여기다. 이번 RUN 가을 대회를 준비하면서 처음 써봤는데 많은 도움이 돼서 사용법을 정리해둔다.


 로그인을 한 다음 New Problem을 누르면 새 문제 준비를 시작할 수 있다. 문제 이름을 입력하면 메인 화면에 다음과 같이 문제가 생긴다.


 Start를 누르면 해당 문제 관리 페이지에 들어가진다.


 메뉴에 있는 각각의 기능을 요약하면 다음과 같다.


 General info

 시간 제한, 메모리 제한, 문제가 파일입출력을 사용할 경우 입출력 파일의 이름에 관한 설정이다.

 'Are tests well-formed?' 버튼을 선택하면 문제에서 주어지는 입력 데이터가 회색 글씨로 적힌 조건을 만족하는지 검사해준다. 체크하는 것이 더 좋다.

 Statement

 문제 본문, 입출력에 관한 조건, 예제 등 디스크립션을 관리한다.

 언어별로 따로 관리할 수 있다(영어버전, 한국어버전 등).

 Files 

 나중에 쓰이는 Checker, Validator, Generator 소스같은 파일을 업로드 하는 곳이다.

 Solution의 경우 Solution files에 따로 관리한다.

 Checker

 채점 프로그램을 지정하는 곳이다.

 정답이 deterministic하면 주어지는 기본 체커를 사용하면 되고 SPJ가 필요한 경우 구현해서 사용하면 된다.

 Validator

 입력 데이터가 오류가 없는지 검사하는 프로그램을 지정하는 곳이다.

 Tests

 문제 입력으로 쓰일 데이터를 관리하는 곳이다. 직접 만들어서 업로드 할 수도 있고 Generator(데이터 생성기)를 만들고 그걸 실행하는 스크립트를 짜서 자동 생성할 수도 있다.

 Stresses

 정답 소스와 틀려야 하는 소스 두개를 지정해주면 데이터를 계속 랜덤하게 만들어 두 소스의 결과가 다른 데이터를 찾아준다. 즉 틀린 소스의 반례를 찾아준다.

 Solution files

 문제 풀이 소스를 관리하는 곳이다.

 각 소스에 Type을 지정해서 정답 소스, 틀린 소스, 시간 초과 소스 등으로 분류할 수 있다.

 Invocations

 업로드한 솔루션 중 몇개와 테스트 몇개를 선택하면 선택한 것들에 대해 결과가 제대로 나오는지(틀린 소스가 정답 소스와 다른 결과가 제대로 나오는지, 정답 소스가 제한시간 안에 종료되는지) 검증해준다.

 Issues

 Github의 issue와 비슷한 것 같은데 사용해보지 않았다.

 Packages

 준비한 내용들을 한 묶음으로 만들어 다운로드 받을 수 있다. Create package에서 Full을 선택하고 Download에서 Linux를 선택해 받는 것이 좋다. 다운로드 받기 전 Verification(=모든 솔루션과 모든 Tests에 대해 Invocation을 하는 것과 동일한 작업)을 성공해야 받을 수 있다.

 Manage access

 다른 사람과 공동 작업을 할 때 사용한다. 유저를 초대하거나 권한을 지정할 수 있다. 여러명과 공동작업을 할 경우 오른쪽 아래에 나오는 Commit Changes를 눌러야 자신이 한 작업이 최신 버전에 반영된다.


 Checker, Validator, Generator의 경우 testlib.h 이라는 헤더 파일을 사용할 수 있다. 주된 용도는 재현 가능한 랜덤 함수의 사용과 문자열 패턴 매칭이다. testlib.h의 랜덤 함수는 프로그램을 실행했을 때 주어진 argument가 같으면 항상 같은 결과를 반환하기 때문에 랜덤으로 생성한 데이터를 argument의 값 만으로 보관할 수 있다.

 이제 각 기능을 세부적으로 살펴보자.


Statements


 RUN 가을 대회의 경우 한국어/영어를 모두 지원해야 했으므로 문제 지문을 두가지 버전으로 만들었다. TeX 문법을 사용할 수 있다. 사용 방법이 직관적이라 별다른 내용은 필요 없고 디스크립션에 사진을 올리는 방법만 적겠다.


 넣고 싶은 사진을 아래쪽에 있는 'Statement Resource Files'의 'Add Files'를 통해 업로드하자.


 그 다음 TeX 문법을 이용해 넣고 싶은 위치에 다음 내용을 써주자.

\begin{center}

\includegraphics[bb=0 0 100 200]{picture.png}

\end{center} 


 예를 들어 이렇게 적은 뒤


 In HTML을 눌러 보면 이렇게 사진이 끼워져 나온다.


 추가로 주의할 점은 디스크립션에 한글이 들어갈 경우 In HTML으로 볼 땐 잘 보이지만 In PDF로 보면 에러가 생긴다. 또 HTML로 볼 때랑 PDF로 볼 때 그림의 위치가 달라지기 때문에 주의해야 한다. 가장 쉽게 한글판 문서를 만드는 방법은 디스크립션을 HTML로 띄운 뒤 전체 복사해서 MS word에 붙여 넣는 것이고 꽤 예쁘게 나온다. 근데 그냥 이런저런 문제점이 있으니까 디스크립션이 확정되고 나면 따로 텍이나 워드 파일로 관리하는게 나을 듯 하다.


Checker


 주어진 소스 파일이 정답을 출력하는지 판별하는 채점 프로그램이다. 문제의 정답이 하나로만 정해져 있으면 기본으로 제공되는 lcmp.cpp나 ncmp.cpp 중 하나를 쓰면 된다. 스페셜 저지가 필요한 경우, testlib.h를 통해 제공되는 입력 데이터/솔루션의 출력 결과/소스 파일의 출력 결과에 대한 파일 스트림을 각각 inf/ans/ouf를 사용해 재량껏 구현하면 된다.
 유저가 제출한 소스의 결과에 어떤 값이 담겨 있든 정상적으로 동작해야 하므로 testlib.h에서 제공하는 파싱 함수를 사용해 값을 읽어들이는 것이 좋다.


Validator


TODO


Tests + Generator


TODO



'학업' 카테고리의 다른 글

Squeeze-and-Excitation Networks  (0) 2018.08.13
Batch Normalization  (0) 2018.01.23
카카오 Code Festival 본선 1~6번 풀이  (10) 2017.09.10
이 때까지 공부하는데 사용한 교재 목록 정리  (0) 2017.03.23
C++ 기법 모음  (0) 2016.09.18
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함