10
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

D言語くんAdvent Calendar 2015

Day 18

Dancing D men

Last updated at Posted at 2015-12-17

@__pandaman64__がquineでpolyglotなジェネレータ書いてくれるって
→書いてくれなかったので書きました.そーす
dancing D-men generatorも作りました.

これは,D言語としてもepsとしても有効なコードになっていて,gs quine.d とすると踊る人形のD言語くんバージョンが画面に現れ,標準出力に元のコードが出るはずです.デフォルトでは画面に

abcdefghijklmn
opqrstuvwxyz

ddm8.jpg

と出ます.
また,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のサイズに収まるように作られていて,非常に小型なのも特徴です.

もし秘密のメッセージを送りたかったら,これを使えば安全にメッセージを送れます.活用しましょう.

10
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?