'2015/07/28'에 해당되는 글 2건

  1. 2015.07.28 5. Files
  2. 2015.07.28 4. Statement

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
,