アカウント名:
パスワード:
すごい。ソースがAAになってる。
AAするのは結構王道(モチーフは様々ですが)で、先日のgoogle quineのおまけとしてのAA [google.com]として解説されていました。
> ここまで来れば、あとは階段状に整形するロジックを Google という形に整形するように変更するだけです。 この際に注意すべき点は " と空白や改行が使えないことだけで、特に難しい制限ではないでしょう。
マジすか。
# そしてそれをpythonで書き直す猛者http://d.hatena.ne.jp/over80/20111227/python_google_quine [hatena.ne.jp]
RubyでQuineはかなり簡単ですからねー。読むのがキツイほどに書くのは大変ではないだろうと思います。空白無しでコーディングするのも、if文の代わりに短絡評価や三項演算子を使ったり、while文の代わりにloop{}使ったり、後置構文にしたりして、必要に応じて()をモリモリ入れてやれば結構簡単です。
二重eval使うと出力を再整形する必要もなくなるのですが、それでは芸がないし、HTML出力もできないしで、圧縮してコードに埋め込むのが良いのでしょうね。さらっとバイト列弄ってRLEを文字列にエンコードしているのは流石です。Proc#callとProc#[]が同じというのを使った姑息なショートコーディングもありますね。
言わずと知れたQuine界のすごいひとによる変態Quine概観 http://www.slideshare.net/mametter/quine-10290517 [slideshare.net]
すごいヘムタイさんですねーwこのスライドでの私のお気に入りはquineリレーです。思い出したのは、quineでもリレーでもなかったと思うのですが、1つのソースで複数のインタプリタ言語に対応したコードをどこかでみた記憶が。# 今さがしてみたけどみつからず
加えて、中のコードも解読が難しいようで。
単にインデントが狂ってるだけならインデントを揃えれば読めるようになるけど、どうもそれだけじゃなさそうな。w
昔のコンテストのコードを解析していて、
"abcdefg"[3]
が char として正しく処理されるのを知ったとき、日本人には C コンパイラは作れない、と思った大学生の頃。
いまだに理解できていないのが、
typedef char yyy[2];
関数へのポインタは概念は簡単だが空では書けない。
> 日本人には C コンパイラは作れない、と思った煽りとかではなくて純粋に「なんで?」と思いました。
http://kmaebashi.com/programmer/pointer.html#arraytopointer [kmaebashi.com] > 添字演算子>> 後置演算子 [] を、添字演算子と呼ぶ。> []は、ポインタと整数をオペランドとして取る。> 以下のふたつの式は、全く同等である。> p[i] *(p+i)...> p[i] は、*(p+i) の簡略記法(構文糖 --- syntax sugar)に過ぎない。と教わっていたので普通
>日本人には C コンパイラは作れない、と思った>大学生の頃。
BNFを知らなかったんですねwコンパイラ本の最初のほうに書いてるんですけどね。
すいません、このソースを読んで(見て?)初めてあかりがアホ毛だと認識しました。ううむ下手な画像データよりも説得力があるなw
単にソースがAAとかそんなレベルじゃねぇぞこれw
基本はテキスト形式フォーマットの画像の間引きツールみたいなんだけどAAで書いたテキストを食わせると縮小AAを出力する。つまり、このソース自身食わせても縮小AA出力するんだが、それがまともにコンパイルできて実行できるソースになっている。この2段目のソースを最初のプログラムに食わせてもまだコンパイル実行可能なソース。3段目のソースを食わせて出力された4段目もコンパイルできるCのソースだ。
3段目・4段目の実行結果は自分で試してみることをお勧めする。
何たる超絶技巧だwww
それだけではなく、Brainf**kインタプリタにソースを食わせてやるとですね
最終的にBrainFu*kになってしまうのが残念。元ネタ的にはWhitespaceだったら完璧でした。
#いや、じゃあやってみろって言われても書けないんですけどね
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
皆さんもソースを読むときに、行と行の間を読むような気持ちで見てほしい -- あるハッカー
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だったら完璧でした。
#いや、じゃあやってみろって言われても書けないんですけどね