From: Doug Coleman Date: Fri, 29 Jul 2022 21:29:25 +0000 (-0500) Subject: rosetta-code.multisplit: refactor X-Git-Tag: 0.99~1284 X-Git-Url: https://gitweb.factorcode.org/gitweb.cgi?p=factor.git;a=commitdiff_plain;h=a32693d7ad096c86ef5fb8eb14ffc07f1cd8bf9f rosetta-code.multisplit: refactor --- diff --git a/extra/rosetta-code/multisplit/multisplit.factor b/extra/rosetta-code/multisplit/multisplit.factor index 430077f110..3437741229 100644 --- a/extra/rosetta-code/multisplit/multisplit.factor +++ b/extra/rosetta-code/multisplit/multisplit.factor @@ -1,22 +1,17 @@ ! Copyright (C) 2020 Alexander Ilin. ! See http://factorcode.org/license.txt for BSD license. -USING: arrays kernel make sequences ; +USING: arrays assocs kernel make sequences ; IN: rosetta-code.multisplit -: ?pair ( ? x -- {?,x}/f ) - over [ 2array ] [ 2drop f ] if ; - -: best-separator ( seq -- pos index ) - dup [ first ] map infimum '[ first _ = ] find nip first2 ; - -: first-subseq ( separators seq -- n separator ) - dupd [ swap [ subseq-start ] dip ?pair ] curry map-index sift - [ drop f f ] [ best-separator rot nth ] if-empty ; +: first-subseq ( seq separators -- n separator ) + tuck + [ [ subsequence-starts ] dip 2array ] withd map-index sift-keys + [ drop f f ] [ [ first ] infimum-by first2 rot nth ] if-empty ; : multisplit ( string separators -- seq ) '[ - [ _ over first-subseq dup ] [ - length -rot cut-slice swap , swap tail-slice + [ dup _ first-subseq dup ] [ + length -rot cut-slice [ , ] dip swap tail-slice ] while 2drop , ] { } make ;