'2015/07'에 해당되는 글 7건

  1. 2015.07.29 6. testlib.h
  2. 2015.07.28 5. Files
  3. 2015.07.28 4. Statement
  4. 2015.07.22 3. General Info
  5. 2015.07.22 2. Make a problem & Commit Changes
  6. 2015.07.22 1. Register
  7. 2015.07.22 0. Introduction

6. testlib.h

Polygon 2015. 7. 29. 10:30

testlib.h는 5. Files에서도 잠깐 설명했지만, Codeforces와 Polygon의 설립자 Mike Mirzayanov가 만든, 문제를 검증하는 프로그램을 짤 때 사용하는 C++ 헤더 파일입니다. testlib.h는 test를 만들거나(Generator), test가 유효한지 판별하거나(Validator), 출제자의 답과 문제를 부는 사람의 답이 일치하는지 판별하는 등(Checker)에 사용됩니다. 실제로 testlib.h를 이용되는 경우가 많다고 이 링크에 적혀 있습니다.


testlib.h의 장점은 기본적으로 안정적으로 정수가 사용되는 문제이든, 문자열 문제이든, 실수 문제이든 Generator, Validator, Checker 등을 만들 수 있으며, 실시간으로 verdict를 알 수 있다는 데 있으며, 엔드 유저인 일반 사용자들이 더 쉽게 이러한 것들을 체크할 수 있다는 것에 의미가 있습니다.


testlib.h를 다운로드하시려면 이 GitHub 저장소에서 옆에 보이는 Download Zip을 누르시면 됩니다. 이 경우 몇 개의 코드 샘플과 같이 다운로드되게 됩니다. testlib.h는 Polygon 시스템에서만 사용할 수 있는 게 아닌, 일반적인 헤더 파일입니다. 


testlib.h를 사용하면서 필요한 함수들은 각 경우에 따라서 설명하는 형식으로 진행하겠습니다. 단 한 가지 팁을 드리자면, testlib.h는 자체적인 랜덤 함수를 쓰기 때문에 srand()나 rand() 함수의 사용이 금지되어 있으며, 이가 포함된 코드를 업로드할 수 없습니다. 그리고 또 한가지 주의점이 있습니다. testlib.h는 일부 함수들을 오버로딩하기 때문에, 항상 가장 먼저 include해야 합니다.


이후 만들어야 하는 것들이 코드만 따지면 Generator, Validator, Solution, Checker 등이 있는데 실제로 작동하려면 이 4개가 기본적으로 다 있어야 합니다. 일단은 Generator부터 강의하도록 하겠습니다. tests쪽이 testlib.h 외에도 알아야 하는게 하나 더 있어서 말입니다.


'Polygon' 카테고리의 다른 글

8. Tests (2 - Generator with Freemarker)  (0) 2015.08.09
7. Tests (1 - Generator with testlib.h)  (0) 2015.08.02
5. Files  (0) 2015.07.28
4. Statement  (0) 2015.07.28
3. General Info  (0) 2015.07.22
Posted by Evenharder
,

5. Files

Polygon 2015. 7. 28. 10:32

이번에는 기능적인 역할을 수행하는 곳은 Files입니다. 말 그대로 파일들을 저장하는 곳입니다. 그러나 Polygon의 Files는 파일들의 용도에 따라 분류가 되어 있기 때문에, 그리고 여기에 올리는 게 아니라 다른 데 올리는 파일들도 있기 때문에(ex. Statement에 첨부되는 사진 파일들), 그런 것들을 설명하겠습니다.


Files의 모습은 다음과 같습니다.


크게 3개의 탭으로 나누어져 있는 것이 보입니다. 각각을 설명하자면 다음과 같습니다.





  • Resource Files: Polygon 시스템에서 자동으로 추가해주는 기본적인 파일들이 있으며, 전체적인 토대를 이루는 파일들을 저장하는 곳입니다. 아무것도 하지 않아도 생기는 4개의 파일들의 역할은 다음과 같습니다.

    • olymp.sty: TeX가 만드는 pdf 파일의 형식을 지정합니다. 엄밀히 말하자면 LaTeX 파일의 형식을 지정하는 것이죠.

    • problem.tex: Freemarker Template으로 만들어졌으며, 문제의 statement를 담는 파일이 되어 pdf나 html 변환에 이용됩니다.

    • statements.ftl: 역시 Freemarker Template으로 만들어졌으며, LaTeX이 pdf으로 변환될 때 관여하는 것 같습니다.

    • testlib.h: Codeforces와 Polygon의 설립자 Mike Mirzayanov가 만든, 문제를 검증하는 프로그램을 짤 때 사용하는 헤더 파일이며, Polygon의 가장 큰 장점으로 볼 수 있을 정도로 대단히 중요합니다. 얼마나 중요한 지는 다음 포스팅에 나올 것 같습니다. 참고로 Auto-update를 켜 놓으면 자동으로 testlib.h가 업데이트 될 때마다 이 쪽도 업데이트가 됩니다.

  • Source Files: 나중에 만들 Checker, Validator 등의 코드 파일을 올리는 곳입니다. 다만 Solution 파일은 여기에 올려봤자 아무런 영향을 끼치지 않고, 별도의 저장공간이 따로 있습니다. Check sources for compilability는 실제로 컴파일이 정상적으로 되는지 체크하는 버튼입니다.

  • Attachment Files: 그 이외의 파일들, 즉 나중에 Package로 문제를 만드는데 추가적으로 넣고 싶은 파일들을 여기에 첨부하면 됩니다. 전형적인 첨부 파일의 예시랄까요.


