Created
October 15, 2011 23:10
-
-
Save jpedrosa/1290293 to your computer and use it in GitHub Desktop.
Fasta Benchmark for Dart
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// The Great Computer Language Shootout | |
// http://shootout.alioth.debian.org | |
// | |
// Contributed by Ian Osgood | |
// Adapted by Joao Pedrosa for Dart | |
var last = 42, A = 3877, C = 29573, M = 139968; | |
rand(max) { | |
last = (last * A + C) % M; | |
return max * last / M; | |
} | |
var ALU = | |
"GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG" + | |
"GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA" + | |
"CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT" + | |
"ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA" + | |
"GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG" + | |
"AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC" + | |
"AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA"; | |
var IUB, HomoSap; | |
makeCumulative(table) { | |
var last = null; | |
table.forEach((c, vvv){ | |
if (last != null) { | |
table[c] += table[last]; | |
} | |
last = c; | |
}); | |
} | |
fastaRepeat(n, seq) { | |
var seqi = 0, lenOut = 60; | |
while (n>0) { | |
if (n<lenOut) lenOut = n; | |
if (seqi + lenOut < seq.length) { | |
print( seq.substring(seqi, seqi+lenOut) ); | |
seqi += lenOut; | |
} else { | |
var s = seq.substring(seqi); | |
seqi = lenOut - s.length; | |
print( s + seq.substring(0, seqi) ); | |
} | |
n -= lenOut; | |
} | |
} | |
fastaRandom(n, table) { | |
var line = new List<String>(60); | |
makeCumulative(table); | |
while (n>0) { | |
if (n<line.length) line = new List<String>(n); | |
for (var i=0; i<line.length; i++) { | |
var r = rand(1); | |
for (var c in table.getKeys()){ | |
if (r < table[c]) { | |
line[i] = c; | |
break; | |
} | |
} | |
} | |
print(Strings.join(line, '')); | |
n -= line.length; | |
} | |
} | |
main(){ | |
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 | |
}; | |
HomoSap = { | |
'a': 0.3029549426680, | |
'c': 0.1979883004921, | |
'g': 0.1975473066391, | |
't': 0.3015094502008 | |
}; | |
var n = 1000; | |
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); | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment