72 строки
2.1 KiB
JavaScript
72 строки
2.1 KiB
JavaScript
// The Computer Language Benchmarks Game
|
|
// http://shootout.alioth.debian.org
|
|
//
|
|
// Contributed by Ian Osgood
|
|
// Largely rewritten by Matthew Wilson
|
|
|
|
function fastaRepeat(n, seq) {
|
|
var seqi = 0, len = seq.length, i, j, k, l, block,
|
|
str = Array(len*60+1).join(seq), lines = Array(i=j=len*len);
|
|
while (--j>-1) { lines[j] = str.substr(60*j, 60) }
|
|
block = lines.join("\n");
|
|
for (j=0, k=Math.floor((l=Math.floor(n/60))/i); j<k; ++j) { print(block) }
|
|
for (j = 0, k = l % i; j < k; ++j) { print(lines[j]) }
|
|
if (n % 60 > 0) { print(lines[k].substr(0, n % 60)) }
|
|
}
|
|
|
|
var rand=(function() {
|
|
var Last = 42;
|
|
return function() { return (Last=(Last * 3877 + 29573) % 139968) / 139968 }
|
|
})();
|
|
|
|
function printLineMaker(table) {
|
|
var h = 0, k = [], v = [], c, l=0;
|
|
for (c in table) { l = v[h] = table[k[h++] = c]+=l; }
|
|
return function(x) {
|
|
var line = "";
|
|
next: for (var i=0; i<x; ++i) {
|
|
var r = rand(), j=0;
|
|
for (;;++j) {
|
|
if (r < v[j]) {
|
|
line += k[j];
|
|
continue next;
|
|
}
|
|
}
|
|
}
|
|
print(line);
|
|
}
|
|
}
|
|
|
|
function fastaRandom(n, table) {
|
|
var printLine=printLineMaker(table);
|
|
while ((n -= 60) > -1) { printLine(60) }
|
|
if (n<0 && n>-60) { printLine(60 + n) }
|
|
}
|
|
|
|
(function main(n) {
|
|
var ALU = "GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG" +
|
|
"GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA" +
|
|
"CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT" +
|
|
"ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA" +
|
|
"GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG" +
|
|
"AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC" +
|
|
"AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA";
|
|
|
|
var IUB = { a:0.27, c:0.12, g:0.12, t:0.27, B:0.02, D:0.02, H:0.02, K:0.02,
|
|
M:0.02, N:0.02, R:0.02, S:0.02, V:0.02, W:0.02, Y:0.02 }
|
|
|
|
var HomoSap = {
|
|
a:0.3029549426680, c:0.1979883004921, g:0.1975473066391, t:0.3015094502008
|
|
}
|
|
|
|
print(">ONE Homo sapiens alu")
|
|
fastaRepeat(2*n, ALU)
|
|
|
|
print(">TWO IUB ambiguity codes")
|
|
fastaRandom(3*n, IUB)
|
|
|
|
print(">THREE Homo sapiens frequency")
|
|
fastaRandom(5*n, HomoSap)
|
|
}).call(this, 1*arguments[0]*1)
|
|
|