이용약관에도 명시되어 있는 사실이지만, 이런 장소를 문제와 관련 없는 파일들의 개인 저장소로 사용하면 안 됩니다.



'Polygon' 카테고리의 다른 글

7. Tests (1 - Generator with testlib.h)  (0) 2015.08.02
6. testlib.h  (0) 2015.07.29
4. Statement  (0) 2015.07.28
3. General Info  (0) 2015.07.22
2. Make a problem & Commit Changes  (0) 2015.07.22
Posted by Evenharder
,

4. Statement

Polygon 2015. 7. 28. 09:47

Statement는 문제의 내용를 기술해놓는 곳입니다. 문제의 기술은 이미 General Info에서 하지 않았느냐고 말할 수 있겠지만, Statement에서는 TeX을 통해서 기술해야 한다는 점이 가장 큰 차이점입니다.


일단 TeX에 관한 설명은 뒤로 미루고 본문으로 들어가겠습니다. Statement 탭에 들어가면, 아직 하나도 만든 것이 없기에 다음과 같은 화면이 나타납니다.



언어를 하나 선택해야 하는데요, 기본적으로는 English와 Russian이 권장됩니다(언어 선택 탭을 누를 시 그 둘이 맨 위에 있는데는 이유가 있습니다. 기본적으로 Codeforces Round에서 그 두 언어만 공식적으로 지원하기 때문입니다). 개인적으로는 유니코드 충돌 문제 같은 것을 방지하기 위해 English를 우선시하며, 개발자분께서 아시아 언어는 자동으로 TeX으로 바꾸는 것이 어렵다는 을 올리신 바 있기 때문에 Korean은 접어두시길 바랍니다.


그럼 English를 선택하고 들어가겠습니다. 그러면 다음과 같은 화면이 나타납니다.




우선 위의 파란 탭부터 설명하겠습니다.


  • English: English statement로 이동하겠다는 하이퍼링크입니다. 다른 언어의 statement를 추가하면 그것도 역시 추가됩니다.

  • Review: 문제를 Codeforces 형식에 맞추어 html로 표시함과 동시에, 나중에 만들 Validator 코드 본문을 표시합니다.

  • Delete Current: 현재 statement를 삭제합니다.

  • Create New: 새로운 statement를 만듭니다. 참고로 statement는 언어별로 중복이 불가합니다.


그 밑의 3개의 하이퍼링크는 다음과 같습니다.


  • In LaTeX: 정해진 양식에 따라서 적어놓은 Statement와 General Info에서 적어놓은 입출력 방식, Time/Memory Limit이 포함된 LaTeX 파일 그 자체을 평문으로 보여줍니다.

  • In HTML: 역시 정해진 양식에 따라서 변환하나, 차이점은 html로 보여준다는 것입니다. 때문에 LaTeX에서 보이던 것과는 달리 보일 수 있습니다(특히 줄바꿈).

  • In PDF: 사실상 이 기능이 제일 중요합니다. 위에 있는 LaTeX 파일을 기본으로 하여 pdf 파일을 만들어냅니다. Statement는 결국 이 pdf 파일을 만드는 것이 목표입니다.


본문으로 들어가서 각 항목을 설명하자면 다음과 같습니다.


  • Encoding: 문제의 인코딩 설정입니다. 기본으로 설정되어 있는 UTF-8을 사용하시길 권장합니다.

  • Name: 문제의 제목입니다. Polygon에 저장되어 있는 문제 이름과는 달리 풀 네임으로 적으시면 되겠습니다.

  • Legend: 보통 전설이라는 뜻을 가지고 있지만, 여기서는 전문이라는 뜻을 가지고 있습니다. 문제의 기본적인 이야기를 적는 칸입니다. 다만 중요한 점은 이해가 잘 되게 써야 한다는 것이겠죠. 안 그러면 욕을 먹으니......

  • Input format: 입력 양식을 입력하는 곳입니다(ex. 첫째 줄에 정수 n이 입력됩니다. 그 이후 n개의 줄에 걸쳐 어쩌구 저쩌구)

  • Output format: 출력 양식을 입력하는 곳입니다.

  • Note: 추가 사항, 예를 들면 입출력 예제(이는 나중에 Tests에서 자동으로 추가됩니다)의 작동 방식을 설명한다든지를 적어놓으면 됩니다. 얼마나 구체적으로 적을지는 본인의 재량입니다.

  • Tutorial: Codeforces의 Editorial입니다. 문제의 풀이를 적으시면 되겠습니다. 풀이의 양 역시 본인의 재량입니다. 풀이를 자세히 설명할 것인지, 아이디어만 설명하며 끝낼 것인지......본인의 선택입니다. 고로 Tutorial 칸에 무엇이든, 입력하고 저장하면 3개의 하이퍼링크가 있던 곳 옆에 추가적으로 2개의 하이퍼링크(Tutorial in HTML, Tutorial in PDF)가 생깁니다. 역할은 말 그대로입니다.


여기까지 입력한 것들은 창 맨 밑에 있는 Save 버튼을 통해서 저장이 가능합니다. 


