diff options
| author | Mohammad Sajid Anwar <Mohammad.Anwar@yahoo.com> | 2023-10-01 18:00:53 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-10-01 18:00:53 +0100 |
| commit | ad8f0118dc686186f6c39fb94bf86d6ba444f8da (patch) | |
| tree | c19db3c2dbb12c3b2e2108351a1d2f26cd491c13 /challenge-236 | |
| parent | 2a81ac12e31c6f35dac9c27e4ba47b6eec4c07cc (diff) | |
| parent | 021302adaebf3498a639338f56123830f35dea73 (diff) | |
| download | perlweeklychallenge-club-ad8f0118dc686186f6c39fb94bf86d6ba444f8da.tar.gz perlweeklychallenge-club-ad8f0118dc686186f6c39fb94bf86d6ba444f8da.tar.bz2 perlweeklychallenge-club-ad8f0118dc686186f6c39fb94bf86d6ba444f8da.zip | |
Merge pull request #8791 from wambash/challenge-week-236
solutions week 236
Diffstat (limited to 'challenge-236')
| -rw-r--r-- | challenge-236/wambash/raku/ch-1.raku | 44 | ||||
| -rw-r--r-- | challenge-236/wambash/raku/ch-2.raku | 31 |
2 files changed, 75 insertions, 0 deletions
diff --git a/challenge-236/wambash/raku/ch-1.raku b/challenge-236/wambash/raku/ch-1.raku new file mode 100644 index 0000000000..b82d421174 --- /dev/null +++ b/challenge-236/wambash/raku/ch-1.raku @@ -0,0 +1,44 @@ +#!/usr/bin/env raku + +multi exact-change-step ( $ (:%changes, :$bill ) ) { + %changes + andthen .sort + andthen .first: { .key ≤ $bill }, :end + andthen \(changes => %changes ∖ .key, bill => $bill - .key) + orelse Nil +} + +multi exact-change-producer ( %changes, $bill ) { + \(:%changes, :bill($bill - 5)), *.&exact-change-step ...^ !*.defined #*.<changes>.total == 0 + andthen .first: *.<bill> == 0 + andthen .<changes> (+) $bill + orelse Nil +} + +multi exact-change-producer ( Nil, $ ) { + Nil +} + +sub exact-change (+bills) { + produce &exact-change-producer, bag(), |bills + andthen .tail +} + +multi MAIN (Bool :test($)!) { + use Test; + is-deeply exact-change-step(\(changes => bag(20,10,10,5,5), :15bill)), \(changes => bag(20,10,5,5),:5bill); + is-deeply exact-change-step(\(changes => bag(20,10,5,5), :5bill)), \(changes => bag(20,10,5),:0bill); + is-deeply exact-change-step(\(changes => bag(), :5bill)), Nil; + is-deeply exact-change-producer( bag(20,10,10,5,5), 20), bag(20,20,10,5); + is-deeply exact-change-producer( bag(), 20), Nil; + is-deeply exact-change(5,5,5,10,20), bag(5,20); + is-deeply exact-change(5,5,10,10,20),Nil; + is-deeply exact-change(10,10,20),Nil; + is-deeply exact-change(5,5,5,20),bag(20); + is-deeply exact-change(5,5,10,5,5,10,20,10), bag(20,10,10); + done-testing; +} + +multi MAIN (*@bills) { + say ?exact-change @bills +} diff --git a/challenge-236/wambash/raku/ch-2.raku b/challenge-236/wambash/raku/ch-2.raku new file mode 100644 index 0000000000..e542b03748 --- /dev/null +++ b/challenge-236/wambash/raku/ch-2.raku @@ -0,0 +1,31 @@ +#!/usr/bin/env raku + +sub array-loops (+@ints) { + my %hints := @ints.pairs.Map; + + @ints.map(*.Set).Set, { set $_.keys.map: { [(|)] $_, %hints{|.keys } } } ...^ * eqv * + andthen .tail +} + +multi MAIN (Bool :test($)!) { + use Test; + is-deeply( + array-loops(4,6,3,8,15,0,13,18,7,16,14,19,17,5,11,1,12,2,9,10), + set(set(4,15,1,6,13,5,0),set(3,8,7,18,9,16,12,17,2), set(14,11,19,10)), + ); + is-deeply( + array-loops(0,1,13,7,6,8,10,11,2,14,16,4,12,9,17,5,3,18,15,19), + set(set(0),set(1), set(13,9,14,17,18,15,5,8,2), set(7,11,4,6,10,16,3),set(12),set(19)), + ); + is-deeply( + array-loops(9,8,3,11,5,7,13,19,12,4,14,10,18,2,16,1,0,15,6,17), + set(set(0..19),), + ); + is array-loops(0..19).elems,20; + is array-loops(|(1..19),0).elems,1; + done-testing; +} + +multi MAIN (+@ints) { + say +array-loops @ints +} |
