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

これからこれから♪

目次

Blog 利用状況

ニュース

共著:




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

個数を数えてみたい!

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

きっと楽しいトポロジー

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

確率の不思議

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

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

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

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

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

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


自己紹介(仮)

IIJIMASと申します。
東京都多摩市在住です。多摩川のそばです。
猫好きです。
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

ちょっと一言(仮)


書庫

日記カテゴリ

2009年1月8日 #

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

古い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>


posted @ 1:19 | Feedback (1847)