[トップ][編集][ノート][編集履歴][一覧][最近の更新][->English]

ネタ:自己出力プログラム

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"」

議論


参考: http://www.ice.nuie.nagoya-u.ac.jp/~h003149b/lang/quine.html