코딩/코딩 이모저모

Semi - Game Cup 2 일기장

stonejjun 2021. 5. 24. 13:43

이번에는 생일도 지났겠다... 그리고 워낙 바쁘기 때문에 천천히 준비하려고 한다. 그래도 준비 과정을 다 기록을 해야 추후에 추억도 되고, 나중에 도움도 되기 때문에 준비과정을 기록해 보려고 한다. 

5.18
그래도 뭔가를 해보기 위해서 semi-game cup 슬랙을 팠다. 지난번에 해본 결과 슬랙속의 하나의 채널을 운영하는 것보다 따로 슬랙을 파서 진행하는 것이 좋은 것 같다.
slack에 운영진 blackking26과 karuna를 초대했다. 그리고 idt 검수진에 참여해 본 결과 notion이 대회 준비에도 굉장히 쓸만하다는 사실을 알게 되었다.

5.19
내가 미리 구상했던 미스터리 게임을 말했고 변화를 주려고 생각했다. 미스터리 게임은 번외문제로 많은 사람의 관심과 참여를 유발하려고 만들었다. 원래 생각한 방식은 예제로 더 지니어스 방송 - 미스터리 게임에 나왔던 몇 개의 상황을 주고, 예제와 문제 제목과 구글링을 통해서 미스터리 게임의 규칙들을 코딩하는 문제로 생각했다. 이를 참가자가 질문을 활용한다던지, 모든 규칙에 대해서 일정 답을 출력하게 하는 두 수를 찾는다던지 등의 다양한 방식으로 바꿀 수 있을 것 같다.
고인물의 리듬게임 2에 대한 간단한 아이디어가 나왔다.
미리 생각해 놓았던 다리 건너기 게임은 문제와 풀이가 거의 완성되었다.

5.21 
Tamref에게 idt cup에 사용했던 notion의 템플릿을 복사해도 된다는 허락을 받았다. 내용을 싹 지우는 귀찮은 노가다는 미래의 나에게 미뤄두었다.

5.25~5.26
karuna와 고인물의 리듬게임 2를 같이 구상중이다... dp로 하고 싶은데 감은 잘 안잡힌다.

5.28~5.29 
ahgus89가 또 ㅈ수론 문제를 들고 왔다. 수식 알아맞히기 게임 1은 구상이 되었고 2도 구상중이라고 한다. 
지난번 갓문제를 내주었던 dillion에게 자문을 다시 한번 구했다. 엄청난 정리를 던져주었고 그것을 토대로 기둥과 성벽 디펜스 게임을 만들었다.
솔직히 이쯤되면 semi-game cup2는 내가 운영을 하고 총대를 매는 역할이고, 솔직히 stonejjun의 대회가 아닌 설곽 주최 대회라고 하는 편이 맞을 듯 하기도 하다. 설곽 학생들이 각자 잘하는 분야의 문제 아이디어를 내고 stonejjun이 다듬어서 출제하는 문제들... 내가 좀 더 분발해야겠다.
사실은 게임이론 관련 아이디어를 지난번에 너무 박박 긁어서 사용했다. Sprague–Grundy, misere nim, temperature game theory, red blue hackenbush, northcott's game... 새로운 것을 계속 찾고 있지만, 아직도 새로운 것이 안나올 정도이다. 

~6.10
다들 모의고사, 기말고사 등으로 바쁜시기이다. 그래도 다른 학생들은 거의 다 끝났는데, 나만 기말고사가 끝나지 않았다. 앞으로 대략 2주는 바쁠예정. 굉장히 일반적인 dp+스프라그 그런디 개념 문제 하나를 생각했다. 게임컵 기초문제로 손색이 없을 것 같다. 초콜릿 자르기 게임이 될 것 같다. 

6.28
이제 다시 작업을 시작해야 할 것 같다. 후원을 구해보고 있다. 이런 건 처음이라 어색하고 좀 많이 서투른 것 같다. 그래도 나름 ppt를 만들어서 보내놨는데 뭔가 다 이상한것 같다... 다 경험이니까... 실패해도 어쩔 수 없다...

6.29 
일단 나온 문제들에 대해서 지문 작업을 하고 있다. computational game theory는 계속 찾아보고 있는데 답이 안보인다...

