]> gitweb.factorcode.org Git - factor.git/blob - extra/benchmark/reverse-complement/reverse-complement.factor
Merge branch 'master' of git://factorcode.org/git/littledan
[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 hints unicode.case continuations io.encodings.ascii ;
4 IN: benchmark.reverse-complement
5
6 MEMO: trans-map ( -- str )
7     256 >string
8     "TGCAAKYRMBDHV" "ACGTUMRYKVHDB"
9     [ pick set-nth ] 2each ;
10
11 : do-trans-map ( str -- )
12     [ ch>upper trans-map nth ] change-each ;
13
14 HINTS: do-trans-map string ;
15
16 : translate-seq ( seq -- str )
17     concat dup reverse-here dup do-trans-map ;
18
19 : show-seq ( seq -- )
20     translate-seq 60 <groups> [ print ] each ;
21
22 : do-line ( seq line -- seq )
23     dup first ">;" memq? [
24         over show-seq print dup delete-all
25     ] [
26         over push
27     ] if ;
28
29 HINTS: do-line vector string ;
30
31 : (reverse-complement) ( seq -- )
32     readln [ do-line (reverse-complement) ] [ show-seq ] if* ;
33
34 : reverse-complement ( infile outfile -- )
35     ascii <file-writer> [
36         swap ascii <file-reader> [
37             swap <duplex-stream> [
38                 500000 <vector> (reverse-complement)
39             ] with-stream
40         ] with-disposal
41     ] with-disposal ;
42
43 : reverse-complement-in
44     "reverse-complement-in.txt" temp-file ;
45
46 : reverse-complement-out
47     "reverse-complement-out.txt" temp-file ;
48
49 : reverse-complement-main ( -- )
50     reverse-complement-in
51     reverse-complement-out
52     reverse-complement ;
53
54 MAIN: reverse-complement-main