]> gitweb.factorcode.org Git - factor.git/blob - extra/benchmark/reverse-complement/reverse-complement.factor
Merge branch 'wordtimer' of http://phildawes.net/2008/factor into wordtimer
[factor.git] / extra / benchmark / reverse-complement / reverse-complement.factor
1 USING: io io.files io.streams.duplex kernel sequences
2 sequences.private strings vectors words memoize splitting
3 grouping hints tr continuations io.encodings.ascii
4 unicode.case ;
5 IN: benchmark.reverse-complement
6
7 TR: trans-map ch>upper "ACGTUMRYKVHDB" "TGCAAKYRMBDHV" ;
8
9 : translate-seq ( seq -- str )
10     concat dup reverse-here dup trans-map-fast ;
11
12 : show-seq ( seq -- )
13     translate-seq 60 <groups> [ print ] each ;
14
15 : do-line ( seq line -- seq )
16     dup first ">;" memq?
17     [ over show-seq print dup delete-all ] [ over push ] if ;
18
19 HINTS: do-line vector string ;
20
21 : (reverse-complement) ( seq -- )
22     readln [ do-line (reverse-complement) ] [ show-seq ] if* ;
23
24 : reverse-complement ( infile outfile -- )
25     ascii [
26         ascii [
27             500000 <vector> (reverse-complement)
28         ] with-file-reader
29     ] with-file-writer ;
30
31 : reverse-complement-in ( -- path )
32     "reverse-complement-in.txt" temp-file ;
33
34 : reverse-complement-out ( -- path )
35     "reverse-complement-out.txt" temp-file ;
36
37 : reverse-complement-main ( -- )
38     reverse-complement-in
39     reverse-complement-out
40     reverse-complement ;
41
42 MAIN: reverse-complement-main