aboutsummaryrefslogtreecommitdiff
path: root/challenge-203
diff options
context:
space:
mode:
authorJan Krňávek <Jan.Krnavek@gmail.com>2023-02-12 23:33:32 +0100
committerJan Krňávek <Jan.Krnavek@gmail.com>2023-02-12 23:33:32 +0100
commitc3ec06ea166a2dfe33e00ce059b20e39a030822f (patch)
tree8dff9ba20af733fb213e8aa4201437af80cf1b8b /challenge-203
parentf92e84261b474f81c014f4982268d6e2797b66d9 (diff)
downloadperlweeklychallenge-club-c3ec06ea166a2dfe33e00ce059b20e39a030822f.tar.gz
perlweeklychallenge-club-c3ec06ea166a2dfe33e00ce059b20e39a030822f.tar.bz2
perlweeklychallenge-club-c3ec06ea166a2dfe33e00ce059b20e39a030822f.zip
solutions week 203
Diffstat (limited to 'challenge-203')
-rw-r--r--challenge-203/wambash/raku/ch-1.raku21
-rw-r--r--challenge-203/wambash/raku/ch-2.raku35
2 files changed, 56 insertions, 0 deletions
diff --git a/challenge-203/wambash/raku/ch-1.raku b/challenge-203/wambash/raku/ch-1.raku
new file mode 100644
index 0000000000..145edc66b5
--- /dev/null
+++ b/challenge-203/wambash/raku/ch-1.raku
@@ -0,0 +1,21 @@
+#!/usr/bin/env raku
+
+sub special-quadruplets (+@nums) {
+ @nums
+ andthen .combinations(3)
+ andthen .map: *.sum
+ andthen .map: { |@nums.grep: * == $_ }\
+ andthen .elems
+}
+
+multi MAIN (Bool :test($)!) {
+ use Test;
+ is special-quadruplets(1,2,3,6),1;
+ is special-quadruplets(1,1,1,3,5),4;
+ is special-quadruplets(3,3,6,4,5),0;
+ done-testing;
+}
+
+multi MAIN (*@nums) {
+ say special-quadruplets @nums
+}
diff --git a/challenge-203/wambash/raku/ch-2.raku b/challenge-203/wambash/raku/ch-2.raku
new file mode 100644
index 0000000000..a89310245f
--- /dev/null
+++ b/challenge-203/wambash/raku/ch-2.raku
@@ -0,0 +1,35 @@
+#!/usr/bin/env raku
+
+sub deep-walk (:$start= '.'.IO, :&deep = *.dir, :&test = *.d --> Supply) {
+ my sub supply-gen ( $start ) {
+ for deep( $start ) {
+ .emit;
+ when &test { supply-gen $_} ;
+ }
+ };
+ supply supply-gen $start;
+}
+
+multi MAIN (Bool :test($)!) {
+ use Test;
+ is-deeply deep-walk(:start(1,(2,(3,4))), :deep(*.list), :test(* !~~ Int) ).grep( * ~~ Int).list, (1,2,3,4);
+ my $source = 'a/b/c' => (
+ 1 => ('1.a' =>'a.txt', '1.txt'),
+ 2 => '2.txt',
+ 3 => '3.txt',
+ 4 => Empty,
+ 5 => '5.txt',
+ );
+ is-deeply deep-walk( :start($source), :deep(*.value), :test( * ~~ Pair ) ).grep( * ~~ Pair).map(*.key).list, (1,'1.a',2,3,4,5);
+ done-testing;
+}
+
+multi MAIN ( IO() $from, IO() $to = '.'.IO, Bool :no-act(:$n) = False, Bool :verbose(:$v) = False ) {
+ deep-walk start => $from
+ andthen .grep: *.d
+ andthen .map: { $to.add( $_.subst: / ^ $from / ) }\
+ andthen {
+ .tap( *.say ) if $n|$v;
+ .tap( *.mkdir ) if $v;
+ }
+}