diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-04-18 13:46:11 +0100 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-04-18 13:46:11 +0100 |
| commit | 878d2d48e7392e8f002198d1ba966ca3d4188b23 (patch) | |
| tree | 6e79de943fc23047dcb89ddb470d2145167322f7 | |
| parent | 620c0e3c4e94a5fd82dd24b8a348d883d182fbb3 (diff) | |
| download | perlweeklychallenge-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.pl | 2 | ||||
| -rw-r--r-- | challenge-056/mohammad-anwar/perl/ch-1a.pl | 7 | ||||
| -rw-r--r-- | challenge-056/mohammad-anwar/raku/ch-1.p6 | 37 | ||||
| -rw-r--r-- | challenge-056/mohammad-anwar/raku/ch-1a.p6 | 46 |
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; +} |