밑에 있는 Statement Resource Files는 옆의 Add File을 통해, 혹시 Statement에 그림 등이 들어가야 할 때 추가적인 파일을 올리는 장소입니다. 다만 여기에 올리는 파일은 다음과 같은 문자만 허용됩니다.

  • 알파벳 소문자 및 대문자

  • 숫자

  • .(Period, 0x2E)

  • _(Underscore, 0x5F)

  • -(Hyphen, 0x2D)


이 이외의 문자는 Illegal filename specified 라고 표기되며, 업로드가 거부됩니다. 이는 다른 파일을 업로드할 때도 마찬가지로 적용됩니다.


이제 TeX로 약간의 편집을 할 차례입니다. TeX은 일종의 조판 프로그램으로, 여려 명령어들을 이용해서 구조적인 글을 써 나가는 프로그램입니다. 주로 논문 등의 형식을 요구하는 것에 쓰입니다. TeX과 관련된 기초적인 지식은 구글링을 하시기 바랍니다. 사실 TeX은 그 명령어가 너무 많아, 궁금한 게 있으면 일단 구글링해야 합니다. 아무튼 본 블로그는 TeX에 관한 포스팅을 하는 곳이 아니므로, 간략한 팁 및 사용방법만 몇 가지 이야기하겠습니다.

  • 우선 TeX에서는 줄바꿈이 Enter를 친다 해서 바로 적용되지 않습니다. 줄바꿈 문자는 \\입니다. 그 이외에도 빈 줄 하나를 놓으면 줄바꿈이 이루어지지만, 빈 줄을 여러개 놓아도 줄바꿈은 한 번밖에 이루어지지 않습니다.

  • TeX에서는 일반적인 편집 모드(textmode)와 수식 편집 모드(mathmode)가 따로 있습니다. 일반적인 모드는 plain text를 입력할 때 사용하며, 수식 편집 모드는 흔히 이탤릭체로 표시되는 수식을 표현할 때 사용합니다.

  • 일부 특수 기호는 \를 앞에 붙여야 사용가능한 경우가 있습니다. 다만 일부 특수 기호는 수식 편집 모드에서만 사용 가능한 경우가 있습니다.
    (ex. _를 출력하려면 \_를 입력해야 합니다)

  • 그러한 특수 기호들은 이 사이트에서 직접 그려보면서 확인할 수 있습니다.

  • 수식 편집 모드에 접근하는 방법은 간단히 2가지가 있습니다. 첫번째는 $ 수식 내용 $의 형태입니다. 이 경우 $ 안에 있는 내용이 수식 편집 모드가 적용됩니다. 또다른 방법으로는 $$ 수식 내용 $$의 형태가 있습니다. 이 경우 $$ 안에 있는 내용이 가운데 정렬이 되며, 자동으로 줄바꿈을 해줍니다.

  • 수식 편집 모드에서 사용할 수 있는 주요 구문 중의 하나가 첨자입니다. 윗 첨자는 ^, 아랫첨자는 _로 연결합니다.

  • 그림 첨부는 다음과 같은 구문을 넣으면 해결할 수 있습니다. 그림이 'picture.jpg'라는 이름을 가지고 있을 때(jpg, bmp, png 등의 확장자들이 적용됩니다)


  • \begin{figure}[h]

    \begin{center}

    \includegraphics[scale=0.5,bb=0 0 501 75]{statement_create.jpg}

    \end{center}

    \end{figure}

    이를 설명하자면 다음과 같습니다.

    • \begin{figure}: 이것이 float한 figure라는 것을 의미합니다. float을 간단히 설명하자면 '페이지에 걸쳐서 나타나지 않는 것'입니다.

    • \begin{center}: \end{center}가 있는 곳까지 가운데 정렬을 하라는 의미입니다. \includegraphics: 여러 옵션을 사용하여 그림 등을 나타내는 함수입니다. [] 안에는 많은 것들이 들어갈 수 있지만, 여기서는 2개만 사용하도록 하겠습니다.

      • scale: 그림의 배율입니다. 0.5라는 것은 가로와 세로를 0.5배로 하라는 것입니다.

      • bb: BoundingBox라는 개념인데, 이 옵션은 Polygon 특유의 문제로 반드시 포함해야 합니다. 안 그러면 에러가 납니다. 일반적으로는 bb=0 0 'scale이 적용된 그림의 가로 크기' 'scale이 적용된 그림의 세로 크기'를 적습니다.

    • {}: 안에는 당연히 그림의 이름을 그대로 적어넣으면 됩니다. 기본적으로 ASCII 코드 인식 가능하지만 일단 Polygon에 파일을 올리려면 그렇게 해야 하기에 별 문제는 되지 않습니다.

  • TeX을 알고 계시는 분이라면, 각 항목을 편집할 때 \usepackage 같은 정의 헤더는 사용할 필요가 없으며, 사용해서도 안 된다는 것을 알려드립니다. 그리고 은근 많은 구문들이 사용 불가능하다는 것 역시 숙지하시길 바랍니다(ex. \begin{enumerate}, \textbf}.

그 외에 다양한 것들은 직접 구글링하시길 바랍니다. TeX도 은근 복잡하기 때문에......예시를 들자면 다음과 같습니다.

The first line contains a single integer $q\ (1 \leq q \leq 80,000)$, the number of the binomial coefficients Kevin wants to calculate with the mentioned function, C(int n, int r).\\
The following $q$ lines contain two integers $n\ (0 \leq n \leq 80,000)$ and $r\ (0 \leq r \leq n)$, separated with a single blank. The values $n$ and $r$ are the input values of the function, C(int n, int r).


