@__pandaman64__がquineでpolyglotなジェネレータ書いてくれるって
→書いてくれなかったので書きました.そーす
dancing D-men generatorも作りました.
これは,D言語としてもepsとしても有効なコードになっていて,gs quine.d
とすると踊る人形のD言語くんバージョンが画面に現れ,標準出力に元のコードが出るはずです.デフォルトでは画面に
abcdefghijklmn
opqrstuvwxyz
と出ます.
また,dmd quine.d
としてできた実行ファイルももちろんquineなので,引数なしで実行すると元のコードが標準出力に出ます.
また,できた実行ファイルに引数を渡すと,その引数を画面に出すepsかつD言語なコードが出ます.もちろんこれもquineです.
epsを変換したい場合,ImageMagickのコマンドである,convertを使うといいでしょう.convertは拡張子でフォーマットを判断するので,.epsにすれば正常に変換できると思います.
例えば,convert quine.eps quine.jpg
とすれば,helloを踊っているD言語くんのjpgファイルができるはずです.
真面目にこのコードの解説をすると,まず /D-print
で描画ルーチンを定義し, \printlimb
で四肢の形を定義し, \printalpha
でアルファベットと画像の対応をさせています.
その後(文字列)
に対してforallを読んで1文字ごとにprintalphaを呼び出しているだけです.
quine部分はあなたの知らない超絶技巧プログラミングの世界を参考にしました.皆さん買いましょう(ダイマ).
epsは (dup == =) dup == =
,D言語の部分はmain(){char *c="main(){char *c=%c%s%c;printf(c,34,c,34);}";printf(c,34,c,34);}
の応用です.かなり簡単だと思います.
polyglotもD言語の q{}
という素晴らしい文字列リテラルと,epsの()
という文字列リテラル記法のおかげで簡単に欠落させることができました.
今後の目標はこれをAAにすることです.
動いてるかわかりませんがhttp://www.dancingdmen.me:8080/という画像をダウンロードできるジェネレータがあります.@__pandaman64__ が作ってくれました.
残念ながら元ネタの踊る人形にはD言語くんのデフォルトのポーズはありませんが,epsの知識のある人なら,ソースをいじってprintalphaのところに0 0 0 0 false
とすればデフォルトのポーズを出せます.
18日時点ではこれをgsで出力したものを乗っけていました.
dancing D men とこのポーズでシャーロック・ホームズの踊る人形を意味したつもりでした.
画像の文章は
do you know dancing man of sherlock holmes
i wrote eps script that presents dancing d men
each man means an character of alphabet
of cource the gesuture is same as his dancing man
the script is divided by three parts
first is data of alphabet
second is print d man
third is decode string
unfortunately i have not finish draw a flag that represents capital letter
it shows string as small letter
i am against some obstacle for writing eps script
now i almost finished
full script will be coming soon
have fun
でしたが読めた人はいなかったようです.
このepsに入っているD言語くんのポーズは3次ベジエで出力しており,もとのsvgファイルより制御点が大幅に少なくなっています.実際大変でした.
D言語くん自体は32x64のサイズに収まるように作られていて,非常に小型なのも特徴です.
もし秘密のメッセージを送りたかったら,これを使えば安全にメッセージを送れます.活用しましょう.