diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2020-09-13 09:13:27 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-09-13 09:13:27 +0100 |
| commit | 596b08af9e023e615d08b5379e26884d6aedd30a (patch) | |
| tree | d9efdf1157a221c8eceb960893b55736a8b1f685 | |
| parent | d3c942ee30f9bbb4c51e4401bade63b785959568 (diff) | |
| parent | dbcd5aa3cfd78b27e552688470ff049df8895ab0 (diff) | |
| download | perlweeklychallenge-club-596b08af9e023e615d08b5379e26884d6aedd30a.tar.gz perlweeklychallenge-club-596b08af9e023e615d08b5379e26884d6aedd30a.tar.bz2 perlweeklychallenge-club-596b08af9e023e615d08b5379e26884d6aedd30a.zip | |
Merge pull request #2264 from wambash/challange-week-077
Challange week 077
| -rwxr-xr-x | challenge-077/wambash/raku/ch-1.raku | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/challenge-077/wambash/raku/ch-1.raku b/challenge-077/wambash/raku/ch-1.raku new file mode 100755 index 0000000000..6e0ff1dfdb --- /dev/null +++ b/challenge-077/wambash/raku/ch-1.raku @@ -0,0 +1,39 @@ +#!/usr/bin/env raku + +constant @fib := 1, 2, * + * ... *; + +multi iter ( Capture $c ( :$sum, :@pos, :@used ) ) { + \( sum => $sum + @pos.head, pos => @pos.skip, used => (|@used, @pos.head) ), + \( |$c, pos => @pos.skip) +}; + +multi next-level ( List $a ) { + $a.map: |*.&iter +} + + +constant @fib-sum := (\( :0sum, pos => @fib ),), *.&next-level.cache ... *; + +sub fib-sum ( $sum ) { + my $stop-index = @fib.first: * > $sum, :k; + + @fib-sum + andthen .[$stop-index] + andthen .grep: { .<sum> == $sum } +} + +sub MAIN ( :$test!, :$log ) { + use Test; + + my $wi = &iter.wrap: { + note .<sum>, " ", .<used>, " ", .<pos>.cache.head; + callsame + } if $log; + + is-deeply fib-sum(9).map( *.<used>), ((1,3,5),(1,8)),; + is-deeply fib-sum(6).map( *.<used>), ((1,2,3),(1,5)),; + + $wi.restore if $log; + + done-testing() +} |
