From 9fe9437445ba7f93374354f48a641f4ba6d847b4 Mon Sep 17 00:00:00 2001 From: John Benediktsson Date: Sun, 9 Sep 2012 11:38:59 -0700 Subject: [PATCH] math.transforms.bwt: adding inefficient versions of Burrows-Wheeler transform. --- extra/math/transforms/bwt/authors.txt | 1 + extra/math/transforms/bwt/bwt-tests.factor | 6 ++++++ extra/math/transforms/bwt/bwt.factor | 15 +++++++++++++++ extra/math/transforms/bwt/summary.txt | 1 + 4 files changed, 23 insertions(+) create mode 100644 extra/math/transforms/bwt/authors.txt create mode 100644 extra/math/transforms/bwt/bwt-tests.factor create mode 100644 extra/math/transforms/bwt/bwt.factor create mode 100644 extra/math/transforms/bwt/summary.txt diff --git a/extra/math/transforms/bwt/authors.txt b/extra/math/transforms/bwt/authors.txt new file mode 100644 index 0000000000..e091bb8164 --- /dev/null +++ b/extra/math/transforms/bwt/authors.txt @@ -0,0 +1 @@ +John Benediktsson diff --git a/extra/math/transforms/bwt/bwt-tests.factor b/extra/math/transforms/bwt/bwt-tests.factor new file mode 100644 index 0000000000..a5b9856bca --- /dev/null +++ b/extra/math/transforms/bwt/bwt-tests.factor @@ -0,0 +1,6 @@ +! Copyright (C) 2012 John Benediktsson +! See http://factorcode.org/license.txt for BSD license +USING: strings tools.test ; +IN: math.transforms.bwt + +{ "asdf" } [ "asdf" bwt ibwt >string ] unit-test diff --git a/extra/math/transforms/bwt/bwt.factor b/extra/math/transforms/bwt/bwt.factor new file mode 100644 index 0000000000..4415c5136c --- /dev/null +++ b/extra/math/transforms/bwt/bwt.factor @@ -0,0 +1,15 @@ +! Copyright (C) 2012 John Benediktsson +! See http://factorcode.org/license.txt for BSD license +USING: arrays fry kernel math sequences sequences.extras +sorting ; +IN: math.transforms.bwt + +! Inefficient versions of Burrows-Wheeler Transform + +: bwt ( seq -- newseq ) + { 0 } swap append all-rotations natural-sort [ last ] map ; + +: ibwt ( newseq -- seq ) + [ length [ { } ] keep ] keep + '[ _ [ prefix ] 2map natural-sort ] times + [ { 0 } tail? ] find nip 1 head* ; diff --git a/extra/math/transforms/bwt/summary.txt b/extra/math/transforms/bwt/summary.txt new file mode 100644 index 0000000000..2445877b41 --- /dev/null +++ b/extra/math/transforms/bwt/summary.txt @@ -0,0 +1 @@ +Burrows-Wheeler Transform