7.6
인터렉티브 문제를 제작 준비중이다. 초콜릿 쪼개기 정해 코딩을 완료 했다.

7.8 
재밌는 인터렉티브 문제 구상이 잘 되간다. 하지만 인터렉 문제 세팅이 너무 어려워서 이에 대해서 공부를 좀 해야할 것 같다. 풀이를 몰라서 묻혀놓았던 ㄱ 경비병 게임을 gs18115 가 살릴 수 있을 것 같다! 

7.9
버근가? 진짜인가? 정말로? 믿을 수 없는 일이 일어났다. 넥슨 측에서 semi-game cup에 후원을 결심해주셨다. 지금까지 일기장에 넥슨에 후원을 구하는 일기장 내용이 좀 있었는데, 보시는 분들에게는 죄송하지만 내용을 거의 다 지웠다. 아님 말고 식의 너무 무대포로 진행을 한 것 같아서 과정을 남기기가 좀 그렇다... (그만큼 내가 추진력이 좋다는 소리일지도?)   아무튼 더 많은 사람의 대회 참여를 독려할 수 있고, 좀 상품이 걸리는 좀 느낌 있는 대회가 된 것 같아서 굉장히 기분이 좋다. 나름 품격이 올라간 느낌이라고 해야하나? 오늘 샤워할 때 거울 보면서 속삭여야겠다. 내가 누구? "넥슨 후원 대회 개최자" 

7.10
어깨가 조금은 무거워졌다. 걸린만큼 실수 없이, 깔끔하게 대회를 마쳐야 되지 않겠는가? 문제의 퀄리티도 좋은 문제들을 많이 뽑아내야 할 것이다. 솔직히 지금까지 나온 문제들도 엄청 나쁜건 아니지만, 작년의 문제들에 비해서는 약간 아쉬운 점도 있는 것 같다. 좋은 퀄리티의 문제를 뽑아내는 일에 좀 더 고민을 해봐야 할 것 같다.  

~7.12
계속해서 다른 무엇인가 할 일이 존재한다... 이게 아닌데... 그래도 그 와중에 가위다위보 대진표짜기의 인터렉티브 질문 부분을 완성했다!!! 질문 밖의 관찰 부분을 생각해냈고, 문제를 풀기 위해서 얻어야 하는 정보를 깔끔하게 정리해놨었다. 하지만 그 정보를 어떠한 질문 쿼리를 통해서 얻게 할지 고민하고 있었는데, 굉장히 수준 높은 문제가 나오게 된 것 같아서 굉장히 기쁘다. 그런데 지문을 새벽에 써서.... 많이 심각하다. 사실은 좀 역겨운 지문을 의도했기 때문에 오히려 성공한 지문일지도? 하지만 그와 별개로 전체적인 지문에 대한 검수는 확실히 필요하다고 생각한다.

7.13
인력 79brue와 azberzibiou를 데려왔다! 8월에 다른 대회가 너무나도 많아서 피하고 피하다 보니까 갑자기 8.8 에 하게 되었다. 8월 중순 즈음... 여유롭게 생각을 하고 있었는데 이거 아무래도 생각보다 심각한 것 같다. ㅎㅎ ㅋㅋ ;;

7.14
8.8. 결국 대회 준비의 시작은 문제 생성. 문제의 아이디어를 내야하는 상황이 되었다. 그래서 작년에 문제를 어떻게 냈는지 복기를 해봤고, 기존의 문제를 풀다가 문제를 잘못 해석하거나 잘못 이해를 해서 변형된 문제를 사용한 것을 생각했다. 그 생각을 하고서 내가 지금까지 풀었던 문제들을 쭉 살펴보았고, 내가 특이하게 풀어서 쓸만한 테크닉을 정리하였다. 그 중에서 한 가지를 사용하여 새로운 문제인 마법 농구 게임 문제를 만들 수 있었다. 
초콜릿 쪼개기 게임에 변화가 있었다. dp 배열을 찍어보니까 규칙이 나왔다. 그런데... 규칙이 어디서 많이 본 규칙이었다. 왜 전혀다른 두개의 문제에서 같은 식이 겹쳐 보이는걸까? 정말 게임이론은 알다가도 모르겠다. 마음같아서는 정말 진짜 DP로 풀게 하고 싶은데 제한을 늘릴 수 있는 것을 확인하고서 제한을 늘리지 않는 대회 문제 제작자가 있을까? ㅎㅎ 이건 못참지.

7.15 ~ 7.16 
so busy...
그와 별개로 넥슨 측에 요구했던, 문제 지문에 넥슨 IP활용에 관한 연락이 왔다. 정확히 지문을 알려주거나, 이미지, 게임명, 캐릭터 명 중에 어떤 파트를 사용할지를 알려주어야 된다는 내용이었다. 따라서 넥슨 IP를 활용하여 지문을 만들고 싶으면 7.18까지 그 지문을 만들어서 보내드려야 한다.

7.17
7개의 확정 문제와 4개의 후보문제가 정리되었다. 일정은 8.8 하루종일 대회하는 것으로 결정되었다. 하루종일 관리하는 것이 빡세지 않냐고 물어볼 수도 있는데, 본인 작년에는 대회기간이 2일 내내였다. ㅎㅎ
blackking이 2개의 문제를 풀이와 함께 들고 왔다. 그 중 한 문제는 나의 화려한(?) 지문 메이킹 실력으로 넥슨 향을 맛있게 첨가하였다. 그렇게 만든 지문은 연락을 보내놓았다. 
blaccking의 문제는 스페셜 저지가 있어야 했다. 졸지에 나는 이번 대회를 통해서 처음 해보는 실수 오차 문제 세팅, 인터렉티브 문제 세팅, 스페셜 저지 문제 세팅을 다 해야되게 생겼다. 처음해보는 것들이 너무 많아서 생각보다 할일이 많아졌고, 일정이 빡빡해졌다는 느낌을 받게 되었다. 실수 문제 세팅을 해본 경험자를 찾아다녔고, 키파님을 찾을 수 있었다. 갑작스러운 실수 문제 세팅 질문에도 흔쾌히 답변을 해주신 키파님께 이자리를 빌어 감사의 말을 드리고 싶다.

7.18
문제의 제목을 정하거나 notion을 정리하는 등의 운영을 위한 인터페이스 적인 것들을 정리하였다. 

7.19
 한문제를 추가하여 사용할 9문제를 확정지었고, 추가할 수도 있고 안할수도 있는 1문제의 예비군이 있다. 추가한 한 문제는 많은 사람들이 참여하고 관심을 가질 수 있도록 정말 basic하고 쉬운 입문용 게임 문제를 만들었다. 
 KOI 검수에 참여하느라 지금은 바쁜 tamref과 18115가 26일부터 합류할 예정이고, 계속해서 검수할 사람들을 불러오고 있다. 제대로 된 검수가 진행되기 위해서는 제대로 된 지문이 먼저 갖춰져야 하기 때문에 지문 명의 jh05013을 불렀다. 죽었던 지문들이 되살아나는 느낌? 없었던 디테일이 채워지는 느낌. 명의를 바라보는 환자의 어머니 같은 마음이랄까?
 다 만들고 나니까 스프라그 그런디를 쓰는 문제가 없다... 세미게임컵인데.. 이게 맞나?

7.20
초콜릿 쪼개기 게임과 인증된 쉬운게임의 풀이 코드와 데이터를 제작하였다. 일단 스페셜 저지를 건드리지 않아도 되는 것부터 차근차근 해나가는 것이 좋을 것 같아 내린 결론이다. 두 문제는 입출력 자체가 간단하기 때문에 그렇게 공을 들이지 않고도 간단하게 세팅을 마칠 수가 있었다.

7.21
초콜릿 쪼개기 게임과 인증된 쉬운게임의 검수가 굉장히 원활하게 이루어지고 있다. 사실 그렇게 어려울 것도 없다. 

