aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <mohammad.anwar@yahoo.com>2020-04-18 13:46:11 +0100
committerMohammad S Anwar <mohammad.anwar@yahoo.com>2020-04-18 13:46:11 +0100
commit878d2d48e7392e8f002198d1ba966ca3d4188b23 (patch)
tree6e79de943fc23047dcb89ddb470d2145167322f7
parent620c0e3c4e94a5fd82dd24b8a348d883d182fbb3 (diff)
downloadperlweeklychallenge-club-878d2d48e7392e8f002198d1ba966ca3d4188b23.tar.gz
perlweeklychallenge-club-878d2d48e7392e8f002198d1ba966ca3d4188b23.tar.bz2
perlweeklychallenge-club-878d2d48e7392e8f002198d1ba966ca3d4188b23.zip
- Added Raku solutions to Diff-K.
-rw-r--r--challenge-056/mohammad-anwar/perl/ch-1.pl2
-rw-r--r--challenge-056/mohammad-anwar/perl/ch-1a.pl7
-rw-r--r--challenge-056/mohammad-anwar/raku/ch-1.p637
-rw-r--r--challenge-056/mohammad-anwar/raku/ch-1a.p646
4 files changed, 88 insertions, 4 deletions
diff --git a/challenge-056/mohammad-anwar/perl/ch-1.pl b/challenge-056/mohammad-anwar/perl/ch-1.pl
index 0ca0e3c9b3..e5e8f1e492 100644
--- a/challenge-056/mohammad-anwar/perl/ch-1.pl
+++ b/challenge-056/mohammad-anwar/perl/ch-1.pl
@@ -27,7 +27,7 @@ sub find_match {
my $S = scalar(@L);
my $matched = [];
foreach my $i (0 .. --$S) {
- foreach my $j (++$i .. $S) {
+ foreach my $j ($i+1 .. $S) {
my $k = $L[$i] - $L[$j];
if ($k == $K) {
push @$matched, sprintf("%2s,%2s => (%2s - %2s) => %d", $i, $j, $L[$i], $L[$j], $k);
diff --git a/challenge-056/mohammad-anwar/perl/ch-1a.pl b/challenge-056/mohammad-anwar/perl/ch-1a.pl
index 5f3e11b1b0..4d385cd58e 100644
--- a/challenge-056/mohammad-anwar/perl/ch-1a.pl
+++ b/challenge-056/mohammad-anwar/perl/ch-1a.pl
@@ -8,8 +8,9 @@ use Test::Deep;
my $unit_tests = {
2 => {
- in => [10, 9, 7, 6, 1],
- out => [ " 1, 2 => ( 9 - 7) => 2" ]
+ in => [10, 8, 7, 6, 1],
+ out => [ " 0, 1 => (10 - 8) => 2",
+ " 1, 3 => ( 8 - 6) => 2" ]
},
3 => {
in => [20, 15, 14, 10, 7, 6, 4, 1],
@@ -38,7 +39,7 @@ sub find_match {
my $S = scalar(@L);
my $matched = [];
foreach my $i (0 .. --$S) {
- foreach my $j (++$i .. $S) {
+ foreach my $j ($i+1 .. $S) {
my $k = $L[$i] - $L[$j];
if ($k == $K) {
push @$matched, sprintf("%2s,%2s => (%2s - %2s) => %d", $i, $j, $L[$i], $L[$j], $k);
diff --git a/challenge-056/mohammad-anwar/raku/ch-1.p6 b/challenge-056/mohammad-anwar/raku/ch-1.p6
new file mode 100644
index 0000000000..e5380adeb9
--- /dev/null
+++ b/challenge-056/mohammad-anwar/raku/ch-1.p6
@@ -0,0 +1,37 @@
+#!/usr/bin/env perl6
+
+use v6.d;
+
+multi sub MAIN(*@) is hidden-from-USAGE {
+ say $*USAGE;
+ say "\nERROR: Invalid k, must be > 0 !!!";
+}
+
+multi sub MAIN(Int :$K where * > 0 = 3, Int :$S = 10) {
+
+ my Int @L = (1..50).pick($S).sort.reverse;
+ say "\@L = [" ~ @L.join(", ") ~ "]";
+ my $matched = find-match($K, @L);
+
+ (@$matched.elems > 0)
+ ??
+ (@$matched.join("\n").say)
+ !!
+ (say "Oops, none matched.");
+}
+
+sub find-match(Int $K, @L where .all ~~ Int) {
+ my $matched = [];
+ my $S = @L.elems;
+ my $fmt = "%2s,%2s => (%2s - %2s) => %d";
+ for 0 .. --$S -> $i {
+ for $i+1 .. $S -> $j {
+ my $k = @L[$i] - @L[$j];
+ if $k == $K {
+ push @$matched, sprintf($fmt, $i, $j, @L[$i], @L[$j], $k);
+ }
+ }
+ }
+
+ return $matched;
+}
diff --git a/challenge-056/mohammad-anwar/raku/ch-1a.p6 b/challenge-056/mohammad-anwar/raku/ch-1a.p6
new file mode 100644
index 0000000000..f241fc90ba
--- /dev/null
+++ b/challenge-056/mohammad-anwar/raku/ch-1a.p6
@@ -0,0 +1,46 @@
+#!/usr/bin/env perl6
+
+use Test;
+
+my $unit-tests = :{
+ 2 => {
+ in => [ 10, 8, 7, 6, 1 ],
+ out => [ " 0, 1 => (10 - 8) => 2",
+ " 1, 3 => ( 8 - 6) => 2" ]
+ },
+ 3 => {
+ in => [ 20, 15, 14, 10, 7, 6, 4, 1 ],
+ out => [ " 3, 4 => (10 - 7) => 3",
+ " 4, 6 => ( 7 - 4) => 3",
+ " 6, 7 => ( 4 - 1) => 3"]
+ },
+ 4 => {
+ in => [ 50, 40, 30, 20, 10 ],
+ out => [ ]
+ },
+};
+
+for $unit-tests.keys -> $K {
+ my @L = $unit-tests{$K}<in>.Slip;
+ my $R = $unit-tests{$K}<out>;
+
+ is-deeply(find-match($K, @L), $R, "testing with K=$K");
+}
+
+done-testing;
+
+sub find-match(Int $K, @L where .all ~~ Int) {
+ my $matched = [];
+ my $S = @L.elems;
+ my $fmt = "%2s,%2s => (%2s - %2s) => %d";
+ for 0 .. --$S -> $i {
+ for $i+1 .. $S -> $j {
+ my $k = @L[$i] - @L[$j];
+ if $k == $K {
+ push @$matched, sprintf($fmt, $i, $j, @L[$i], @L[$j], $k);
+ }
+ }
+ }
+
+ return $matched;
+}