이를 Statement의 Input format에 넣으면 다음과 같이 나타납니다.



\leq 등이 부등호로 대체된 것을 알 수 있습니다. 아무튼 이런 식으로 Statement를 기술하면 됩니다.





'Polygon' 카테고리의 다른 글

6. testlib.h  (0) 2015.07.29
5. Files  (0) 2015.07.28
3. General Info  (0) 2015.07.22
2. Make a problem & Commit Changes  (0) 2015.07.22
1. Register  (0) 2015.07.22
Posted by Evenharder
,

3. General Info

Polygon 2015. 7. 22. 11:43

Polygon 첫걸음은 General Info 적는 것에서 시작한다고 해고 과언이 아닙니다. 실제로 General Info(일반적인 정보) 의미하는 것처럼, 문제의 기본 골격을 설정해놓는 것이 General Info 역할입니다. 이는 다음 포스팅 설명한 Statement 겹치는 감이 없잖아 있지만, 분명한 차이점이 존재합니다.



  • General Info 모습입니다. 여기에는 문제의 프로그래밍적인 부분보단, 문제 자체를 설정하는 부분이라 보시면 편할 같습니다. 하나하나씩 뜯어보도록 하겠습니다.
  • Input file: 입력 방식을 결정합니다. 입력 데이터는 물론 파일로 존재합니다만, 이를 파일을 통해서 입력할지, 아니는 표준 입출력 방식을 사용할 결정합니다. 물론 이외의 선택지(ex. Output-only) 있겠지만 Polygon에서 지원하는지는 모르겠습니다.

    하지만
    왠만하면 stdin(표준 입력 방식) 사용하기를 권장하겠습니다. 파일 입출력도 물론 여러 대회에서 많이 사용하지만, Polygon 시스템 표준 입출력이 훨씬 안정된 상태이기 때문에 시리즈에서는 표준 입출력만을 사용하겠습니다.
  • Output file: 출력 방식을 결정합니다. 마찬가지로, stdout 사용을 추천드립니다.
  • Time limit: 시간 제한을 설정합니다. 250ms (0.25) 에서 15000ms (15)까지 가능합니다. 보통 1000ms 내지는 2000ms지만 문제에 따라 다양한 Time Limit 가능합니다.
  • Memory limit: 메모리 제한을 설정합니다. 4MB부터 1024MB까지 가능합니다. Codeforces Round 보통 256MB 사용하나, 특수한 풀이를 요구하는 문제의 경우는 Memory limit 상당히 낮게 잡는 경우도 많습니다.
  • Interactive: 문제가 Interactive 문제인지 설정할 있습니다. Interactive 문제란 특정한 함수를 이용 구현하여 주어진 과제를 수행하는 문제입니다. 대부분의 경우어떠한 함수를 구현하라 주어지고 일반적으로 main 함수를 제출하는 것이 아닌, 함수만 제출하게 됩니다. 말로 설명하기 힘드네요. 대충 이런 문제들이라 보면 되겠습니다. 아무튼 Codeforces Round에서는 제공하지 않습니다. 그래도 Polygon 시스템 상으로 만들 수는 있습니다. 다만 이를 만드는 과정을  시리즈에서 언급할 지는 모르겠습니다. 나중에 기회가 되면 리뷰하는 걸로…... 그래도 Codeforces 다음과 같은 정보 나와 있습니다. 그래도 이해가 안 되시면 한 번 topcoder에서 문제를 풀어보세요.
  • Well-formed: test(테스트 케이스) 특정 규격을 맞추었는지 나타냅니다. 항목을 체크된 상태로 test 생성시 규격에 맞게 일부 whitespace character control character 등이 추가 제거됩니다. 경우 test 저장할 ‘Added test has been reformatted because of the problem well-formed policy’ 라는 구문이 추가적으로 나타납니다. 규격을 해석하자면 다음과 같습니다.


    • 줄이 EOLN(End of Line)으로 끝나야 합니다. , 줄에 마지막에는 ‘\n’ (enter)문자가 와야 합니다. 예를 들면, 어떤 문제의 input 줄에 정수 하나로 끝일 , test 만들 정수 하나 집어넣고 반드시 ‘\n’ 와야 합니다. ‘\n’ 기준으로 작동하는 입력 함수들이 많기 때문입니다(ex. C scanf) ‘\n’ 기본적으로 Windows/Mac에서는 CR LF 두개의 char, *nix 환경에서는 LF 해석되는 문자이지만, Polygon 이를 알아서 내부적으로 변환해줍니다.
      만일 줄의 끝에 EOLN 없을 경우, 자동으로 ‘\n’ 추가됩니다.

    • character code 값이 32보다 작은 문자가 입력되지 않아야 합니다. ASCII 코드를 보면, 32 미만의 값을 가진 문자들은 대체로 control key이기 때문에, 일반적으로 입력받을 일이 전혀 없는 문자입니다. 여기에서 ‘\n’(CR : 0x0D / LF : 0x0A) 제외됩니다.
      만일 그러한 문자들이 있을 경우, 전부 SPACE(0x20)으로 교체됩니다.

    • 줄이 SPACE 시작하거나 끝나면 안됩니다. 이러한 경우가 있을 경우 해당하는 SPACE 문자는 제거됩니다.

    • 2 이상의 연속된 SPACE 없어야 합니다. 있을 경우, 단일 SPACE 문자로 대체됩니다.

    • 줄이 없어야 합니다. ‘\n’ 있는 줄이 없어야 합니다. ‘\n’ 있는 줄이 있는 경우, 해당 줄은 삭제됩니다.

    • 파일이 비어 있으면 됩니다.



