3 /* The Great Computer Language Shootout
4 http://shootout.alioth.debian.org
6 Contributed by Ian Osgood */
9 "GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG",
10 "GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA",
11 "CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT",
12 "ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA",
13 "GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG",
14 "AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC",
15 "AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA")
17 # probabilities
for symbols in Fasta codes
19 IUB
:= list(0.27, 0.12, 0.12, 0.27)
20 11 repeatTimes( IUB
append(0.02) )
22 HomoSap
:= list(0.3029549426680, 0.1979883004921, 0.1975473066391, 0.3015094502008)
24 Fasta
:= Object clone do(
28 (last
= ((last
* 3877 + 29573) % 139968)) / 139968
31 repeat
:= method(n
,seq
, i
:= li
:= 0
32 line
:= Sequence
clone setSize(60)
34 line
atPut(li
, seq
at(i
))
36 if (li
== line size
, line println
; li
= 0)
37 i
= ((i
+1) % seq size
)
39 if (li
!= 0, line
setSize(li
) println
)
42 codes
:= "acgtBDHKMNRSVWY"
44 random
:= method(n
, probs
, sum
:= li
:= 0
45 line
:= Sequence
clone setSize(60)
46 probs
mapInPlace(prob
, sum
= sum
+ prob
)
48 r
:= gen_random
; i
:= 0
49 while (r
> probs
at(i
), i
= i
+ 1)
50 line
atPut(li
, codes
at(i
))
52 if (li
== line size
, line println
; li
= 0)
54 if (li
!= 0, line
setSize(li
) println
)
58 n
:= System args
at(1) asNumber
60 ">ONE Homo sapiens alu" println
61 Fasta
repeat(2*n
, ALU
)
63 ">TWO IUB ambiguity codes" println
64 Fasta
random(3*n
, IUB
)
66 ">THREE Homo sapiens frequency" println
67 Fasta
random(5*n
, HomoSap
)