ある Anonymous Coward 曰く、5 年ぶりに開催された IOCCC (International Obfuscated C Code Contest、国際分かりにくい C のコードコンテスト) 参加者によるソースコードが公開されている。 受賞者はすでに発表されているが、どのコードも開いた瞬間に吹き出すレベルの難解さである。
一番上は (スコア:2)
アッカリーンってやつかな?
Re:一番上は (スコア:1)
志村〜。
Hiroki (REO) Kashiwazaki
Re:一番上は (スコア:1)
なるほど、このプログラムの一番難解なところは
./akari4
だな。
Re:一番上は (スコア:1)
元ネタがあったのですね。
akari.c を (Emacs で) 見て To Heart のあかりじゃなさそうだしなあ..
て思ってました。
Re: (スコア:0)
だったら「不可C(視)」でなければ・・・・
akari (スコア:2)
他のソースコードもそうですがここまでくると芸術ですねぇ。
(実務ではやめてほしいですがw)
akariの作者のページ (スコア:2, 興味深い)
見なかった事にするべきか・・・w
http://uguu.org/sources.html [uguu.org]
Re: (スコア:0)
作者のプロフィールに
Google (www.google.com): Software Engineer
Member of the C++ readability team.
と,あるところがすごい.
AAになってる... (スコア:1)
すごい。ソースがAAになってる。
Re:AAになってる... (スコア:1)
AAするのは結構王道(モチーフは様々ですが)で、先日のgoogle quineのおまけとしてのAA [google.com]として解説されていました。
> ここまで来れば、あとは階段状に整形するロジックを Google という形に整形するように変更するだけです。 この際に注意すべき点は " と空白や改行が使えないことだけで、特に難しい制限ではないでしょう。
マジすか。
# そしてそれをpythonで書き直す猛者
http://d.hatena.ne.jp/over80/20111227/python_google_quine [hatena.ne.jp]
Re:AAになってる... (スコア:3, 興味深い)
RubyでQuineはかなり簡単ですからねー。読むのがキツイほどに書くのは大変ではないだろうと思います。
空白無しでコーディングするのも、if文の代わりに短絡評価や三項演算子を使ったり、while文の代わりにloop{}使ったり、後置構文にしたりして、必要に応じて()をモリモリ入れてやれば結構簡単です。
二重eval使うと出力を再整形する必要もなくなるのですが、それでは芸がないし、HTML出力もできないしで、圧縮してコードに埋め込むのが良いのでしょうね。さらっとバイト列弄ってRLEを文字列にエンコードしているのは流石です。
Proc#callとProc#[]が同じというのを使った姑息なショートコーディングもありますね。
言わずと知れたQuine界のすごいひとによる変態Quine概観 http://www.slideshare.net/mametter/quine-10290517 [slideshare.net]
Re: (スコア:0)
すごいヘムタイさんですねーw
このスライドでの私のお気に入りはquineリレーです。
思い出したのは、quineでもリレーでもなかったと思うのですが、1つのソースで複数のインタプリタ言語に対応したコードをどこかでみた記憶が。
# 今さがしてみたけどみつからず
Re:AAになってる... (スコア:1)
加えて、中のコードも解読が難しいようで。
単にインデントが狂ってるだけならインデントを揃えれば読めるようになるけど、
どうもそれだけじゃなさそうな。w
Re: (スコア:0)
昔のコンテストのコードを解析していて、
が char として正しく処理されるのを知ったとき、
日本人には C コンパイラは作れない、と思った
大学生の頃。
いまだに理解できていないのが、
関数へのポインタは概念は簡単だが空では書けない。
Re: (スコア:0)
> 日本人には C コンパイラは作れない、と思った
煽りとかではなくて純粋に「なんで?」と思いました。
http://kmaebashi.com/programmer/pointer.html#arraytopointer [kmaebashi.com]
> 添字演算子
>
> 後置演算子 [] を、添字演算子と呼ぶ。
> []は、ポインタと整数をオペランドとして取る。
> 以下のふたつの式は、全く同等である。
> p[i] *(p+i)
...
> p[i] は、*(p+i) の簡略記法(構文糖 --- syntax sugar)に過ぎない。
と教わっていたので普通
Re: (スコア:0)
>日本人には C コンパイラは作れない、と思った
>大学生の頃。
BNFを知らなかったんですねw
コンパイラ本の最初のほうに書いてるんですけどね。
Re: (スコア:0)
すいません、このソースを読んで(見て?)初めてあかりがアホ毛だと認識しました。
ううむ下手な画像データよりも説得力があるなw
ネタバレ注意 (Re:AAになってる...) (スコア:0)
単にソースがAAとかそんなレベルじゃねぇぞこれw
基本はテキスト形式フォーマットの画像の間引きツールみたいなんだけど
AAで書いたテキストを食わせると縮小AAを出力する。
つまり、このソース自身食わせても縮小AA出力するんだが、
それがまともにコンパイルできて実行できるソースになっている。
この2段目のソースを最初のプログラムに食わせても
まだコンパイル実行可能なソース。
3段目のソースを食わせて出力された4段目もコンパイルできるCのソースだ。
3段目・4段目の実行結果は自分で試してみることをお勧めする。
何たる超絶技巧だwww
Re:ネタバレ注意 (Re:AAになってる...) (スコア:1)
それだけではなく、Brainf**kインタプリタにソースを食わせてやるとですね
Re:ネタバレ注意 (Re:AAになってる...) (スコア:1)
最終的にBrainFu*kになってしまうのが残念。
元ネタ的にはWhitespaceだったら完璧でした。
#いや、じゃあやってみろって言われても書けないんですけどね
「邪悪なコード」は死語? (スコア:1)
古典的 (スコア:1)
個人的には自己言及的で短くてマクロ使わないで読解困難という点でeastman.cがお気に入り。
http://www.ioccc.org/2011/eastman/eastman.c [ioccc.org]
ある外国人 (スコア:0)
海外から出張で来て、仕事もせずにIOCCCのコードを読んだりNetHackで遊んでばかりの人がいたことを思い出した。
仕事は飛行機の中で先に済ませてきたらしいw
関連記事 (スコア:0)
顔文字だけで書かれたJavaScript
http://developers.srad.jp/story/10/11/28/0152238/ [srad.jp]