IOCCC

http://ioccc.org/

International Obfuscated C Code Contest (국제 난독화C 코드 컨테스트). 말 그대로 C 코드를 얼마나 창의적으로 이상하게 만들 수 있는가를 겨루는 온라인 프로그래밍대회. 그 시초는 무려 유즈넷 시절인 1984년으로 거슬러 올라가며, 가장 최근에 4년간(2007~2010) 대회가 안 열린 적도 있지만 어쨌든 온라인 상에서 현재까지 유지되고 있는 가장 오래된 프로그래밍 대회로 자리잡고 있다. 가장 최근의 21회차 IOCCC는 2012년 8월~9월 사이에 열렸다.

딱히 어느 코드가 더 창의적으로 이상한가를 정량적으로 나타낼 수는 없는 관계로, 모든 심사는 심사위원들이 코드들을 리뷰해 가면서 순차적으로 덜 이상하거나 창의적이지 않은 코드들을 제거해 가며 이루어진다. 이런 주관성 때문인지는 몰라도 IOCCC에서 수상한다고 딱히 상품이 있는 건 아니다. 그냥 수상해서 웹사이트에 올라가는 걸로 끝이다(…). 하지만 IOCCC에서 수상하는 것 자체가 보통 쉬운 일이 아니기 때문에 일부러라도 이름을 올리기 위해서 참가하는 사람들은 꽤 많다. 전통적으로 참가자 수나 몇 차례 리뷰를 거치는지는 공개하지 않으나1) 매해 수백건을 넘는다는 건 기정사실화된 것 같다. 코드에는 참가자의 설명(이 역시 전통적으로 "힌트" 파일이라고 불려 왔다)이 붙을 수 있으며, 수상자가 발표된 이후에도 코드를 약간 수정하거나 설명을 변경하거나 하는 과정을 거치기 때문에 실제 코드 발표는 좀 더 늦게 이루어진다. 코드는 리뷰 과정에서는 익명으로 리뷰하기 때문에 한 사람이 여러 코드를 내서 모조리 수상하는 것도 가능하다.2)

수상작

첫 해, 즉 1984년 수상작은 좀 황당하기는 해도 생각보다 어렵진 않았다. 그러나 시간이 지날수록 사람들의 잉여력은 폭발하여, 시간이 지날수록 말도 안 되는 것들이 수상하는 진풍경이 벌어지고 만다. 이 중 주목할 만한 것들 몇 개를 소개한다. 참고로 IOCCC 수상작은 보통 연도와 파일 이름을 합쳐서 2012/senokay 같은 식으로 부른다. 어라… 어째 눈에 익은 것 같은데

1984/mullender
코드/힌트. C 코드가 아니다. main 함수는 함수가 아니라 VAX/PDP-11에서 동시에 돌아가는 포터블한 기계어 코드를 담은 배열로 구현되었다. 첫 해 출품작이자 규정 변경으로 이런 코드가 더 이상 나올 수 없다는 점에서 IOCCC 심사위원들은 이 코드를 지금까지의 참가작 중에서 최고로 뽑는 것 같다.
1985/shapiro
코드/힌트. 랜덤한 미로를 출력한다. 가짜 C 개발자 인터뷰에서 "이 코드가 실행될 때까지 컴파일러를 뜯어 고쳤다"는(…) 그 코드가 여기에서 나왔다.
1988/westley
코드/힌트. 원주율을 계산하는 매우 비효율적인 알고리즘. 코드 모양이 원 모양이다.
1991/dds
코드/힌트. 베이직 인터프리터. 엄밀히 말하면 인터프리터가 들어 있는 바이트코드를 실행하는 바이트코드 인터프리터. 그러나 이 때까지만 해도 그들은 2001년에 C 컴파일러가 나타날 줄은 꿈에도 생각하지 못 했다(…).
1994/smr
코드/힌트. 세상에서 가장 작은 자기 자신을 출력하는 프로그램. 얼마나 작냐 하면 0바이트이다. (실제로는 Makefile 장난을 좀 쳐서 호환성을 확보했다.) 이 코드 이후로 "소스 코드는 1바이트 이상이어야 함"이라는 조항이 규칙에 추가되었다….
1998/banks
코드/힌트. X윈도용 비행 시뮬레이터! 코드가 코드 자신의 역할을 설명해 주는 매우 명쾌한(?) 코드. 사용한 바이트 수가 1.5KB에 불과하다는 걸 생각하면 매우 놀랍다고 할 수 있다.
2000/dhyang
코드/힌트. 바람의검심의 사이토 하지메 모양의 코드로, 실행하면 프로그램 A을 뱉고, 그걸 실행하면 프로그램 B를 뱉고, 그걸 실행하면 프로그램 C를 뱉고, 그걸 실행하면 프로그램 A를 뱉는 깨는 프로그램. 콰인의 상식을 깼다는 평가와 함께 많이 회자되었다. 참고로 이 프로그램의 제작자 Don Yang은 구글 직원인데 원래 이런 프로그램을 많이 짜 왔다(…). 나중 수상작에는 아카자아카리 모양의 코드(2011/akari)가 등장해서 문화 충격을 줬을 정도.
2001/bellard
코드/힌트. 자기 자신을 컴파일할 수 있는 C 컴파일러. 타입 체크를 안 하고 C전처리기에서 매크로는 안 구현되어 있다고는 하지만 자기 자신을 컴파일할 수 있는 시점에서 이미 경악할만한 수준. 그리고 이 프로그램을 만든 Fabrice Bellard는 후에 이 코드를 고쳐서 TCC를 만들고야 만다.
2004/gavin
코드/힌트. IA-32운영체제(…). 여기까지 가면 거의 경악할 수준이다. 심지어 빌트인 (sh)과 텍스트편집기(vi)까지 약소하게나마 들어 있다.
2006/toledo2
코드/힌트. 8086 에뮬레이터(…). 그 이전 해에는 커머도어PET 에뮬레이터(2005/sykes)가 나오더니 갈 데까지 갔다. 참고로 이 코드의 제작자는 그 이전 해와 같은 해에 체스 관련 코드를 내서 둘 다 입상시킨 전력이 있으며, 2011년에 체스가 아닌 다른 게임으로 또 수상하자 "Best non-chess game"이라는 이름을 부여받았다(2011/toledo). 얼씨구

바깥 링크

2) 2012년 현재 최고 기록은 3개. 1996/schweikh{1,2,3}, 1998/schweikh{1,2,3}, 2011/toledo{1,2,3}.

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