国際難読化Cコードコンテスト(略称IOCCC)は、最も創造的に難読化されたC言語で書かれたコードを競うコンピュータプログラミングコンテストで、毎年(可能な限り)開催されています。これは「C言語の構文の難解さを称える」ものとされています。[ 1 ] 2025/26年に開催された第28回コンテストの優勝コードは、2026年6月6日にライブストリームで発表されました[ 2 ] [ 3 ]。
応募作品は、現職の審査員である Leonid A. Broukhis 氏とLandon Curt Noll氏によって匿名で評価されます。審査プロセスは、コンテストの FAQ [ 4 ]に記載されており、予選ラウンドで構成されています。慣例として、各コンテストの応募作品の総数は公表されません。受賞作品には、「C プリプロセッサの最悪の悪用」や「最も不安定な動作」などのカテゴリが与えられ、その後、IOCCC の公式 Web サイトに掲載されます。コンテストでは、IOCCC Web サイトに掲載されることが受賞の報酬(および自慢できる権利)であると明記されています。
過去のコンテストは、1984~1996年、1998年、2000年、2001年、2004~2006年、2011~2015年、2018~2020年、および2024~2025年に開催されました。
IOCCC は、 1984 年にLandon Curt Nollと Larry Bassel が National Semiconductor の Genix ポーティング グループに勤務していたときに開始されました。コンテストのアイデアは、彼らが修正しなければならなかったいくつかの不適切なコード、特にALGOL 68構文をエミュレートするためにマクロを使用していたBourne シェルと、BSD 用のバグのある finger バージョンについて互いに情報交換した後に生まれました。[ 5 ]コンテスト自体は、1993 年の Computer Bowl のクイズ問題のトピックでした。[ 6 ] 2006 年から 5 年間の休止期間を経て、コンテストは 2011 年に復活しました。[ 7 ]
他のプログラミングコンテストと比較すると、IOCCCは「それほど真剣なものではない」と、ドクター・ドブズ・ジャーナルの編集者であるマイケル・スウェインは述べている。[ 8 ]
ドン・リベスの著書[ 9 ]にはこう書かれている。
…それらを研究すれば、間違いなくあなたの視野を広げることになるだろう。そして確かに、中には全くもって常軌を逸していて、笑ったりからかったりするしかないものもある。
ルール[ 10 ]は毎年変更され、ルールについてさらに理解を深めるためのガイドライン[ 11 ]とともに掲載されます。これらはIOCCCのウェブサイトに掲載されています。また、受賞作品を含むすべての資料は、クリエイティブ・コモンズ・ライセンスBY-SA 4.0国際[ 12 ]の下で公開されます。
コンテストのルールをハッキングするのは伝統だ。
ルールには、参加者が見つけて悪用するように意図的に抜け穴が設けられることが多い。 [ 11 ]抜け穴を利用した応募作品は、翌年のコンテストのルール変更につながる可能性がある。[ 11 ]
ルールの中で最も重要なものは、総ソースサイズと正味ソースサイズの制限に関するルール 2a と 2b (元々はルール 1) です。コンテストの期間中、ルール 2 はソースサイズ制限の微妙な増加に対応するために進化してきました[ 13 ]。1984 年のコンテストは最大ソースサイズが 512 バイトで始まり、1991 年にはさらに数回増加して 1536 バイトになりました。1992 年に、ルール 2 は、特定の条件の下で最大全体サイズと空白とセミコロンを無視した最大サイズを区別するために分割されました。初期の頃は、許可されたスペースを最大限に活用するために空白が削除され、多くの場合、テキストがコンパクトにまとめられて人間が読みにくくなっていましたが、審査員がプロセスの一部として行った C の「きれいな印刷」ユーティリティを通すとほとんど意味がなくなりました。 1992年、審査員たちはその形式の難読化は行き詰まったと考え[ 14 ]、エントリーをテーマにしたASCII画像や、より伝統的なインデントされたCソースなど、コードのフォーマットの他の方法を模索するよう人々に促したいと考えました。2012/2013年頃、iocccsize(1) [ 15 ]ツールがコンテストに採用され、参加者と審査員の両方がルール2bのカウントアルゴリズムを適用できるように調整されました。
エントリーでは、 C プリプロセッサを本来の目的とは異なる用途で使用する[ a ]、あるいは C プログラミング言語で一般的に使用される構文を避け、同じことを実現するためのより難解な方法を採用するなど、奇妙または珍しいトリックがよく使われます。
投稿には、 ASCII アートのように画像やテキストなどに似せてフォーマットされたソースコード、コードを読みにくくするためのプリプロセッサの再定義、自己修正コードなどが含まれていました。数年の間に、翌年のルールの一部を再定義する必要があるエントリーが提出され、これは大変名誉なこととみなされました。その一例が、世界最短の自己複製プログラムです。このエントリーは、自身のソースコードを出力するように設計されたプログラムで、ソースコードはゼロバイトでした。プログラムを実行すると、ソースコードと同じゼロバイトが出力されました。[ 18 ]
難読化を極限まで追求するあまり、参加者たちはC言語の標準規格の境界線を巧みに回避したり、コンパイラでめったに使用されないコードパスの組み合わせをトリガーするような構造を持つプログラムを作成してきました。その結果、過去の応募作品の中には、最新のコンパイラでは直接コンパイルできないものや、クラッシュを引き起こすものもあるかもしれません。
2020年から2024年までの休止期間(グレートフォークマージ[ 19 ])の間、多くの受賞作品は現代のコンパイラ向けに更新され、例えばK&R Cから少なくともC89構文に変換されましたが、そうすることで難読化が壊れる場合は除きます(元のバージョンは引き続き閲覧可能です)。そのため、2024年にはすべてのエントリーを実行できるはずです。Webサイトでは、未解決の問題が残っている受賞作品について、Cプログラマーに修正を依頼しています。[ 20 ] [ 21 ]
わずか数キロバイトのコードサイズ制限内で、参加者は複雑なことを成し遂げてきた。2004年の優勝者はオペレーティングシステムを開発した。[ 22 ]
最新のコンパイラは、コンテスト応募作品から得られた教訓を活かし、問題のあるソースコードについてユーザーに警告を発します。コンテスト応募作品をコンパイルするには、警告を抑制する必要があるかもしれません。
Toledo Nanochessは、IOCCCで5回優勝したメキシコのソフトウェア開発者、オスカー・トレド・グティエレスによって作成されたチェスエンジンです。IOCCCのルールに従い、オリジナル版は1963文字の長さです。作者は、C言語で書かれた世界最小のチェスプログラムだと主張しています。
Toledo Nanochessや他のエンジンのソースコードは入手可能です。 [ 23 ] Toledo Nanochessは IOCCCC18 での Toledo の優勝作品に基づいているため、 [ 24 ]高度に難読化されています。[ 25 ]
2014年2月2日、著者は完全なコメント付きソースコードを含む書籍「Toledo Nanochess: The commented source code」を出版した。 [ 26 ]
2010年2月7日現在、オランダの物理学者HGミュラーによるMicro-Maxと並んで、2キロバイト未満のC言語で書かれた、完全な合法チェスの動きを実行できる2つのチェスエンジンのうちの1つであるようです。2014年には、Micro-Maxの派生版であるSuper Micro Chess [ 27 ]によって1キロバイトの壁が破られ、合計760文字(スペースと改行を含む)になりました。 [ 28 ]また、Toledoエンジンの小型版であるToledo Picochessもあり、これは944の非空白文字で構成されています。
typedef char ** C ; #define F getchar()) #define H(z)*n++=z; #include <setjmp.h> #define v pain(0,0,0 #define Z while( #define _ if( #define o(d) (u[l]=0,l[d]=6^e,q=1e4>v,0),l[d]=0,u[l]=e^6,q) #define I(H,n) { _ r=l[x=H],!r|(r^e)<-1){ _ j=u[l],-7==r|6==r\ ){ n; e=~e; return 1e5- f; } u[l]=0,t=j+1,i=j-1; _!i&89<x)i\ =j,t=6; _-1==t&30>x)t=j,i=-7; Z++i<t){ b=S; d=0; S&=63; \ a=((j^e)!=1?6!=(j^e)?O[32+x/10]-O[u/10+32]-q:(S|=6!=j?8\ :1,2==ux)*9+9*(xu==2):(d=1==j?xu:ux)/8+!(!((xu)%\ 10)|r)*99+(j==1?90<x:29>x)*(9*O[28+i]-288))+O[r+28\ ]*9-288+O[x%10+33]-fO[33+u%10]; x[l]=i; S|=(21=\ =u|21==x)*2+(u==28|28==x)*4+(91==u|x==91)*16+32\ *(u==98|x==98)+(20==d)*64*x; a-=k>f?pain(a,f+1\ ,M,k):0; _ i==c&u==h&!f&N&a>-1e4&x==y)longjm\ p(z,1); S=b; _!N|f&&(a>M||!f&a==M&&1&rand()\ )){ _!f){ _ k){ c=i; h=u; y=x; } } else _ \ La<N){ n; e=~e; u[l]=j; x[l]=r; return\ a; } M=a; } } x[l]=r; u[l]=j; n; } } typedef int G ; C kk ; char J [ 78 ], O [ ] = "HRQAMS#-smaqrh[UTZYTU[|TBA(" "$#(ABT|ba`gg`ab8>GK[_`fFDZXEYR" "L \t ####" "##B#A#@#G#F#E#D#K \t\3 Zlv#tjm" " \3 J#tjm \3 Pwb" "ofnbwf \3 Joofdbo \3 )&`&`.&`&`" "#+&g* \t " ; G y , c , h , e , S , * s , l [ 149 ]; jmp_buf z ; G main ( G L , C fa , C Na ){ return pain ( L , fa , Na , kk );} G pain ( G L , C fa , C Na 、C ka ){ G f = fa ; G N = Na ; G k = ka ; Gu = 99 、p 、q 、r 、j 、i 、x 、t 、a 、b 、d 、M = -1e9 ; char * n ; if ( * l ){ e =~ e ; Z u > 21 ){ q = l [ -- u ] ^ e ; _ !-- q ){ _ ! l [ p = e ? u -10 : u + 10 ]){ I ( p ,) _ e ? u > 80 & ! l [ p -= 10 ] : u < 39 &! l [ p += 10 ]) I ( p ,)} _ l [ p = e ? u -11 : 9 + u ] ) I ( p ,) else _ u -1 == S >> 6 ){ l [ u -1 ] = 0 ; I ( p , l [ u -1 ] = -2 ^ e ); } _ l [ p = e ? u -9 : 11 + u ]) I ( p ,) else _ S >> 6 == 1 + u ){ l [ 1 + u ] = 0 ; I ( p , l [ 1 + u ] = e ^ -2); } } _ !-- q ){ n = O + 41 ; Z ++ n < 50 + O ) I ( u + 80 -* n , )} _ 0 < q & 4 > q ){ n = q == 2 ? 53 + O : O + 49 ; Z ++ n < O + ( q != 1 ) * 4 + 54 ){ p = u ; do I ( p -=* n -80 ,) Z ! p [ l ]); } } _ 4 == q ){ n = 49 + O ; Z ++ n < O + 58 ) I ( u -* n + 80 ,) _ e &! ( S & 24 ) |! e &! ( S & 3 ) && k && ! l [ u -2 ] &! l [ u -1 ] &! l [ u -3 ] && o ( u ) & o ( u -1 )){ l [ u -1 ] = 4 ^ e ; l [ u -4 ] = 0 ; I ( u -2 , l [ u -1 ] = 0 ; l [ u -4 ] = e ^ 4 ); } _ e &! (S & 40 ) |! e &! ( S & 5 ) && k &&! l [ u + 1 ] &! l [ 2 + u ] && o ( u ) & o ( 1 + u )){ l [ u + 1 ] = e ^ 4 ; l [ 3 + u ] = 0 ; I ( u + 2 , l [ 1 + u ] = 0 ; l [ u + 3 ] = 4 ^ e ); } } } e =~ e ; return M ; } Z h < 130 ){ l [ h ] =- ( 21 > h | 98 < h | 2 > ( h + 1 ) % 10 ); O [ h ++ ] ^= 3 ; } n = O + 14 ; s = 20 + l ; Z ++ s < 29 + l ){ 10 [ s ] = 1 ; 70 [ s ] =~ ( * s = * n ++ -+ 84 ); 60 [ s ] = -2 ; } Z n = J ){ puts ( 58 + O ); u = 19 ; Z ++ u < 100 ){ H ( 32 )_ ! ( u % 10 )) H ( 32 ) H ( O [ 7 + l [ u ]]) _ ( 9 + u ) % 10 > 7 ){ H ( 58 - u / 10 ) H ( 32 ) _ u & 1 ) puts ( n = J ); } } puts ( O + 58 ); _ -1e4 > v , 1 )){ e =~ e ; puts ( O + ( v , 0 ) > 1e4 ? e ? 90 : 82 : 96 )); break ; } _ 1 < L & e ) { d = v , 2 + L ); printf ( O + 114 , h % 10 + 64 , 58 - h / 10 , y % 10 + 64 , 58 - y / 10 , d ); } else { putchar ( 62 ) ; h = ( 95 & F -44 ; c = l [ h += ( 56 - F * 10 ]; y = ( 95 & F -44 ; y += ( 56 - F * 10 ; Z 10 != ( u = ( 95 & F )){ c = 5 ; Z --c > 1 && u != c [ O ]); c = e ^ c -7 ; } } _ ! setjmp ( z )){ v + 1 , 1 ); puts ( 106 + O ); } } Z 10 != F ; }以下は、円周率を自身の面積で計算する1988年の項目です。[ 29 ] これはオリジナルのK&R Cに書かれていました。
注: 1988 年に提出されたオリジナルのプリプロセッサ行は であり#define _ -F<00||--F-OO--;、これは K&R プリプロセッサのバグを悪用したもので、ANSI C89 より前に修正されました。

