IIJIMASが勉強しようとしています。

これからこれから♪

目次

Blog 利用状況

ニュース

わんくま同盟 東京勉強会 #45 数学デー 私の資料(pptxとxlsx)

確率の不思議

わんくま同盟 東京勉強会 #37 私のLT資料

数の冪の和の式 を求めてみよう!

デブサミ09でわんくま同盟の紹介をしたスライド

わんくま同盟 東京勉強会 #26 LT祭りの私のスライド

わんくま同盟 東京勉強会 #23の私のスライド

わんくま同盟 東京勉強会 #18の私のスライド


自己紹介(仮)

IIJIMASと申します。 東京都多摩市在住です。多摩川のそばです。 まだ20代…
10代…でした0x1Fです
昔、家に猫がいました。猫好きです。
ブログは苦手(?)
IIJIMASのSは何って言われます。 IIJIMASって
なんて読むかは自由です。
魚や網間企業とゲームとは無関係です。
数学とか宇宙とかの読み物とか好きです。
血液型:果汁100%A
メタボ予備軍。。。orz
Twitter

...............
MVP 審査応募ページ~ 求む、日本のMVP。
MCTS:.NET Framework 2.0: Windows アプリケーション
MCTS:.NET Framework 2.0: Windows アプリケーション

MCSD.NET:マイクロソフト認定ソリューションデベロッパー(MCSD) Microsoft .NET トラック
Microsoft Certified Solution Developer for Microsoft.NET

リンク

わんくま同盟
わんくま同盟

C#VB.NET掲示板
C#VB.NET掲示板

わんくま同盟 Blog's

ちょっと一言(仮)


書庫

日記カテゴリ

自分自身を出力するプログラム。

古いPCのファイルを見ていて、昔、学生時代、Javascriptで自分自身を出力するプログラムを書いてみて楽しんでたのを思い出しました。昔の自分に負けたくないので、頭の体操に(?)もう一度書いてみました。

http://iijimas.wankuma.com/2009/01/SelfReplicationJS.html

実行結果は何も面白くありません。数字をカウントアップして表示するだけです。
ソースの表示すると、その都度HTMLが変わっているのがわかります。

このようなプログラム(スクリプト)を書くこと自体がパズルっぽくて面白いと思うのは僕だけでしょうか。

実際の生命とか、コンピュータウイルスとかもこんなアルゴリズムかその応用でできているのでしょうか。


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>Self Replication JS</title>
<script type="text/javascript">
var v="<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\r\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\r\n<head>\r\n<meta content=\"text/html; charset=utf-8\" http-equiv=\"Content-Type\" />\r\n<title>Self Replication JS<"+"/title>\r\n<script type=\"text/javascript\">\r\n";
var w="function encode(s){\r\nvar r=\"\";\r\nfor(var i=0;i<s.length;i++){\r\nc=s.charAt(i);\r\nr+=(c=='\"') ? \"\\\\\\\"\":\r\n(c.charCodeAt()==10) ? \"\\\\n\":\r\n(c.charCodeAt()==13) ? \"\\\\r\":\r\n(c.charCodeAt()==92) ? \"\\\\\\\\\":\r\n(c==\"<\" && i+1<s.length && s.charAt(i+1) == \"/\") ? \"<\\\"+\\\"\":\r\nc;\r\n};\r\nreturn '\"'+r+'\"';\r\n}\r\n";
var x="function next(i){\r\nvar s = v;\r\ns+=\"var v=\"+encode(v)+\";\\r\\n\";\r\ns+=\"var w=\"+encode(w)+\";\\r\\n\";\r\ns+=\"var x=\"+encode(x)+\";\\r\\n\";\r\ns+=\"var y=\"+encode(y)+\";\\r\\n\";\r\ns+=\"var z=\"+encode(z)+\";\\r\\n\";\r\ns+=w+x+y+i+z;\r\ndocument.open();document.write(s);\r\nsetTimeout(\"next(\"+(i+1)+\")\",1000);\r\n}\r\n";
var y="<"+"/script>\r\n<"+"/head>\r\n<body>\r\n";
var z="<"+"/body>\r\n<"+"/html>";

function encode(s){
var r="";
for(var i=0;i<s.length;i++){
c=s.charAt(i);
r+=(c=='"') ? "\\\"":
(c.charCodeAt()==10) ? "\\n":
(c.charCodeAt()==13) ? "\\r":
(c.charCodeAt()==92) ? "\\\\":
(c=="<" && i+1<s.length && s.charAt(i+1) == "/") ? "<\"+\"":
c;
};
return '"'+r+'"';
}
function next(i){
var s = v;
s+="var v="+encode(v)+";\r\n";
s+="var w="+encode(w)+";\r\n";
s+="var x="+encode(x)+";\r\n";
s+="var y="+encode(y)+";\r\n";
s+="var z="+encode(z)+";\r\n";
s+=w+x+y+i+z;
document.open();document.write(s);
setTimeout("next("+(i+1)+")",1000);
}
</script>
</head>
<body onload="next(0);">
</body>
</html>


投稿日時 : 2009年1月8日 1:19

コメントを追加

# re: 自分自身を出力するプログラム。 2009/01/08 1:58 IIJIMAS

とりあえずセルフコメント。

生命とかコンピュータウイルスも自己複製をしますが、結構、自己複製って不思議ですよね?
ある情報量のある全体の一部に記述されている情報量が、結果として元の情報量以上になるんですよ!?

# re: 自分自身を出力するプログラム。 2009/01/08 12:50 凪瀬

こないだのLT大会のときにやったJSPウイルスのネタを思い出しました。

# re: 自分自身を出力するプログラム。 2009/01/09 0:08 IIJIMAS

凪瀬さんコメントありがとうございます!

そうですね、実は凪瀬さんのLT聞いてたときこれ少し思い出してました。
悪意のあるコンピュータウイルスは作っちゃいけませんが、実際の生命の起源とか、生命の必要条件とか考えるのとか面白そうですよねー。
単なる化学物質が生命になるなんていまだに不思議ですよね。
生物学とか遺伝的アルゴリズムとか人工生命とか勉強しとけばよかったのかも。。。

タイトル  
名前  
URL
コメント