Skip to content

Instantly share code, notes, and snippets.

@namusyaka
Created March 14, 2011 17:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save namusyaka/869517 to your computer and use it in GitHub Desktop.
Save namusyaka/869517 to your computer and use it in GitHub Desktop.
遺伝子の形質パターンを計算する関数たち。
//配列にindexOfが使えるブラウザ(IE以外)ではこんな回りくどいことをしなくてもいい。
function dontOverWrap(array) {
var r = '', arr = [];
for(var i = 0; i < array.length; i++) {
if(r.indexOf(',' + array[i] + ',') === -1) {
r += ',' + array[i] + ',';
arr[arr.length] = array[i]
}
}
return arr
}
function biology(rg1, rg2) {
//それぞれの引数から遺伝し得るであろう形質の組み合わせを生成する。
var pattern=[[], [], []];
var argv = [rg1, rg2], argpart = [[], []];
for(var i = 0; i < 2; i++) {
var array = [];
for(var j = 0; j < argv[i].length; j += 2)
argpart[i][argpart[i].length] = [argv[i][j], argv[i][j + 1]];
for(var k = 0, c = (1 << argpart[i].length); k < c; k++) {
array[k] = "";
for(var l = 0; l < argpart[i].length; l++)
array[k] += argpart[i][l][!!(k & (c >>> l + 1)) + 0];
}
pattern[i] = dontOverWrap(array);
}
//それぞれ作った形質の組み合わせを更に組み合わせる。
for(var i = 0; i < pattern[0].length; i++) {
pattern[2][i] = [];
for(var n = 0; n < pattern[1].length; n++)
pattern[2][i].push((pattern[0][i] + pattern[1][n]).split('').sort(function(a, b){
return a.toLowerCase().charCodeAt(0) - b.toLowerCase().charCodeAt(0) || (a > b ? 1 : -1);
}).join(''))
}
return pattern;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment