메아리

Tour de IOCCC

C로 프로그래밍을 좀 해 본 사람이라면 IOCCC라는 대회가 있다는 것을 알 지도 모르겠습니다. IOCCC, 즉 International Obfuscated C Code Contest는 난해한(obfuscated) C 코드를 겨루는 대회로 1984년부터 지금까지 꾸준히 계속 되고 있는 프로그래밍 컨테스트입니다. 이를테면 이런 코드지요.

int i;main(){for(;i["]<i;++i){--i;}"];read('-'-'-',i+++"hell\
o, world!\n",'/'/'/'));}read(j,i,p){write(j/p+p,i---j,i/i);}

"헉, 이게 무슨 코드야!"라고 생각하신다면 이 코드가 어떻게 돌아 가는지 직접 확인해 보시길 바랍니다. 적어도 잘못된 코드는 아닙니다.

난해한 코드는, 설령 가능하다 하더라도, 일면 쓸모 없어 보일 수 있습니다. 하지만 난해한 코드를 짜거나 해석하기 위해서는 프로그래밍 언어나 운영체제에 대한 깊은 지식이 필요하고, 난해한 코드를 짜는 다양한 기법들도 알려져 있기 때문에 결코 무시할 만한 것이 아닙니다. 이런 코드를 짤 수 있다는 것은 언어나 운영체제의 어두운 구석까지 잘 파악하고 있고, 따라서 그것들을 피해 가는 코드를 짤 수 있으며 비슷한 상황을 만났을 때 대처할 수 있다는 장점이 있지요. 그리고 무엇보다도 재미, 즉 만드는 사람에게 지적 및 기술적 희열을 안겨 주기도 합니다.

저는 이 글에서 IOCCC 수상작에 대한 자세한 설명을 하려고 합니다. 그래서 글 제목도 유명한 자전거 경기인 뚜르 드 프랑스(Tour de France)를 따라서 Tour de IOCCC라고 붙였습니다.1 네. 물론 만든 사람도 많이 고생했겠지만 코드를 해석하는 것만으로도 상당한 노력이 필요하긴 합니다. 하지만, 일단 재밌지 않습니까? :)

일러두기

이 글을 읽기 위해서는 어느 정도의 C 프로그래밍 지식이 필요하며, 최소한 포인터와 비트 연산에 대한 이해가 필요합니다. (복잡한 예시에 대해서는 글에서 따로 설명하지만 그래도 개념 자체는 알고 있어야 합니다.) 또한 IOCCC는 유닉스 환경을 기본으로 하기 때문에 여기에 대한 이해가 있으면 좀 더 이해가 편합니다.

이 글은 강 성훈이 썼으며, 크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 2.0 대한민국 라이선스에 따라 비영리 목적으로 사용할 수 있습니다.2 원본 코드의 저작권은 퍼블릭 도메인(public domain)에 속하여 저작권이 없습니다.

이 글의 원본은 머큐리얼 저장소에서 작업되고 있습니다. HTML 변환을 위해서는 pandoc이 필요합니다. 혹시 도움을 주실 수 있는 분께서는 미리 저에게 연락하시거나 머큐리얼 저장소를 복제(hg clone)한 뒤 작업 후 알려 주시면 제가 반영하도록 하겠습니다.

시작하기 전에

1회: 1984년

2회: 1985년

3회: 1986년

4회: 1987년

5회: 1988년

6회: 1989년

7회: 1990년

8회: 1991년

9회: 1992년

10회: 1993년

11회: 1994년

12회: 1995년

13회: 1996년

14회: 1998년

15회: 2000년

16회: 2001년

17회: 2004년

18회: 2005년

19회: 2006년

다음 목록은 2007년 발표 자료를 토대로 만들어진 것입니다. 소스 코드는 2009년 1월 현재까지 완전히 공개되어 있지 않습니다.


  1. 뚜르 드 프랑스는 프랑스 및 인접국에서 매년 열리는 자전거 경기로 경기 거리가 3천에서 4천 킬로미터에 이르는 대규모 경기입니다. 거리가 거리이니만큼 완주에는 80~100시간이라는 긴 시간이 필요합니다. 암을 이기고 무려 일곱 번이나 연속으로 우승한 랜스 암스트롱의 일화로도 유명하지요.

  2. IOCCC에서 수상한 소스 코드 및 포함된 데이터 파일을 제외한 나머지 저작물, 즉 힌트 파일(수상자와 심사위원의 코멘트)과 Makefile들은 다음과 같은 저작권 조항을 포함하고 있습니다.

    Copyright © 2005, Landon Curt Noll, Simon Cooper, Peter Seebach and Leonid A. Broukhis. All Rights Reserved.

    Permission for personal, education or non-profit use is granted provided this copyright and notice are included in its entirety and remains unaltered. All other uses must receive prior permission in writing from the contest judges.

    이 글은 IOCCC의 힌트 파일을 통째로 번역하거나 하지는 않지만, 단순 인용의 한계가 명확하지 않으므로 가능한한 문제를 피하기 위해 비영리 조항을 포함하고 있습니다. 만약 영리적 목적으로 사용하고 싶을 경우 저(강 성훈)와 IOCCC 심사위원들에게 각각 연락하시길 바랍니다.


Copyright © 1999–2009, Kang Seonghoon.