パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

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

  • 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

私は悩みをリストアップし始めたが、そのあまりの長さにいやけがさし、何も考えないことにした。-- Robert C. Pike

処理中...