7.22
 마법 농구 게임을 코딩하다가, 많은 문제점을 발견했다. 1. 내가 생각했던 풀이가 내가 원하던 형식으로 흘러가지 않았다. 2. 문제의 지문이 나의 의도와 맞지 않았다. 원래 상태의 지문이었다면 풀 수 없는 굉장히 이상한 형태의 문제가 될 뻔 하였다. 그래서 지문을 수정하였다.
 애초에 한 문제에 한 가지 게임을 담고 있다는 것 자체로 지문이 쉽지 않은 것은 확정이다. 우리가 온라인게임이든 보드게임이든, 처음 게임을 접하게 되면 새로 지칭되는 용어와 개념, 그리고 배워야 할 지식들이 굉장히 많다는 것을 느낄 수있다. 대회의 컨셉으로 인해 각 문제의 지문에서 그 게임에 대한 설명이 필요하고, 그렇기 때문에 지문이 보드게임 설명서 마냥 한 번에 이해하기 힘들어지게 된다. 그래도 최대한 노력중이기는 하다. 그래서 제일 중점을 두고 있는 부분으로 처음 이 지문을 읽고 어떻게 이해하는 가에 대해서 검수자들에게 의견을 많이 받고 있다.
 대회 세팅 경험이 많은 justicehui를 검수자? 정확히는 자문위원단으로 초청했다. 고스트 코딩왕을 통해 내 스페셜 저지 문제 세팅을 도와줄 예정이다. 

7.23
 마법 농구 게임의 지문을 수정중이다. 지문이 내 의도를 담고 있는가? 다른 사람들이 이 지문을 보면 어떤식의 풀이를 접근할까를 열심히 고려하였다. 데이터는 일단 만들어 놓고 추가를 해야할 것 같다. 적절한 시간제한과 범위 증가로 풀이를 제한하려고 한다. 이게 진짜 시간 복잡도가 개선된 풀이가 나오게 되면 참을 수 없다. 
 문제가 어려워지는 과정.
1. 어 이거 시복 줄일 수 있는데?
2. 너무 간단한 것 같은데 역추적 넣을까?
3. 너무 간단한데 쿼리주면 어떻게 되냐?

7.25
수식 알아맞히기 퀴즈 게임이 채점 가능 상태가 되었다. 모와 ㅈ수론에게 박수를!

7.26
 루미너스 게임의 세팅이 되어가고 있다. 일단 삼신기 중에 스페셜저지는 그렇게 막 어렵지는 않았다. 세팅 과정에서 정해 코드를 살짝 봤는데... 어질어질 하다. 이게 맞나 싶다. 
 tamref과 79brue에게 인터렉터 예제를 받았다. 처음 해보는 것들을 이렇게 원활하게 진행할 수 있는 것은 좋은 지인들을 둔 나의 승리! 사실 그거와 인터렉터를 내가 직접 짤 때 얼마나 걸릴지는 별개이다...

7.27
 8월 1일이 되어서야 이것을 쓰고 있는 내 성실성이 ㄹㅈㄷ! 사실 어렸을 때 다들 일기 매일매일 꼬박꼬박 쓰지는 않았잖아요? 루미너스 1차 세팅을 완료하고 체커 검수까지 깔끔하게 끝마쳤다. 이제 인터렉티브로 들어갈 차례.
 Aeren님과 gs18115님이 합류했다! 

7.27~7.28
 어둠의 게임 대진표 - 인터렉티브 문제를 세팅하는데에 집중했다. 세팅은 전체적으로 완료되었지만, 내 풀이 코드를 보니까 무조건 틀린 부분이 1부분 이상 존재할만한 코드였고, 인터렉터도 딱 구색을 갖출 정도의 인터렉터였다. 인터렉터에 대한 지식이 별로 없다보니 인터렉터가 꼼꼼하게 작용하지 못하는 것 같은 느낌이었다. 그래서 고쳐달라는 SOS를 던져놨다. 

7.29
지문을 전체적으로 깔끔하게 마지막으로 다듬었다.
어제와 2일에 걸쳐 9박스 가량의 넥슨 후원 물품이 도착했다. 지금 방 한쪽 구석을 덮고 있는데 어질어질하다. 사실 애초에 내 활동 반경이 거의 0에 수렴하기 때문에 보관을 하고 있는 것 자체는 그렇게 어렵지는 않다. 이 자리를 빌어 다시 한번 감사하다는 말을 드리고 싶다. 

7.30
공지를 완성시키고 공지를 쓸 타이밍을 잡고 있다. 별일 없는 하루.

7.31
tamref 님이 인터렉터를 열심히 봐주셨다. 예상대로 굉장히 문제가 많았다. 풀이에도 한 두 부분정도 오류가 있었으며, 인터렉터는... 말을 안하려고 한다. 그리고 간과했던 점은 cout.flush()가 시간을 정말 많이 잡아먹는 다는점. 그래서 제한을 줄이고 전체적인 수정이 필요할 것 같다. 

