Here's the first example from the clojure docs for partition-by: { 1 2 3 4 5 } [ [ 3 = not ] bi@ and ] monotonic-split { { 1 2 } { 3 } { 4 5 } }
Also you could do this if the function is expensive so you only apply it once: { 1 2 3 4 5 } [ 3 = ] map-zip [ [ second ] bi@ = ] monotonic-split [ keys ] map . { { 1 2 } { 3 } { 4 5 } } The second example is { 1 1 1 2 2 3 3 } [ nip odd? ] monotonic-split . { { 1 1 1 } { 2 2 } { 3 3 } } Cheers, Doug On Wed, Dec 4, 2019 at 3:07 PM <pet...@riseup.net> wrote: > Just like last year I'm working through Advent of Code challenges. Jus > like last year I'm probably going to fall out in the next day or two :) > Nevertheless, I'm still holding up, and have a question. > > The 4th day part 2 quest has a test, semi-quoting: two adjacent matching > digits that are not part of a larger group of matching digits. So 112 is > fine (two 1's) but 111 is not. Also 11122 is fine, we're just looking > for any occurrence of two adjacent matching digits. > > I write some clojure in my day job and there's this function > partition-by[1]. With a word like that the check could simply be > > digits [ ] partition-by [ length 2 = ] any? > > where digits explodes the number into a vector of its digits. > > Alas, I couldn't find such a word and after a lot of looking around > nothing similar. Grouping and clumping and such didn't lead me to any > simple solution, so I just rolled something dirty: > > : -reset ( cnt curr next -- one next ) [ 2drop 1 ] dip ; > : -inc ( cnt curr next -- cnt+1 curr ) drop [ 1 + ] dip ; > : -init ( seq -- cnt curr seq ) [ 1 ] dip unclip-slice swap ; > : has-2? ( seq -- ? ) -init [ 2dup = not [ pick 2 = [ ] [ -reset f ] > if ] [ -inc f ] if ] find [ 2drop 2 = ] dip or ; > > I was thinking about writing partition-by myself but I don't like using > locals and I just wasn't able to come up with a simple solution on the > stack. > > Thoughts/pointers welcome! > > P.S.: if anyone wants to see/compare/review my solutions so far I can > post it somewhere, just let me know. > > > [1] https://clojuredocs.org/clojure.core/partition-by > > -- > ------------ > Peter Nagy > ------------ > > > _______________________________________________ > Factor-talk mailing list > Factor-talk@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/factor-talk >
_______________________________________________ Factor-talk mailing list Factor-talk@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/factor-talk