More ... | 編集履歴:過去のバージョン2015/12/10 15:05:17 JST時点でのネタ:自己出力プログラムの内容* HSPで自分自身を出力させてみよう。 というネタ。プログラミングパズルの定番じゃないかと思う。 で、とりあえず、作ってみた。 {{{ sdim a,256,10 a.0="sdim a,256,10" a.1="for i,0,10:c=\"\":d=\"\":strlen l,a.i" a.2=" for j,0,l:strmid c,a.i,j,1" a.3=" if (c=\"\\\\\")|(c=\"\\\"\"):d+=\"\\\\\"" a.4=" d+=c" a.5=" next" a.6=" k=i:str k:mes \"a.\"+k+\"=\\\"\"+d+\"\\\"\":next" a.7="a.0=\"mes a.0\"" a.8="mes a.0" a.9="for i,1,10:mes a.i:next:stop" mes a.0 for i,0,10:c="":d="":strlen l,a.i for j,0,l:strmid c,a.i,j,1 if (c="\\")|(c="\""):d+="\\" d+=c next k=i:str k:mes "a."+k+"=\""+d+"\"":next a.0="mes a.0" mes a.0 for i,1,10:mes a.i:next:stop }}} 議論の叩き台になると思うので、上のコードはできるだけいじらないで下さいな。--[[iwata]] * 改良案など - かなり冗長なので、もっとクールなコードをガンガン貼って下さい。--[[iwata]] ** 例のブツです|・)ノ sdim s,1024:str q:poke q,0,34:sdim t,1024:t="+q:s+s+t:poke s,44,34:poke s,128,34:mesbox s,winx,winy:stop;Output clone of myself!":s="sdim s,1024:str q:poke q,0,34:sdim t,1024:t='+q:s+s+t:poke s,44,34:poke s,128,34:mesbox s,winx,winy:stop;Output clone of myself!':s="+q:s+s+t:poke s,44,34:poke s,128,34:mesbox s,winx,winy:stop;Output clone of myself! - てめぇらもっとクールなコードをガンガン貼れるもんなら貼って下さい。おながいします。--[[Yuki]] -- 1行プログラムの常として、バラして評価しないと流れが掴みにくいですね。同じコードが3回出てきますけど、2回にできればもっといい感じだと思います--[[iwata]] ** 卑怯かもしれないけど {{{ str a bload "hsptmp",a mes a stop }}} - ……ダメですか? -- コンパイルしたら動きませんよね。 あと、外部ファイルを参照してもよいのなら、HSPではありませんが、 {{{ #!/bin/sh cat $0 }}} のようなコードもアリになってしまうし、面白くない。ちゃんとクワイン化して欲しいな、ということで。 -- やっぱダメですか(笑 -- コンパイル(実行ファイル作成)したら動かなければ「#pack "hsptmp"」 ** 別例1 {{{ sdim a,256,10 a.0="sdim a,256,10" a.1="for i,0,10:c=\"\":d=\"\":strlen l,a.i" a.2=" for j,0,l:strmid c,a.i,j,1" a.3=" if (c=\"\\\\\")|(c=\"\\\"\"):d+=\"\\\\\"" a.4=" d+=c" a.5=" next" a.6=" k=i:str k:mes \"a.\"+k+\"=\\\"\"+d+\"\\\"\":next" a.7="a.0=\"mes a.0\"" a.8="mes a.0" a.9="for i,1,10:mes a.i:next:stop" }}} 編集中... * 議論 ---- 参考: http://www.ice.nuie.nagoya-u.ac.jp/~h003149b/lang/quine.html |