Well-formed 여부는 옆에 있는 ‘Well-formed: true/false’ 통해 있습니다여기까지를 저장하고자 하시면 화면에서 바로 보이는 Save 누르면 됩니다.


이러면 Advanced 용도가 궁금해지죠. 복잡할 같지만, 정작 Advanced 들어가면 매우 직관적인 메뉴가 보입니다.



각각을 설명하면 다음과 같습니다.


  • Problem Name: 문제 이름입니다. Rename 통해서 문제 이름을 재설정할 있습니다. Rename Commit Changes 무관하게, 누르는 순간 적용되며, View Problems에서 Discard 한다고 해서 원래 이름으로 돌아가지도 않습니다.
  • Clone problem to: 문제를 해당 이름을 가진 상태로 복제하는 기능입니다. 주의할 점은 Clone 가장 최신의 revision 복제하는 것이기 때문에, 상태에서 Commit Changes 통해 저장되지 않은 변경사항은 복제되지 않습니다.
  • Delete Problem: 문제를 삭제하는 것입니다. 다만 문제를 삭제해도 내부의 데이터는 삭제되지 않고 서버에 남아 있게 됩니다. 애초에, 삭제된 문제도 View Problem에서 스크롤을 밑으로 내리면 보이는 Show Deleted에서 접근 가능하고, 심지어 Commit Changes까지 가능합니다. 다만 경우 문제의 이름이 해시값 마냥 이상하게 바뀌며, 괴상한 이름은 수정이 불가능합니다. 문제를 복원하지 않는 말이죠. 삭제된 문제는 문제를 선택할 보이는 Restore, 문제에 들어가서 General Info-Restore 통해서 복원될 있습니다.


이제 Advanced 나오면, 밑에 조그맣게 Tags Add tag 보입니다. Tag 보통 다음과 같은 2가지 이유로 사용합니다.


  1. 정해의 접근법을 나타내기 위해서 (ex. math, data structure, greedy, sqrt-decomposition)
  2. 문제 자체를 분류하기 위해서. 가지 양상이 있습니다. 첫번째로는 문제가 어떤 형태의 문제인지 나타내기 위해서 쓰거나(ex. strings), 아니면 문제가 어떤 대회의 문제인지 나타낼 쓰기도 합니다(ex. ioi2011, looksery-cup)

Tags 진가는 View Problems에서 필터링해서 나타납니다(라고 개발자님께서 말씀하십니다). 의미 있는 tag 문제에, 못해도 하나라도, 예를 들면 implementation이라도 추가하시길 바랍니다.


tags에서 밑을 보면 Statement description Problem tutorial 있습니다. 여기에는 각각 문제 설명과 문제 해설을 text 적으시면 됩니다. 문제 설명은 봐도 문제가 무얼 요구하는지 있게 적어놓아야 하고, 문제 해설은 Codeforces Editorial처럼 간략간략한 핵심 아이디어를 말하면서 풀이를 전개해나가시면 됩니다. 저장은 Problem tutorial 밑의 Save 누르시면 됩니다. 참고로 Draft는 일종의 임시 저장 기능이라고 생각하시면 됩니다.



어째 간단히 설명하는 감이 있지만, 부분은 다음에 설명할 Statements 겹치기 때문입니다.


여기까지가 General Info였습니다. 다음은 Statement입니다.


 

'Polygon' 카테고리의 다른 글

5. Files  (0) 2015.07.28
4. Statement  (0) 2015.07.28
2. Make a problem & Commit Changes  (0) 2015.07.22
1. Register  (0) 2015.07.22
0. Introduction  (0) 2015.07.22
Posted by Evenharder
,

Polygon 계정을 만들고 Login하면 View Problem 창에 있을 겁니다. 물론 방금 전에 계정을 만드셨으니 등록된 문제는 없겠지요. 그때는 간단히 New Problem 버튼을 누르면 됩니다.


이 때 문제의 이름을 설정하게 됩니다. 문제의 이름은 간단한 명칭으로 통용될 정도여야 합니다. 일반적인 문제 제목이 아니라 간단하게 'brackets' 'bang' 'flip' 이런 식으로 말입니다. 문제 제목에는 알파벳 소문자와 대시(-)만을 사용할 수 있습니다.


참고로, 문제 이름 가지고 깊은 고민하지 않으셔도 됩니다. 왜냐하면 문제 제목은 언제든지 바꿀 수 있기 때문입니다. 아무튼 문제 자체를 만드는데 성공하셨다면 Edit session에 왠지 누르고 싶어지는 Start가 나타나며, 이를 누를 경우 문제 제작이 시작됩니다.



그리고 드러서는 순간......뭔가 할 것이 많아보이는 창이 하나 뜹니다. 바로 문제의 Gerenal Info 창입니다. 


이 창의 역할에 대해서는 다음 포스팅에서 진행하도록 하겠습니다. 지금 주목할 것은 스크롤을 조금만 내리면 나오는 ‘Commit Changes’라는 버튼입니다.



