diff --git a/basis/splitting/monotonic/authors.txt b/basis/splitting/monotonic/authors.txt new file mode 100644 index 0000000000..7c1b2f2279 --- /dev/null +++ b/basis/splitting/monotonic/authors.txt @@ -0,0 +1 @@ +Doug Coleman diff --git a/basis/splitting/monotonic/monotonic-tests.factor b/basis/splitting/monotonic/monotonic-tests.factor new file mode 100644 index 0000000000..ab4c48b292 --- /dev/null +++ b/basis/splitting/monotonic/monotonic-tests.factor @@ -0,0 +1,8 @@ +IN: splitting.monotonic +USING: tools.test math arrays kernel sequences ; + +[ { { 1 } { -1 5 } { 2 4 } } ] +[ { 1 -1 5 2 4 } [ < ] monotonic-split [ >array ] map ] unit-test +[ { { 1 1 1 1 } { 2 2 } { 3 } { 4 } { 5 } { 6 6 6 } } ] +[ { 1 1 1 1 2 2 3 4 5 6 6 6 } [ = ] monotonic-split [ >array ] map ] unit-test + diff --git a/basis/splitting/monotonic/monotonic.factor b/basis/splitting/monotonic/monotonic.factor new file mode 100644 index 0000000000..5bc7a51522 --- /dev/null +++ b/basis/splitting/monotonic/monotonic.factor @@ -0,0 +1,17 @@ +! Copyright (C) 2008 Doug Coleman. +! See http://factorcode.org/license.txt for BSD license. +USING: make namespaces sequences kernel fry ; +IN: splitting.monotonic + +: ,, ( obj -- ) building get peek push ; +: v, ( -- ) V{ } clone , ; +: ,v ( -- ) building get dup peek empty? [ dup pop* ] when drop ; + +: (monotonic-split) ( seq quot -- newseq ) + [ + [ dup unclip suffix ] dip + v, '[ over ,, @ [ v, ] unless ] 2each ,v + ] { } make ; inline + +: monotonic-split ( seq quot -- newseq ) + over empty? [ 2drop { } ] [ (monotonic-split) ] if ; inline diff --git a/basis/splitting/monotonic/summary.txt b/basis/splitting/monotonic/summary.txt new file mode 100644 index 0000000000..6782bd0010 --- /dev/null +++ b/basis/splitting/monotonic/summary.txt @@ -0,0 +1 @@ +Split a sequence into monotonically-increasing subsequences diff --git a/basis/splitting/monotonic/tags.txt b/basis/splitting/monotonic/tags.txt new file mode 100644 index 0000000000..d4c087751e --- /dev/null +++ b/basis/splitting/monotonic/tags.txt @@ -0,0 +1,2 @@ +algorithms +sequences