차이점

이 페이지의 선택한 이전 버전과 현재 버전 사이의 차이점을 보여줍니다.

차이 보기로 연결

ioccc [2012-10-01 00:47] (현재)
lifthrasiir 새로 만듦
줄 1: 줄 1:
 +====== IOCCC ======
  
 +http://ioccc.org/
 +
 +International Obfuscated C Code Contest (국제 [[코드난독화|난독화]]된 [[C언어|C]] 코드 컨테스트). 말 그대로 C 코드를 얼마나 창의적으로 이상하게 만들 수 있는가를 겨루는 온라인 [[프로그래밍대회]]. 그 시초는 무려 [[유즈넷]] 시절인 [[1984년]]으로 거슬러 올라가며, 가장 최근에 4년간(2007~2010) 대회가 안 열린 적도 있지만 어쨌든 온라인 상에서 현재까지 유지되고 있는 가장 오래된 프로그래밍 대회로 자리잡고 있다. 가장 최근의 21회차 IOCCC는 2012년 8월~9월 사이에 열렸다.
 +
 +딱히 어느 코드가 더 창의적으로 이상한가를 정량적으로 나타낼 수는 없는 관계로, 모든 심사는 심사위원들이 코드들을 리뷰해 가면서 순차적으로 덜 이상하거나 창의적이지 않은 코드들을 제거해 가며 이루어진다. 이런 주관성 때문인지는 몰라도 IOCCC에서 수상한다고 딱히 상품이 있는 건 아니다. 그냥 수상해서 웹사이트에 올라가는 걸로 끝이다(...). 하지만 IOCCC에서 수상하는 것 자체가 보통 쉬운 일이 아니기 때문에 일부러라도 이름을 올리기 위해서 참가하는 사람들은 꽤 많다. 전통적으로 참가자 수나 몇 차례 리뷰를 거치는지는 공개하지 않으나(([[http://www.ioccc.org/faq.html|IOCCC FAQ]])) 매해 수백건을 넘는다는 건 기정사실화된 것 같다. 코드에는 참가자의 설명(이 역시 전통적으로 "힌트" 파일이라고 불려 왔다)이 붙을 수 있으며, 수상자가 발표된 이후에도 코드를 약간 수정하거나 설명을 변경하거나 하는 과정을 거치기 때문에 실제 코드 발표는 좀 더 늦게 이루어진다. 코드는 리뷰 과정에서는 익명으로 리뷰하기 때문에 한 사람이 여러 코드를 내서 모조리 수상하는 것도 가능하다.(([[2012년 현재]] 최고 기록은 3개. ''1996/schweikh{1,2,3}'', ''1998/schweikh{1,2,3}'', ''2011/toledo{1,2,3}''.))
 +
 +===== 수상작 =====
 +
 +첫 해, 즉 1984년 수상작은 좀 황당하기는 해도 생각보다 어렵진 않았다. 그러나 시간이 지날수록 사람들의 [[잉여력]]은 폭발하여, 시간이 지날수록 말도 안 되는 것들이 수상하는 진풍경이 벌어지고 만다. 이 중 주목할 만한 것들 몇 개를 소개한다. 참고로 IOCCC 수상작은 보통 연도와 파일 이름을 합쳐서 ''2012/senokay'' 같은 식으로 부른다. <del>어라... 어째 눈에 익은 것 같은데</del>
 +
 +  ? 1984/mullender
 +  ! [[http://www.ioccc.org/1984/mullender.c|코드]]/[[http://www.ioccc.org/1984/mullender.hint|힌트]]. **C 코드가 아니다**. ''main'' 함수는 함수가 아니라 __[[VAX]]/[[PDP-11]]에서 동시에 돌아가는 포터블한 기계어 코드를 담은 배열__로 구현되었다. 첫 해 출품작이자 규정 변경으로 이런 코드가 더 이상 나올 수 없다는 점에서 IOCCC 심사위원들은 이 코드를 지금까지의 참가작 중에서 최고로 뽑는 것 같다.
 +  ? 1985/shapiro
 +  ! [[http://www.ioccc.org/1985/shapiro.c|코드]]/[[http://www.ioccc.org/1985/shapiro.hint|힌트]]. 랜덤한 [[미로]]를 출력한다. 가짜 [[C언어]] 개발자 인터뷰에서 "이 코드가 실행될 때까지 컴파일러를 뜯어 고쳤다"는(...) 그 코드가 여기에서 나왔다.
 +  ? 1988/westley
 +  ! [[http://www.ioccc.org/1988/westley.c|코드]]/[[http://www.ioccc.org/1988/westley.hint|힌트]]. [[원주율]]을 계산하는 매우 비효율적인 알고리즘. 코드 모양이 원 모양이다.
 +  ? 1991/dds
 +  ! [[http://www.ioccc.org/1991/dds.c|코드]]/[[http://www.ioccc.org/1991/dds.hint|힌트]]. [[베이직]] 인터프리터. 엄밀히 말하면 인터프리터가 들어 있는 바이트코드를 실행하는 바이트코드 인터프리터. 그러나 이 때까지만 해도 그들은 2001년에 C 컴파일러가 나타날 줄은 꿈에도 생각하지 못 했다(...).
 +  ? 1994/smr
 +  ! [[http://www.ioccc.org/1994/smr.c|코드]]/[[http://www.ioccc.org/1994/smr.hint|힌트]]. **세상에서 가장 작은 [[콰인|자기 자신을 출력하는 프로그램]]**. 얼마나 작냐 하면 **0바이트**이다. (실제로는 [[Makefile]] 장난을 좀 쳐서 호환성을 확보했다.) 이 코드 이후로 "소스 코드는 1바이트 이상이어야 함"이라는 조항이 규칙에 추가되었다....
 +  ? 1998/banks
 +  ! [[http://www.ioccc.org/1998/banks.c|코드]]/[[http://www.ioccc.org/1998/banks.hint|힌트]]. [[X윈도]]용 비행 시뮬레이터! 코드가 코드 자신의 역할을 설명해 주는 매우 명쾌한(?) 코드. 사용한 바이트 수가 1.5KB에 불과하다는 걸 생각하면 매우 놀랍다고 할 수 있다.
 +  ? 2000/dhyang
 +  ! [[http://www.ioccc.org/2000/dhyang.c|코드]]/[[http://www.ioccc.org/2000/dhyang.hint|힌트]]. [[바람의검심]]의 사이토 하지메 모양의 코드로, 실행하면 프로그램 A을 뱉고, 그걸 실행하면 프로그램 B를 뱉고, 그걸 실행하면 프로그램 C를 뱉고, 그걸 실행하면 프로그램 A를 뱉는 깨는 프로그램. [[콰인]]의 상식을 깼다는 평가와 함께 많이 회자되었다. 참고로 이 프로그램의 제작자 Don Yang은 [[구글]] 직원인데 [[http://uguu.org/sources.html|원래 이런 프로그램을 많이 짜 왔다]](...). 나중 수상작에는 [[아카자아카리]] 모양의 코드(''2011/akari'')가 등장해서 문화 충격을 줬을 정도.
 +  ? 2001/bellard
 +  ! [[http://www.ioccc.org/2001/bellard.c|코드]]/[[http://www.ioccc.org/2001/bellard.hint|힌트]]. **자기 자신을 컴파일할 수 있는 C 컴파일러**. 타입 체크를 안 하고 [[C전처리기]]에서 매크로는 안 구현되어 있다고는 하지만 자기 자신을 컴파일할 수 있는 시점에서 이미 경악할만한 수준. 그리고 이 프로그램을 만든 [[Fabrice Bellard]]는 후에 이 코드를 고쳐서 [[TCC]]를 만들고야 만다.
 +  ? 2004/gavin
 +  ! [[http://www.ioccc.org/2004/gavin.c|코드]]/[[http://www.ioccc.org/2004/gavin.hint|힌트]]. **[[IA-32]]용 [[운영체제]]**(...). 여기까지 가면 거의 경악할 수준이다. 심지어 빌트인 [[셸]](''sh'')과 [[텍스트편집기]](''vi'')까지 약소하게나마 들어 있다.
 +  ? 2006/toledo2
 +  ! [[http://www.ioccc.org/2006/toledo2/toledo2.c|코드]]/[[http://www.ioccc.org/2006/toledo2/hint.text|힌트]]. [[8086]] 에뮬레이터(...). 그 이전 해에는 [[커머도어PET]] 에뮬레이터(''2005/sykes'')가 나오더니 갈 데까지 갔다. 참고로 이 코드의 제작자는 그 이전 해와 같은 해에 [[체스]] 관련 코드를 내서 둘 다 입상시킨 전력이 있으며, 2011년에 체스가 아닌 다른 게임으로 또 수상하자 "Best non-chess game"이라는 이름을 부여받았다(''2011/toledo''). <del>얼씨구</del>
 +
 +===== 바깥 링크 =====
 +
 +  * [[http://cosmic.mearie.org/tour-de-ioccc/|Tour de IOCCC]]: [[lifthrasiir]]가 쓰다가 만 IOCCC 해설서
 +
 +{{tag>프로그래밍대회}}

도쿠위키DokuWiki-custom(rev 9085d92e02)을 씁니다.
마지막 수정 2012-10-01 00:47 | 작성자 lifthrasiir