Commit Changes는 지금까지의 변화를 Polygon 서버에 저장하는 기능입니다. 물론 이를 누르지 않고 그냥 창에서 나가도 기존의 변화 상태는 저장됩니다. 그러나 Commit Changes는 이 상태를 하나의 revision으로 저장하여 보존해놓는데 의미가 있습니다. Commit Changes를 누르면 다음과 같은 창이 나타납니다.



각 항목의 의미를 설명하자면 다음과 같습니다.


  • Problem: 문제 이름입니다.

  • Changes: 변화한 파일 및 디렉토리의 개수입니다. 문제를 만들기만 하고 적은 게 없는데 왜 Changes가 21이나 되냐고요? 문제를 만드는게 근간이 되는 파일이나 디렉토리 등이 기본적으로 생성되었기 때문입니다.

  • Commit message: 무엇이 변했는지 적는 창입니다. 버그 수정, 개선점 등의 업데이트 내용을 적으면 되겠습니다.

  • Warnings: 말 그대로 경고입니다. 아직 문제가 ‘제대로’ 만들어지지 않았다는 것을 의미합니다. 지금은 뭐 한게 없으니 경고가 우후죽순으로 생겨나지만, 하나하나 사라지게 될 겁니다.

  • Minor changes: 기본적으로 Commit을 할 경우, 이 문제에 작업하는 모든 사람에게 Commit Changes를 통해 이메일이 발송됩니다. 다만 굳이 이메일을 보낼 필요까지 없는, 약간의 사소한 업데이트 및 개선이라면 ‘Don’t send email notification(이메일 공지를 보내지 않습니다)’ 버튼을 눌러 이메일을 발송하지 않도록 할 수 있습니다.


위 사항을 숙지하고 Commit(확인) 버튼을 누르면……



별로 달라진 것이 없어 보이지만, 자세히 보면 Problem revision이 0에서 1로 된 것을 알 수 있습니다. 즉, 하나의 저장본이 생긴 셈입니다.


이제 View Changes에 들어가면 revision의 내용, 즉 어느 파일이 추가(A), 변경(M), 삭제(D)되었는지, 또 각 revision의 Commit Message가 나타납니다(‘Created a prob’). 특정 revision에서의 특정 파일을 다운로드받을수 있는 등, 자주 해서 나쁠 것이 없는 기능입니다.


이제 잠깐 다시 나와볼까요. 상태에서 상단 메뉴바에 있는 View Problems를 눌러보면……



약간의 변화가 생겼습니다. Modif.(수정 날짜)에 시간도 들어가 있고(시간은 다만 모스크바 시인 MST로 표기됩니다), Info에는 만들어가야 할 것들 : statements, tests, solutions, checker, validator 등이 보입니다. 문제를 계속 이어서 만드려면 Continue를, Commit Changes하지 않는 내용을 없애고 최신의 revision으로 되돌리려면 Discard를 누르면 됩니다(Discard는 문제를 삭제하는 것이 아닙니다).


다음 포스팅에는 General Info 항목부터 손을 보도록 하겠습니다.


추신. View Changes에서 각 revision을 보다보면 ‘switch’라는 링크가 있습니다. 그 revision으로 덮어쓰는 기능입니다만, 가급적 사용하지 마시길 바랍니다. 하위 revision으로 바꾼 후 Commit Changes를 하려고 하면 conflict, 즉 revision 간 충돌이 일어나, 문제를 열지 못하게 되기 때문입니다. 이때는 Discard를 함으로써 덮어쓰기 전으로 돌아갈 수는 있지만, 괜히 상황을 복잡하게 만들고 싶으신 게 아니면 누르지 마시길 바랍니다. 이미 언급했듯이, 하위 revision의 파일을 열람 및 다운로드가 가능하니까요.

'Polygon' 카테고리의 다른 글

5. Files  (0) 2015.07.28
4. Statement  (0) 2015.07.28
3. General Info  (0) 2015.07.22
1. Register  (0) 2015.07.22
0. Introduction  (0) 2015.07.22
Posted by Evenharder
,

1. Register

Polygon 2015. 7. 22. 10:31

Polygon에 일단 계정을 만들어 봅시다. 보시다시피, Polygon의 계정은 Codeforces와는 별개입니다.



뭐 입력해야 할 게 보이지요. 이 글을 읽는 분들이라면 당연히 영어를 잘 하시는 분들이겠지만 굳이 해석을 하자면 다음과 같습니다.


<입력 대상>


  • First Name: 이름을 입력하시면 됩니다. 영어로 입력하시든 모국어로 입력하시든 별 상관은 없습니다.

  • Last Name:  자신의 성을 입력하시면 됩니다.

  • Email: 자신의 이메일을 입력하시면 됩니다. 이메일은 나중에 문제를 변경하였을 때, 알림을 받는 용도나, Polygon 계정을 까먹었을 때 임시 비밀번호를 받는 곳으로 사용됩니다. 한 이메일 계정은 한 Polygon 계정에만 사용 가능합니다.

