2009-11-05 23:22:21 -05:00
|
|
|
USING: kernel locals io io.files splitting strings io.encodings.ascii
|
2007-11-24 19:55:48 -05:00
|
|
|
hashtables sequences assocs math namespaces prettyprint
|
2008-02-01 19:26:32 -05:00
|
|
|
math.parser combinators arrays sorting unicode.case ;
|
2007-11-24 19:55:48 -05:00
|
|
|
|
|
|
|
IN: benchmark.knucleotide
|
|
|
|
|
|
|
|
: float>string ( float places -- string )
|
|
|
|
swap >float number>string
|
|
|
|
"." split1 rot
|
|
|
|
over length over <
|
2009-01-29 23:19:07 -05:00
|
|
|
[ CHAR: 0 pad-tail ]
|
2008-12-03 20:11:55 -05:00
|
|
|
[ head ] if "." glue ;
|
2007-11-24 19:55:48 -05:00
|
|
|
|
|
|
|
: discard-lines ( -- )
|
|
|
|
readln
|
2007-11-25 00:50:12 -05:00
|
|
|
[ ">THREE" head? [ discard-lines ] unless ] when* ;
|
2007-11-24 19:55:48 -05:00
|
|
|
|
|
|
|
: read-input ( -- input )
|
|
|
|
discard-lines
|
|
|
|
">" read-until drop
|
2007-11-25 00:50:12 -05:00
|
|
|
CHAR: \n swap remove >upper ;
|
2007-11-24 19:55:48 -05:00
|
|
|
|
|
|
|
: tally ( x exemplar -- b )
|
2009-11-05 23:22:21 -05:00
|
|
|
clone [ [ inc-at ] curry each ] keep ;
|
2007-11-24 19:55:48 -05:00
|
|
|
|
|
|
|
: small-groups ( x n -- b )
|
|
|
|
swap
|
2010-01-14 13:08:22 -05:00
|
|
|
[ length swap - 1 + iota ] 2keep
|
2008-12-17 20:28:07 -05:00
|
|
|
[ [ over + ] dip subseq ] 2curry map ;
|
2007-11-24 19:55:48 -05:00
|
|
|
|
|
|
|
: handle-table ( inputs n -- )
|
|
|
|
small-groups
|
|
|
|
[ length ] keep
|
|
|
|
H{ } tally >alist
|
|
|
|
sort-values reverse
|
|
|
|
[
|
|
|
|
dup first write bl
|
|
|
|
second 100 * over / 3 float>string print
|
|
|
|
] each
|
2007-11-25 00:50:12 -05:00
|
|
|
drop ;
|
2007-11-24 19:55:48 -05:00
|
|
|
|
2009-11-05 23:22:21 -05:00
|
|
|
:: handle-n ( inputs x -- )
|
|
|
|
inputs x length small-groups :> groups
|
|
|
|
groups H{ } tally :> b
|
|
|
|
x b at [ 0 ] unless*
|
2009-01-30 13:49:22 -05:00
|
|
|
number>string 8 CHAR: \s pad-tail write ;
|
2007-11-24 19:55:48 -05:00
|
|
|
|
|
|
|
: process-input ( input -- )
|
|
|
|
dup 1 handle-table nl
|
|
|
|
dup 2 handle-table nl
|
|
|
|
{ "GGT" "GGTA" "GGTATT" "GGTATTTTAATT" "GGTATTTTAATTTATAGT" }
|
|
|
|
[ [ dupd handle-n ] keep print ] each
|
2007-11-25 00:50:12 -05:00
|
|
|
drop ;
|
2007-11-24 19:55:48 -05:00
|
|
|
|
|
|
|
: knucleotide ( -- )
|
2008-05-06 13:37:11 -04:00
|
|
|
"resource:extra/benchmark/knucleotide/knucleotide-input.txt"
|
2008-02-16 23:17:41 -05:00
|
|
|
ascii [ read-input ] with-file-reader
|
2007-11-25 00:50:12 -05:00
|
|
|
process-input ;
|
2007-11-24 19:55:48 -05:00
|
|
|
|
|
|
|
MAIN: knucleotide
|