123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- // The Great Computer Language Shootout
- // http://shootout.alioth.debian.org
- //
- // Contributed by Ian Osgood
- var last = 42, A = 3877, C = 29573, M = 139968;
- function rand(max) {
- last = (last * A + C) % M;
- return max * last / M;
- }
- 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
- }
- function makeCumulative(table) {
- var last = null;
- for (var c in table) {
- if (last) table[c] += table[last];
- last = c;
- }
- }
- function fastaRepeat(n, seq) {
- var seqi = 0, lenOut = 60;
- while (n>0) {
- if (n<lenOut) lenOut = n;
- if (seqi + lenOut < seq.length) {
- ret = seq.substring(seqi, seqi+lenOut);
- seqi += lenOut;
- } else {
- var s = seq.substring(seqi);
- seqi = lenOut - s.length;
- ret = s + seq.substring(0, seqi);
- }
- n -= lenOut;
- }
- }
- function fastaRandom(n, table) {
- var line = new Array(60);
- makeCumulative(table);
- while (n>0) {
- if (n<line.length) line = new Array(n);
- for (var i=0; i<line.length; i++) {
- var r = rand(1);
- for (var c in table) {
- if (r < table[c]) {
- line[i] = c;
- break;
- }
- }
- }
- ret = line.join('');
- n -= line.length;
- }
- }
- startTest("sunspider-string-fasta");
- var ret;
- var n = 16;
- test( "Homo sapiens alu", function(){
- ret = fastaRepeat(4*n*10000, ALU);
- });
-
- test( "IUB ambiguity codes", function(){
- ret = fastaRandom(3*n*100, IUB);
- });
-
- test( "Homo sapiens frequency", function(){
- ret = fastaRandom(5*n*100, HomoSap);
- });
- endTest();
|