이름, 성, 이메일은 로그인 후 자유롭게 변경이 가능합니다.

  • Login: 닉네임입니다. Polygon handle이라 생각하시면 편합니다. Codeforces handle처럼, 영문이나 일부 특수기호만 사용하는 것을 권장합니다. 이 닉네임이나 위의 이메일을, Polygon에 로그인할 때 ID로 사용하게 됩니다. 이 닉네임에 글자수 제한이 있는지는 잘 모르겠습니다.

  • Password: 비밀번호입니다만, 영문에 특수기호까지는 지원할 겁니다. 가급적이면 유니코드나 확장 아스키 같은 문자는 집어넣지 마시길 바랍니다. 비밀번호 또한 글자수 제한이 있는지는 모르겠습니다.

  • Confirm Password: 방금 전 입력하신 비밀번호를 똑같이 쳐 주시면 됩니다.


닉네임은 변경이 불가합니다. 다만 비밀번호는 로그인 후 자유롭게 바꿀 수 있습니다.


그리고 Terms of use(이용약관) 이 나와 있습니다. 번역하면 다음과 같습니다;


귀하는 Polygon을 문제로 만드는 용도로만 사용할 수 있습니다. (역자 : P2P 같은 사이트가 아닙니다)

귀하는 실명을 사용해야 하며 귀하에 관한 정보는 정확하며 진실되어야 합니다.

귀하는 다음과 같은 악의적인 코드를 포함하는 파일을 제출하면 안 됩니다:

  1. 트로이 목마;

  2. 루트킷;

  3. 백도어;

  4. 바이러스.

당신의 코드는 다음과 같은 행동을 할 수 없습니다:

  1. 네트워크에 접근하는 행위;

  2. 설명문에 직접적으로 명시된 파일 이외의 파일과 상호작용하는 행위;

  3. 시스템 보안을 공격하는 행위;

  4. 다른 프로그램을 실행하고 프로세스를 만드는 행위;

  5. 파일 시스템 권한을 변경하는 행위;

  6. 서브디렉토리와 작용하는 행위;

  7. GUI를 만들거나 변조하는 행위(역자 : 예시로 Java의 JFrame 등이 있습니다);

  8. 외부 기기와 작동하는 행위(스피커, 프린터 등);

  9. 운영체제 레지스트리와 작동하는 행위;

  10. 그 외 Polygon의 기능을 저해하는 행위.


위와 같은 사항을 만족하고 정확하게 자신의 정보를 서술하였다면 Register(등록) 버튼을 누르시길 바랍니다. 여담이지만 Polygon은 계정 탈퇴가 불가합니다. 이건 Codeforces도 마찬가지이지만요.


그러면 로그인 창이 뜹니다. 방금 전 만드신 계정으로 로그인을 하면 다음과 같은 화면이 나타날 겁니다. 참고로 계정을 만드실 때 'Login'에 써놓은 닉네임으로 로그인하나, Email로 로그인하나, 알파벳의 경우 대소문자 구별을 하지 않습니다.




축하드립니다! Polygon 계정을 만드는 데 성공하셨습니다.

'Polygon' 카테고리의 다른 글

5. Files  (0) 2015.07.28
4. Statement  (0) 2015.07.28
3. General Info  (0) 2015.07.22
2. Make a problem & Commit Changes  (0) 2015.07.22
0. Introduction  (0) 2015.07.22
Posted by Evenharder
,

0. Introduction

Polygon 2015. 7. 22. 09:21

'Professional way to prepare programming contest problem'

(프로그래밍 대회 문제를 준비하는 전문적인 방법)

 

세상에는 수많은 정보 문제들이 있습니다. 간단한 연산 문제부터 복잡한 알고리즘이 필요한 문제들까지, 다양한 문제들이 있지만 이들도 근본적인 공통점이 있습니다. 기본적으로 '문제'이기 때문에, description, input, output, 그리고 (주로 deterministic) 정해 solution이 존재한다는 것이죠. 풀라고 만든 것이 문제니까요.

 

다만 이러한 정보 문제들이 잘 만들어졌는지는, 출제자의 책임입니다. 대체로 국제적인 대회에서는 팀으로 서로 의견을 나누고 지적해가며 문제들을 만들어내겠지만, 혼자서 문제를 만드는 경우도 생기기 마련이죠. 그 경우 문제의 검증은 어떻게 해야 할까요? 문제의 검증에는 생각보다 많은 요소들이 들어갑니다. Time limit, memory limit, input format, output, 허를 찌르는 test case, 그리고 합당한 description main solution 등등......이를 모두 다 확인하는 프로그램을 직접 만드는 것은 상당히 힘듭니다.

 

이런 측면에서 만들어진 Polygon이라는 사이트가 있습니다. Polygon은 널리 알려진 programming community Codeforces의 개발자 Mike Mirzayanov가 만든 사이트입니다. Polygon은 기본적으로 문제를 만들고, 관련 코드를 저장하고, 검증하고 수 있습니다. 여러 가지 기술적 장치를 통해 input이 올바른지, main solution이 올바른지, 혹시 countercase는 있는지, time limit안에 잘 돌아가는지를 판별할 수 있기 때문입니다.

 

Mike Mirzayanov Polygon을 만든 이유는 다음과 같습니다.

