パスワードを忘れた? アカウント作成
2774606 story
プログラミング

第 20 回・国際分かりにくい C コードコンテスト、応募されたコードを公開 24

ストーリー by reo
\アッカリーン/ 部門より

ある Anonymous Coward 曰く、

5 年ぶりに開催された IOCCC (International Obfuscated C Code Contest、国際分かりにくい C のコードコンテスト) 参加者によるソースコードが公開されている。

受賞者はすでに発表されているが、どのコードも開いた瞬間に吹き出すレベルの難解さである。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by 90 (35300) on 2012年04月26日 11時54分 (#2143181) 日記

    アッカリーンってやつかな?

  • by kieru_haim (37792) on 2012年04月26日 12時03分 (#2143187) 日記
    ゆるゆりだと思うのですが、感動しました。
    他のソースコードもそうですがここまでくると芸術ですねぇ。
    (実務ではやめてほしいですがw)
  • by Anonymous Coward on 2012年04月27日 14時01分 (#2143990)

    見なかった事にするべきか・・・w

    http://uguu.org/sources.html [uguu.org]

    • by Anonymous Coward

      作者のプロフィールに
      Google (www.google.com): Software Engineer
      Member of the C++ readability team.
      と,あるところがすごい.

  • by z80a (45168) on 2012年04月26日 11時43分 (#2143172)

    すごい。ソースがAAになってる。

    • by Anonymous Coward on 2012年04月26日 12時24分 (#2143204)

      AAするのは結構王道(モチーフは様々ですが)で、先日のgoogle quineのおまけとしてのAA [google.com]として解説されていました。

      > ここまで来れば、あとは階段状に整形するロジックを Google という形に整形するように変更するだけです。 この際に注意すべき点は " と空白や改行が使えないことだけで、特に難しい制限ではないでしょう。

      マジすか。

      # そしてそれをpythonで書き直す猛者
      http://d.hatena.ne.jp/over80/20111227/python_google_quine [hatena.ne.jp]

      親コメント
      • by grafi (45142) on 2012年04月26日 22時18分 (#2143635)

        RubyでQuineはかなり簡単ですからねー。読むのがキツイほどに書くのは大変ではないだろうと思います。
        空白無しでコーディングするのも、if文の代わりに短絡評価や三項演算子を使ったり、while文の代わりにloop{}使ったり、後置構文にしたりして、必要に応じて()をモリモリ入れてやれば結構簡単です。

        二重eval使うと出力を再整形する必要もなくなるのですが、それでは芸がないし、HTML出力もできないしで、圧縮してコードに埋め込むのが良いのでしょうね。さらっとバイト列弄ってRLEを文字列にエンコードしているのは流石です。
        Proc#callとProc#[]が同じというのを使った姑息なショートコーディングもありますね。

        言わずと知れたQuine界のすごいひとによる変態Quine概観 http://www.slideshare.net/mametter/quine-10290517 [slideshare.net]

        親コメント
        • by Anonymous Coward

          すごいヘムタイさんですねーw
          このスライドでの私のお気に入りはquineリレーです。
          思い出したのは、quineでもリレーでもなかったと思うのですが、1つのソースで複数のインタプリタ言語に対応したコードをどこかでみた記憶が。
          # 今さがしてみたけどみつからず

    • by firewheel (31280) on 2012年04月26日 12時27分 (#2143208)

      加えて、中のコードも解読が難しいようで。

      単にインデントが狂ってるだけならインデントを揃えれば読めるようになるけど、
      どうもそれだけじゃなさそうな。w

      親コメント
      • by Anonymous Coward

        昔のコンテストのコードを解析していて、

        "abcdefg"[3]

        が char として正しく処理されるのを知ったとき、
        日本人には C コンパイラは作れない、と思った
        大学生の頃。

        いまだに理解できていないのが、

        typedef char yyy[2];

        関数へのポインタは概念は簡単だが空では書けない。

        • by Anonymous Coward

          > 日本人には C コンパイラは作れない、と思った
          煽りとかではなくて純粋に「なんで?」と思いました。

          http://kmaebashi.com/programmer/pointer.html#arraytopointer [kmaebashi.com]
          > 添字演算子
          >
          > 後置演算子 [] を、添字演算子と呼ぶ。
          > []は、ポインタと整数をオペランドとして取る。
          > 以下のふたつの式は、全く同等である。
          > p[i] *(p+i)
          ...
          > p[i] は、*(p+i) の簡略記法(構文糖 --- syntax sugar)に過ぎない。
          と教わっていたので普通

        • by Anonymous Coward

          >日本人には C コンパイラは作れない、と思った
          >大学生の頃。

          BNFを知らなかったんですねw
          コンパイラ本の最初のほうに書いてるんですけどね。

    • by Anonymous Coward

      すいません、このソースを読んで(見て?)初めてあかりがアホ毛だと認識しました。
      ううむ下手な画像データよりも説得力があるなw

    • 単にソースがAAとかそんなレベルじゃねぇぞこれw

      基本はテキスト形式フォーマットの画像の間引きツールみたいなんだけど
      AAで書いたテキストを食わせると縮小AAを出力する。
      つまり、このソース自身食わせても縮小AA出力するんだが、
      それがまともにコンパイルできて実行できるソースになっている。
      この2段目のソースを最初のプログラムに食わせても
      まだコンパイル実行可能なソース。
      3段目のソースを食わせて出力された4段目もコンパイルできるCのソースだ。

      3段目・4段目の実行結果は自分で試してみることをお勧めする。

      何たる超絶技巧だwww

  • 国際邪悪なCコードコンテスト [wikipedia.org]が定訳になっていたような気がしますが、最近はこういう言い回しをしなくなったのでしょうか。
  • 個人的には自己言及的で短くてマクロ使わないで読解困難という点でeastman.cがお気に入り。

    http://www.ioccc.org/2011/eastman/eastman.c [ioccc.org]

  • by Anonymous Coward on 2012年04月26日 13時33分 (#2143302)

    海外から出張で来て、仕事もせずにIOCCCのコードを読んだりNetHackで遊んでばかりの人がいたことを思い出した。
    仕事は飛行機の中で先に済ませてきたらしいw

  • by Anonymous Coward on 2012年04月27日 2時42分 (#2143734)

    顔文字だけで書かれたJavaScript
    http://developers.srad.jp/story/10/11/28/0152238/ [srad.jp]

typodupeerror

「科学者は100%安全だと保証できないものは動かしてはならない」、科学者「えっ」、プログラマ「えっ」

読み込み中...