8.1 (근데 이제 8.6일에 작성하는)
성벽 디펜스 게임의 세팅을 진행했다. 정해 코드 관련해서 jh05013님이 도와주셨고, 실수 오차 세팅은 실수 오차 범위를 계산 한 후에 1e-6 정도면 충분히 풀 수 있도록 제한을 설정했다. 가장 신기했던 부분은 1e-6 오차 세팅 체커가 폴리곤에 존재한다는 점이다. 
마법 농구 게임의 지문 대규모 공사를 펼쳤다. 이 부분이 수정되지 않은 이유가 지문을 잘 작성했기 때문이 아니라 내가 쓴 지문이 손대기 어려울 정도로 이해가 안되었기 때문이었다... 그래도 많은 토론 끝에 깔끔한 지문이 완성되었다. 
원래 notion을 썻었는데 많은 사람의 의견에 따라 구글 스프레드 시트로 옮겼다... 
백준에 공지글을 올렸다... 이제 더 이상 물러날 곳은 없다. 보통 공지글이 딱딱하니까 그냥 나폴리탄 규칙 괴담 느낌을 첨가해봤다. 이 밈이 막 유명하지는 않아서 의문을 품는 분들도 많은 것 같지만, 그래도 나름 관심을 잘 끌었다고 생각한다. 

8.2~8.3 
하나 둘씩 완성이 되어가고 있다.

8.4
성벽 디펜스 게임의 방향성에 대한 첨예한 토론이 오고갔다. 예외처리를 증가시킬 것인가 or 문제를 깔끔하게 만들 것인가. 다양한 의견과 투표를 통해서 문제를 좀 깔끔하게, 예외처리가 없도록 만드는 방향쪽으로 진행을 하게 되었다.
대진표 짜기에 문제가 생겼다. 메모 - 인터렉터는 rnd,next 함수가 의미 없이 모든 상황에서 같은 시드값을 뱉는다. 그냥 ! N을 출력하는 코드를 짰는데, 다 맞아버렸다... 그래서 인터렉터의 내용을 제너레이터 쪽으로 옮기는 대대적인 수정을 거쳤다. 그 과정에서 정해코드도 약간의 코딩 미스가 있었던 것이 밝혀져서 굉장히 애를 먹었다. 그래도 마무리를 지었고, 또 한문제의 세팅이 완성되었다. 

8.5
전체적으로 데이터가 저격 데이터까지 완성된 문제를 stack에 모두 옮겼다. 저격데이터가 없는 문제들은 다양한 저격데이터 들을 만들었다. 데이터 제작과정을 진행하면 진행할 수록, 뭔가 sg1 때 데이터 제작 날먹을 했다는 생각밖에 들지 않는다. 

8.6
루미너스 게임 검수를 위해서 풀이를 들었는데... 어질어질하다. 
가위바위보 대진표짜기는 채점이 너무 느려서 제출 순위를 2로 미루기로 하였다. 과연 인터렉티브에 겁을 먹지 않고 제출할 사람이 있을지는 의문이지만...

8.7
마지막 날이다. 하지만 scpc가 있어 실질적인 준비 시간은 3시간이고, 이를 사전에 인지하고 있었기 때문에 거의 준비는 완료된 상태이다. B는 scpc를 안하는 blackking 담당이기 때문에 오늘 마무리를 하면 된다.
scpc가 끝나고 전체 데이터를 옮겼다. 그 과정에서 루미너스 퍼즐게임의 input,output 데이터가 너무 커서 polygon packaging 이슈가 걸렸다. ㅋㅋㅋ 진짜 대단하다. output을 잘 조정하는 것으로 끝났다. 마지막으로 stack에서 모든 풀이에 대한 최종 점검을 하고, 시간을 조정했다. 전체적으로 데이터 양도 많고, 시간제한도 일반적이지 않은 문제들이 있어, 채점이 엄청 오래 걸리는 몇몇 문제들이 존재하게 되었다. 하지만 그런 문제들은 제출이 없어서 상관이 없지 않을까?
올해도 드디어 길고 긴 준비기간이 끝나고, 이 대단원의 마침표를 찍을 날이 왔다. 3,2,1.