(이하 내용은 http://codeforces.com/blog/entry/14184 의 일부 번역입니다.)

  • 1. Polygon은 오류를 방지합니다.

Input/Output이 올바른지, Input의 공백 및 개행 문자가 올바르게 들어가 있는지(특히 문자열 관련 문제에서 이는 중요해집니다), 문제 설명에 들어가 있는 IO Example이 실제로 문제의 Test 1으로 들어가 있는지(이건 일종의 불문율이자 배려이죠) 등을 방지할 수 있습니다.

  • 2. Polygon은 문제를 정해진 규격의 zip 파일로 만들 수 있습니다.

저는 여러 대회에서 문제를 만들고, 또이를 배포할 때의 package의 표준 형식이 뭔지는 잘 모르겠습니다만, Polygon은 문제를 다 만든 후 Package의 형태로 Statement, Test, Checker, Validator, Solution 등의 출제자들이 만든 코드와 실행 배치 파일들을 하나의 zip 파일로 만들어 줍니다.

  • 3. Polygon은 파일을 장기적으로 보존합니다.

문제를 만들면서 우리는 종종 코드를 덮어쓰기를 합니다. 이러면 과거의 코드 상태를 알 수가 없게 됩니다. Polygon은 여러 revision를 저장함으로써, 버전 비교 및 '아 이때는 이래서 잘 안 됐구나'하는 식으로 분석을 할 수 있습니다. 또, 이러한 revision은 얼마나 문제를 만들었는가를 알려주는 이정표가 되기도 합니다.

  • 4. Polygon은 프로그래밍 문제 만들기의 장벽을 낮춰 줍니다.

Polygon은 서버 관련 지식 없이도 사용할 수도 있고, 전 세계 각국에서 만든 사용자들이 똑같은 양식으로 문제를 만들 수 있게 해 상호적인 참조가 무리 없이 가능합니다.

  • 5. Polygon은 문제 접근을 관리할 수 있습니다.

Polygon에 등록된 아무 계정에게나 자신의 문제를 공유할 수 있습니다. 이는 문제를 만드는 사람들끼리 협업할 수 있다는 뜻도 되며, 또 타인에게 문제를 내서 추가적인 피드백을 받을 수 있다는 뜻도 됩니다.

  • 6 . Polygon은 문제점을 올릴 수 있습니다.

흔히 Issue tracking이라 불리죠. 문제를 혼자 만들든, 같이 만들든 이는 매우 좋은 기능입니다. 서로의 문제점 및 버그를 지적할 수 있고, 진행 상항을 공표할 수도 있으며, 문제의 방향성을 유지하는데 공헌하기 때문입니다.

  • 7. Polygon은 Online Judge랑 쉽게 통합 가능합니다. 

2번이랑 일맥상통한데, Polygon의 Package는 기계가 읽고 처리할 수 있도록 짜여졌기 때문에 쉽게 Online Judge에 그 Package를 올리면 굳이 손으로 수많은 Test를 복붙할 필요가 없게 됩니다.

  • 8. Polygon이 없다면 복잡한 소프트웨어들이 필요합니다.

직접 우리의 컴퓨터에서 한다면 LaTeX로 작성된 Statement를 자동으로 파일로 출력해주는 프로그램, 여러 언어(C++, Java, Python 2&3 등......)들의 소스 코드를 받아서 실행 및 결과를 내놓는 프로그램이 필요하고, 이는 상당히 기술적인 부분을 요구하며 까다롭습니다.

  • 9. Polygon은 보다 안전합니다.

https를 쓰고, 그 외 복잡한 암호화를 쓰는 것 같습니다.

  • 10. Polygon은 문제들을 분류할 수 있습니다.

태그와 필터, 검색 등으로 500문제들 속에서 원하는 문제들을 쉽게 찾을 수 있습니다(라고 개발자님께서 말씀하시는군요).


아무튼 이러한 기능들을 가진 Polygon이고, 실제로 사용하다 보면 그 강력함에 놀라지 않을 수 없게 됩니다. 실제로 Codeforces에 올라가는 문제들도 다 이 Polygon으로 만들어집니다(Mashup Contest에 본인이 만든 Polygon 문제를 올릴 수 있는 모양이지만, 저는 잘 모르겠습니다). 다만 마음에 걸리는 점이 몇 가지 있습니다.

  • 1. 업데이트가 2011년에 멈췄다......는 아닙니다.

Polygon update log 2011년에 멈추어 있는 것이 사실이지만, 몇 달마다 약간의 개선은 가해지고 있습니다.

  • 2. 진입 장벽이 결코 낮지 않습니다.

일단 "testlib.h"라는, 이분이 직접 만드신 헤더 파일을 이용해서 코딩도 해야 하고, LaTeX html로 바꾸는 과정에서는 또 #begin{enumerate} #indent 같은, 비교적 간단한 구문도 사용하지 못하고, 어떤 파일을 먼저 만들어야 하는지 설명도 없고...... 아무튼 진입장벽이 낮다 할 수는 없습니다. Polygon 내의 도움말도 빈약하고요. 물론 기에서 더 자세한 도움을 받을 수 있긴 합니다.

  • 3. 그리고 영어......

Codeforces Contest를 해석할 정도면 충분하지만, 일단 영어입니다. .

 

실제로 도움말이 거의 없습니다. Google codeforces polygon 쳐도 딱히 유익한 정보가 많이 나오지도 않고요. 영어로도 거의 없는데, 한국어로는 더욱 더 없겠죠. 그래서 약간의 가이드라인이라도 될 수 있는 포스팅을 해보자는 것이 저의 목적입니다.

 

'Polygon' 카테고리의 다른 글

5. Files  (0) 2015.07.28
4. Statement  (0) 2015.07.28
3. General Info  (0) 2015.07.22
2. Make a problem & Commit Changes  (0) 2015.07.22
1. Register  (0) 2015.07.22
Posted by Evenharder
,