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
6 MEMO: trans-map ( -- str )
8 "TGCAAKYRMBDHV" "ACGTUMRYKVHDB"
9 [ pick set-nth ] 2each ;
11 : do-trans-map ( str -- )
12 [ ch>upper trans-map nth ] change-each ;
14 HINTS: do-trans-map string ;
16 : translate-seq ( seq -- str )
17 concat dup reverse-here dup do-trans-map ;
20 translate-seq 60 <groups> [ print ] each ;
22 : do-line ( seq line -- seq )
23 dup first ">;" memq? [
24 over show-seq print dup delete-all
29 HINTS: do-line vector string ;
31 : (reverse-complement) ( seq -- )
32 readln [ do-line (reverse-complement) ] [ show-seq ] if* ;
34 : reverse-complement ( infile outfile -- )
37 500000 <vector> (reverse-complement)
41 : reverse-complement-in
42 "reverse-complement-in.txt" temp-file ;
44 : reverse-complement-out
45 "reverse-complement-out.txt" temp-file ;
47 : reverse-complement-main ( -- )
49 reverse-complement-out
52 MAIN: reverse-complement-main