#define _ F-->00||F-OO--; int F = 00 、OO = 00 ;メイン(){ F_OO (); printf ( "%1.3f \n " , 4. *- F / OO / OO );} F_OO () { _ - _ - _ - _ _ - _ - _ - _ - _ - _ - _ - _ - _ _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ -_ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ - _ }もう1つの例としては、1998年のIOCCCの受賞者であるX Windowを使用したフライトシミュレーター[ 30 ]があり、これはCalculated Bets: Computers, Gambling, and Mathematical Modeling to Win (2001) [ 31 ]に記載および説明されており、以下に示されています。
#include <math.h> #include <sys/time.h> #include <X11/Xlib.h> #include <X11/keysym.h> double L , o , P , _ = dt , T , Z , D = 1 , d , s [ 999 ], E , h = 8 , I , J , K , w [ 999 ], M , m , O , n [ 999 ], j = 33e-3 , i = 1E3 , r , t , u , v , W , S = 74.5 , l = 221 , X = 7.26 , a , B , A = 32.2 , c , F , H ; int N , q , C , y , p , U ; Window z ; char f [ 52 ] ; GC k ; main (){ Display * e = XOpenDisplay ( 0 ); z = RootWindow ( e , 0 ); for ( XSetForeground ( e , k = XCreateGC ( e , z , 0 , 0 ), BlackPixel ( e , 0 )) ; scanf ( "%lf%lf%lf" , y + n , w + y , y + s ) + 1 ; y ++ ); XSelectInput ( e , z =XCreateSimpleWindow ( e , z , 0 , 0 , 400 , 400 , 0 , 0 , WhitePixel ( e , 0 ) ), KeyPressMask ); for ( XMapWindow ( e , z ); ; T = sin ( O )){ struct timeval G = { 0 , dt * 1e6 } ; K = cos ( j ); N = 1e4 ; M += H * _ ; Z = D * K ; F += _ * P ; r = E * K ; W = cos ( O ); m = K * W ; H = K * T ; O += D * _ * F / K + d / K * E * _ ; B = sin ( j ); a = B * T * D - E * W ; XClearWindow ( e , z ); t = T * E + D * B * W ; j += d * _ * D - _ * F * E ; P = W * E * B - T * D ; for ( o += ( I = D * W + E * T * B , E * d/ K * B + v + B / K * F * D ) * _ ; p < y ; ){ T = p [ s ] + i ; E = c - p [ w ]; D = n [ p ] - L ; K = D * m - B * T - H * E ; if ( p [ n ] + w [ p ] + p [ s ] == 0 | K < fabs ( W = T * r - I * E + D * P ) | fabs ( D = t * D + Z * T - a * E ) > K ) N = 1e4 ; else { q = W / K * 4E2 + 2e2 ; C = 2E2 + 4e2 / K * D ; N -1E4 && XDrawLine ( e , z , k , N , U , q , C ); N = q ; U = C ; } ++ p ; } L += _ * ( X * t + P * M + m * l ); T = X * X + l * l + M * M ; XDrawString( e , z , k , 20 , 380 , f , 17 ); D = v / l * 15 ; i += ( B * l - M * r - X * Z ) * _ ; for (; XPending ( e ); u *= CS != N ){ XEvent z ; XNextEvent ( e , & z ); ++* (( N = XLookupKeysym ( & z . xkey , 0 )) - IT ? N - LT ? UP - N ?& E :& J : & u : & h ); --* ( DN - N ? N - DT ? N == RT ?& u : & W :& h :& J ); } m = 15 * F / l ; c += ( I = M / l , l * H + I * M + a * X ) * _ ; H = A * r + v * X - F * l + ( E = .1 + X * 4.9 / l 、t = T * m / 32 - I * T / 24 ) / S ; K = F * M + ( h * 1e4 / l -( T + E * 5 * T * E ) / 3e2 ) / S - X * d - B * A ; a = 2.63 / l * d ; X += ( d * l - T / S * ( .19 * E + a * .64 + J / 1e3 ) - M * v + A * Z ) * _ ; l += K * _ ; W = d ; sprintf ( f , "%5d %3d" "%7d" , p = l / 1.7 ,( C = 9E3 + O * 57.3 ) % 0550 ,( int ) i ); d += T * ( .45 -14 / l * X - a * 130 - J * .14 ) * _ / 125e2 + F * _ * v ; P = ( T * ( 47 * I - m * 52 + E * 94 * D - t * .38 + u * .21 * E ) / 1e2 + W * 179 * v ) / 2312 ; select ( p = 0 , 0 , 0 , 0 , & G ); v -= ( W * F - T * ( .63 * m- I * .086 + m * E * 19 - D * 25 -.11 * u ) / 107e2 ) * _ ; D = cos ( o ); E = sin ( o ); } }以下は、ドン・ヤンによるPGM、PPM画像とASCIIアート(ゆるゆりのあかり)をダウンサンプリングした2011年のエントリです。 [ 32 ]
/* + + + + [ >i>n[t */ # include < stdio . h > /*2w0,1m2,]_<n+a m+o>r>i>=>(['0n1'0)1; */ int /**/ main ( int /**/ n , char ** m ){ FILE * p , * q ; int A , k , a , r , i /* #uinndcelfu_dset<rsitcdti_oa.nhs>i/_*/ ; char * d = "P%" "d \n %d \40 %d" /**/ " \n %d \n\00 wb+" , b [ 1024 ], y [] = "ゆりゆららららゆらゆり*だいじけん**あっかり~ん**" "/y*u*k/riin<ty(uyr)g,aur,arr[a1r2a82*y2*/u*r{uyu}riOcyurhiyua**rrar+*arayra*=" "ユルユルウィユリユララ'ラリアユルユリユリユ>ララララユルy9uriyu3riyurar_aBrMaPrOaWy^?" "*]/f]`;hvroai<dp/f*i*s/<ii(f)a{tpguat<cahfaurh(+uf)a;f}vivn+tf/g*`*w/jmaa+i`ni(" /** */ "i+k[>+b+i>++b++>l[rb" ; int /**/ u ; for ( i = 0 ; i < 101 ; i ++ ) y [ i * 2 ] ^= "~hktrvg~dmG*eoa+%squ#l2" ":(wn \" 1l))v?wM353{/Y;lgcGp`vedllwudvOK`cct~[|ju {stkjalor(stwvne \" gt \" yogYURUYURI" [ i ] ^ y [ i * 2 + 1 ] ^ 4 ; /*!*/ p = ( n > 1 && ( m [ 1 ][ 0 ] - '-' || m [ 1 ][ 1 ] != '\0'))?fopen ( m [ 1 ], y + 298 ) :標準入力; /*y/riynrt~(^w^)],]c+h+a+r+*+*[n>)+{>f+o<r<(-m] =<2<5<64;}-]-(m+;yry[rm*])/[* */ q = ( n < 3 ||! ( m [ 2 ][ 0 ] - '-' || m [ 2 ][ 1 ])) ? stdout /*]{ }[*/ : fopen ( m [ 2 ], d + 14 ); if ( ! p || /* "]<<*-]>y++>u>>+r >+u+++y>--u---r>++i+++" <)< ;[>-m-.>a-.-i.++n.>[(w)*/ ! q /**/ ) return + printf ( "Can " "not \x20 open \40 %s \40 " "" "for \40 %sing \n " , m [ ! p ? 1 : 2 ], ! p ? /* o=82]5<<+(+3+1+&.(+ m +-+1.)<)<|<|.6>4>-+(> m- &-1.9-2-)-|-|.28>-w-?-m.:>([28+ */ "read" : "writ" ); for ( a = k = u = 0 ; y [ u ]; u = 2 + u ){ y [ k ++ ] = y [ u ];} if (( a = fread ( b , 1 , 1024 /* ,mY/R*Y"R*/ , p /*U*/ ) /* R*/ ) > /*U{ */ 2 && b /*Y*/ [ 0 ] /*U*/ == 'P' && 4 == /*"y*r/y)r\} */ sscanf ( b ,d 、& k 、& A 、&i 、& r ) && ! ( k -6 && k -5 ) && r == 255 ){ u = A ; if ( n > 3 ){ /* ]&<1<6<?<m.-+1>3> +:+ .1>3+++ . -m-) -;.u+=++.1<0< <; f<o<r<(.;<([m(=)/8*/ u ++ ; i ++ ;} fprintf ( q , d , k , u >> 1 , i >> 1 , r ); u = k -5 ? 8 : 4 ; k = 3 ;} else /*]>*/ {( u ) = /*{ p> >u >t>-]s >++(.yryr*/ + ( n + 14 > 17 ) ? 8 / 4 : 8 * 5 / 4 ;} for ( r = i = 0 ; ;){ u *= 6 ; u += ( n > 3 ? 1 : 0 ); if ( y [ u ] & 01 ) fputc ( /* <ge<tc>ha r -(-).)8+<1. >;+i.(<)< <)+{+if>([180*/ 1 * ( r ),q ); if ( y [ u ] & 16 ) k = A ; if ( y [ u ] & 2 ) k -- ; if ( i /* ("^w^NAMORI; { I*/ == a /*" )*/ ){ /**/ i = a = ( u ) * 11 & 255 ; if ( 1 && 0>= ( a = fread ( b , 1 , 1024 , p )) && ")]i>(w)-;} { /if-(-m--M1-0.)<{" [ 8 ] == 59 /* */ ) break ; i = 0 ;} r = b [ i ++ ] ; u += ( /**>> *..</<<<)<[[;]**/ + 8 &* ( y + u )) ? ( 10 - r ? 4 : 2 ) : ( y [ u ] & 4 ) ? ( k ? 2 : 4 ) : 2 ; u = y [ u /* 49;7i\(w)/;} y}ru\=*ri[ ,mc]o;n}trientuu ren ( */ ] - ( int ) '`' ;} fclose ( p ); k = + fclose ( q ); /*] <*.na/m*o{ri{ d;^w^;} }^_^}} " */ return k - -1 + /*\' '-`*/ ( - / *}/ */ 0x01 ); / * ^w^*/ ;}プログラム自身のソースコードを入力として使用して実行した場合、結果は次のようになります。
$ 。/あかりあかり。c int * w , m , _namori = ( 'n' ); #include <stdio.h> /*;hrd"% dnd4%"*/ /**/ int ( y ), u , r [ 128 * 2 /*{y}icuhya*rr*rya= */ ]; void /**/ i (){ putchar ( u );} int /**/ main ( /* "(n"l)?M5{YlcpvdluvKct[j skao(tve"t"oYRYR" */ int ( w ), char ** n ){ for ( m = 256 ; -- m ; r [ m ] /* "<*]y+u>r>u+yu-r+i+" ) ;>mai+n>()/q*/ = 25 < ( 31 & ( m -1 )) || 64 - ( m & 192 ) || 2 > w ? m : ( 2 + m /*"*,/U// R/)/U * & /Y/0/U/=P &=/"*/ ) \ & 16 ? m -13 : 13 + m ) ; u =+ 10 ; for (;( m = /* *>/()/{ pu ts +(yy*+ n1>7?/:*/ getchar ()) + 1 ; i () ){ if ( 10 /* "wNMR;{ I/=/" )/{*/ == u * 1 ) i (); if ( m -10 ){ u = /*> *./<)[;*/ 8 * 4 ; i (); } u = r [ m ];} return ( * * n /*{i ;w; }_} ( -*/ * 00 ) ; } $ ./あかりあかり。c > 。/あかり。少額の$ 。/あかり。/あかり。small wm_aoi ( n ) /*ity,,[2*/ {} char * y = ( ")M{lpduKtjsa(v""YY" "*ゆるゆり" ) ; main ( /* /",U/ R)U* Y0U= ="/\ */ ){ Puts ( y + 17 /* "NR{I=" ){/=* =* */ ); /* **/ { ;;}} $ $ . /あかり。/あかり。小> 。/あかり。小さい$ 。/あかり。/あかり。小さいmain (){ Puts ( "Y" "U RU YU " \ "RI" ) /* */ ;} $