tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

check-string-fasta.js (2083B)


      1 // The Great Computer Language Shootout
      2 //  http://shootout.alioth.debian.org
      3 //
      4 //  Contributed by Ian Osgood
      5 
      6 var last = 42, A = 3877, C = 29573, M = 139968;
      7 
      8 function rand(max) {
      9  last = (last * A + C) % M;
     10  return max * last / M;
     11 }
     12 
     13 var ALU =
     14  "GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG" +
     15  "GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA" +
     16  "CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT" +
     17  "ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA" +
     18  "GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG" +
     19  "AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC" +
     20  "AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA";
     21 
     22 var IUB = {
     23  a:0.27, c:0.12, g:0.12, t:0.27,
     24  B:0.02, D:0.02, H:0.02, K:0.02,
     25  M:0.02, N:0.02, R:0.02, S:0.02,
     26  V:0.02, W:0.02, Y:0.02
     27 }
     28 
     29 var HomoSap = {
     30  a: 0.3029549426680,
     31  c: 0.1979883004921,
     32  g: 0.1975473066391,
     33  t: 0.3015094502008
     34 }
     35 
     36 function makeCumulative(table) {
     37  var last = null;
     38  for (var c in table) {
     39    if (last) table[c] += table[last];
     40    last = c;
     41  }
     42 }
     43 
     44 function fastaRepeat(n, seq) {
     45  var seqi = 0, lenOut = 60;
     46  while (n>0) {
     47    if (n<lenOut) lenOut = n;
     48    if (seqi + lenOut < seq.length) {
     49      ret = seq.substring(seqi, seqi+lenOut);
     50      seqi += lenOut;
     51    } else {
     52      var s = seq.substring(seqi);
     53      seqi = lenOut - s.length;
     54      ret = s + seq.substring(0, seqi);
     55    }
     56    n -= lenOut;
     57  }
     58  return ret;
     59 }
     60 
     61 function fastaRandom(n, table) {
     62  var line = new Array(60);
     63  makeCumulative(table);
     64  while (n>0) {
     65    if (n<line.length) line = new Array(n);
     66    for (var i=0; i<line.length; i++) {
     67      var r = rand(1);
     68      for (var c in table) {
     69        if (r < table[c]) {
     70          line[i] = c;
     71          break;
     72        }
     73      }
     74    }
     75    ret = line.join('');
     76    n -= line.length;
     77  }
     78  return ret;
     79 }
     80 
     81 var ret;
     82 
     83 var count = 7;
     84 var actual1 = fastaRepeat(2*count*100000, ALU);
     85 var actual2 = fastaRandom(3*count*1000, IUB);
     86 var actual3 = fastaRandom(5*count*1000, HomoSap);
     87 
     88 assertEq(actual1, "CAAAAAGGCCGGGCGCGGTG");
     89 assertEq(actual2, "VtttaDtKgcaaWaaaaatSccMcVatgtKgtaKgcgatatgtagtSaaaDttatacaaa");
     90 assertEq(actual3, "ttggctatatttatgttgga");