aboutsummaryrefslogtreecommitdiff
path: root/challenge-236
diff options
context:
space:
mode:
authorMohammad Sajid Anwar <Mohammad.Anwar@yahoo.com>2023-10-01 18:00:53 +0100
committerGitHub <noreply@github.com>2023-10-01 18:00:53 +0100
commitad8f0118dc686186f6c39fb94bf86d6ba444f8da (patch)
treec19db3c2dbb12c3b2e2108351a1d2f26cd491c13 /challenge-236
parent2a81ac12e31c6f35dac9c27e4ba47b6eec4c07cc (diff)
parent021302adaebf3498a639338f56123830f35dea73 (diff)
downloadperlweeklychallenge-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.raku44
-rw-r--r--challenge-236/wambash/raku/ch-2.raku31
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
+}