From c2d5208ded891b4b9a21753021d96bdde0f90e6b Mon Sep 17 00:00:00 2001 From: Jan Krňávek Date: Sun, 18 Oct 2020 13:11:43 +0200 Subject: solutions week 082 --- challenge-082/wambash/raku/ch-2.raku | 42 +++++++++++++++++++++++++++++------- 1 file changed, 34 insertions(+), 8 deletions(-) diff --git a/challenge-082/wambash/raku/ch-2.raku b/challenge-082/wambash/raku/ch-2.raku index 6b159c8eaf..b15a83588a 100644 --- a/challenge-082/wambash/raku/ch-2.raku +++ b/challenge-082/wambash/raku/ch-2.raku @@ -1,18 +1,44 @@ #!/usr/bin/env raku -multi iter ( ( (),Empty ) ) { +multi step ( ( :@what where :!elems, :@from where :!elems ) ) { True } -multi iter ( (@c,+@a) ) { - @a.first: { .head eqv @c.head}, :k - andthen \(@c.skip, |@a[0..^ $_], @a[$_].skip.cache||Empty, |@a[$_ ^.. *]) +multi step ( (:@what, :@from ) ) { + @from.first: { .head eqv @what.head}, :k + andthen \( + what => @what.skip, + from => ( + |@from[0 ..^ $_], + @from[$_].skip.cache || Empty, + |@from[$_ ^.. *] + ).pick(*), + ) orelse False } -\((1,2,2,2,3),(1,2),(2,2,3)), *.&iter ... Bool -andthen .say; +multi interleave ( :@what, :@from ) { + \( :@what, :@from ) + andthen $_, *.&step ... Bool +} + +multi interleave ( Str :$what, :@from ) { + samewith( + what => $what.comb, + from => @from.map: *.comb.cache, + ).tail +} + + +multi MAIN ( $what, +@from ) { + say interleave(:$what, :@from) +} -sub interleave-string (@c, +@a) { - ... +multi MAIN (Bool :$test!) { + use Test; + is-deeply interleave( :what(1,2,2,3), :from((1,2),(2,3)) ).[*-3], \( :what((3).Seq),:from(((3,),).Seq) ); + ok interleave( :what, :from ); + ok interleave( :what, :from ); + nok interleave( :what, :from ); + done-testing; } -- cgit