sawat #6304(2008/05/19 13:12 GMT) [ JavaScript ] Rating0/0=0.00
他と同じく、3だと収束しないので5です。 また、ブラウザが固まらないようにsetTimeoutを使っています。Rhinoなどで実行する場合は、setTimerのところをwhileループにでもして下さい。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
function test() { var x = "METHINKSITISAWEASEL"; var data = sort(initialData(300, x.length), x); var mutate = 5; setTimer(x, data, mutate, 0, 100); } function setTimer (x, data, mutateNum, count, interval) { setTimeout(function() { print(count + " " + data[0] + " " + data[0].differenceFrom(x)); if (data[0].differenceFrom(x) == 0) { return; } data = mutateAndSelect(x, data, mutateNum); setTimer (x, data, mutateNum, count+1, interval); }, interval); } function mutateAndSelect (x, data, mutateNum) { var ar = new Array(data.length * mutateNum); for (var i=0, n=data.length; i<n; i++) { for (var j=0; j<mutateNum; j++) { ar[i*mutateNum + j] = data[i].mutate(); } } return sort(ar, x).slice(0, data.length); } function sort(data, x) { var cache = {}; data.sort(function (a, b) { var da = cache[a] || (cache[a] = a.differenceFrom(x)); var db = cache[b] || (cache[b] = b.differenceFrom(x)); return da - db; }); return data; } function initialData(num, len) { var ar = new Array(num); for (var i = 0; i<num; i++) { ar[i] = randomString(len); } return ar; } function randomString(len) { var chars = new Array(len); for (var i = 0; i<len; i++) { chars[i] = 65 + Math.floor(26*Math.random()); } return String.fromCharCode.apply(null, chars); } String.prototype.differenceFrom = function (str) { var diff = Math.abs(this.length - str.length); for ( var i=0, n = Math.min(this.length, str.length); i<n; i++) { if( this.charAt(i) != str.charAt(i)) diff++; } return diff; } String.prototype.mutate = function () { var x = Math.floor(Math.random() * this.length); return this.substr(0, x) + String.fromCharCode(65 + Math.floor(26*Math.random())) + this.substr(x+1, this.length); } var infoArea = document.body.appendChild(document.createElement("div")); infoArea.innerHTML = " "; function print(str) { infoArea.firstChild.nodeValue = str; } test();
Rating0/0=0.00-0+
[ reply ]
sawat
#6304()
[
JavaScript
]
Rating0/0=0.00
他と同じく、3だと収束しないので5です。 また、ブラウザが固まらないようにsetTimeoutを使っています。Rhinoなどで実行する場合は、setTimerのところをwhileループにでもして下さい。
Rating0/0=0.00-0+
[ reply ]