diff options
Diffstat (limited to 'tests/fasta.js')
-rw-r--r-- | tests/fasta.js | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/tests/fasta.js b/tests/fasta.js new file mode 100644 index 00000000..f8bca39c --- /dev/null +++ b/tests/fasta.js @@ -0,0 +1,71 @@ +// 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) + |