aboutsummaryrefslogtreecommitdiff
path: root/challenge-268
diff options
context:
space:
mode:
authorMohammad S Anwar <mohammad.anwar@yahoo.com>2024-05-11 14:38:25 +0100
committerMohammad S Anwar <mohammad.anwar@yahoo.com>2024-05-11 14:38:25 +0100
commitb2998ca96896e0a89935bb9b87f86ea1621e2f09 (patch)
tree1809efbe8d1004052fd2e60ae6544ed35d4098c3 /challenge-268
parent54d549c61f80e8a98104290ce981779e25d6b75e (diff)
downloadperlweeklychallenge-club-b2998ca96896e0a89935bb9b87f86ea1621e2f09.tar.gz
perlweeklychallenge-club-b2998ca96896e0a89935bb9b87f86ea1621e2f09.tar.bz2
perlweeklychallenge-club-b2998ca96896e0a89935bb9b87f86ea1621e2f09.zip
- Added solutions by Jan Krnavek.
- Added solutions by Robbie Hatley. - Added solutions by Packy Anderson. - Added solutions by Luca Ferrari. - Added solutions by Asher Harvey-Smith. - Added solutions by Jorg Sommrey. - Added solutions by Nelo Tovar. - Added solutions by Laurent Rosenfeld. - Added solutions by Reinier Maliepaard.
Diffstat (limited to 'challenge-268')
-rw-r--r--challenge-268/laurent-rosenfeld/blog.txt1
-rw-r--r--challenge-268/laurent-rosenfeld/blog1.txt1
-rw-r--r--challenge-268/laurent-rosenfeld/perl/ch-1.pl21
-rw-r--r--challenge-268/laurent-rosenfeld/perl/ch-2.pl21
-rw-r--r--challenge-268/laurent-rosenfeld/raku/ch-1.raku14
-rw-r--r--challenge-268/laurent-rosenfeld/raku/ch-2.raku13
-rw-r--r--challenge-268/nelo-tovar/bash/21
-rw-r--r--challenge-268/reinier-maliepaard/blog.txt1
-rw-r--r--challenge-268/reinier-maliepaard/perl/ch-1.pl80
-rw-r--r--challenge-268/reinier-maliepaard/perl/ch-2.pl37
10 files changed, 189 insertions, 1 deletions
diff --git a/challenge-268/laurent-rosenfeld/blog.txt b/challenge-268/laurent-rosenfeld/blog.txt
new file mode 100644
index 0000000000..bb5292ff01
--- /dev/null
+++ b/challenge-268/laurent-rosenfeld/blog.txt
@@ -0,0 +1 @@
+https://blogs.perl.org/users/laurent_r/2024/05/perl-weekly-challenge-268-magic-numbers.html
diff --git a/challenge-268/laurent-rosenfeld/blog1.txt b/challenge-268/laurent-rosenfeld/blog1.txt
new file mode 100644
index 0000000000..3b49873d8c
--- /dev/null
+++ b/challenge-268/laurent-rosenfeld/blog1.txt
@@ -0,0 +1 @@
+https://blogs.perl.org/users/laurent_r/2024/05/perl-weekly-challenge-268-number-game.html
diff --git a/challenge-268/laurent-rosenfeld/perl/ch-1.pl b/challenge-268/laurent-rosenfeld/perl/ch-1.pl
new file mode 100644
index 0000000000..dbdf916756
--- /dev/null
+++ b/challenge-268/laurent-rosenfeld/perl/ch-1.pl
@@ -0,0 +1,21 @@
+use strict;
+use warnings;
+use feature 'say';
+
+sub magic_nr {
+ my @in1 = sort {$a<=>$b} @{$_[0]};
+ my @in2 = sort {$a<=>$b} @{$_[1]};
+ my $gap = $in1[0] - $in2[0];
+ for my $i (1..$#in1) {
+ return "undef" if $in1[$i] - $in2[$i] != $gap;
+ }
+ return abs $gap;
+}
+
+my @tests = ([[<3 7 5>], [<9 5 7>]], [[<1 2 1>], [<5 4 4>]],
+ [[2,], [5]], [[<3 7 5>], [<6 5 7>]] );
+
+for my $test (@tests) {
+ printf "%-6s - %-6s => ", "@{$test->[0]}", "@{$test->[1]}";
+ say magic_nr $test->[0], $test->[1];
+}
diff --git a/challenge-268/laurent-rosenfeld/perl/ch-2.pl b/challenge-268/laurent-rosenfeld/perl/ch-2.pl
new file mode 100644
index 0000000000..9522930f4a
--- /dev/null
+++ b/challenge-268/laurent-rosenfeld/perl/ch-2.pl
@@ -0,0 +1,21 @@
+use strict;
+use warnings;
+use feature 'say';
+
+sub number_game {
+ my @in = sort { $a <=> $b } @_;
+ my @result;
+ while (@in) {
+ my $i = shift @in;
+ my $j = shift @in;
+ push @result, $j, $i;
+ }
+
+ return join " ", @result;
+}
+
+my @tests = ([<2 5 3 4>], [<1 1 4 3 6 4 9 6>], [<1 2 2 3>]);
+for my $test (@tests) {
+ printf "%-16s => ", "@$test";
+ say number_game @$test;
+}
diff --git a/challenge-268/laurent-rosenfeld/raku/ch-1.raku b/challenge-268/laurent-rosenfeld/raku/ch-1.raku
new file mode 100644
index 0000000000..ad9c22ed51
--- /dev/null
+++ b/challenge-268/laurent-rosenfeld/raku/ch-1.raku
@@ -0,0 +1,14 @@
+sub magic-nr (@x, @y) {
+ my @in1 = @x.sort;
+ my @in2 = @y.sort;
+ my @gaps = map {@in1[$_] - @in2[$_]}, 0..@x.end;
+ return Nil unless [==] @gaps;
+ return @gaps[0].abs;
+}
+
+my @tests = (<3 7 5>, <9 5 7>), (<1 2 1>, <5 4 4>),
+ ((2,), (5,)), (<3 7 5>, <6 5 7>);
+for @tests -> @test {
+ printf "%-6s - %-6s => ", "@test[0]", "@test[1]";
+ say magic-nr @test[0], @test[1];
+}
diff --git a/challenge-268/laurent-rosenfeld/raku/ch-2.raku b/challenge-268/laurent-rosenfeld/raku/ch-2.raku
new file mode 100644
index 0000000000..c14786c055
--- /dev/null
+++ b/challenge-268/laurent-rosenfeld/raku/ch-2.raku
@@ -0,0 +1,13 @@
+sub number-game (@in) {
+ my @result;
+ for @in.sort -> $i, $j {
+ push @result, $j, $i;
+ }
+ return @result;
+}
+
+my @tests = <2 5 3 4>, <1 1 4 3 6 4 9 6>, <1 2 2 3>;
+for @tests -> @test {
+ printf "%-16s => ", "@test[]";
+ say number-game @test;
+}
diff --git a/challenge-268/nelo-tovar/bash/2 b/challenge-268/nelo-tovar/bash/2
deleted file mode 100644
index ac098b11e8..0000000000
--- a/challenge-268/nelo-tovar/bash/2
+++ /dev/null
@@ -1 +0,0 @@
-i=2
diff --git a/challenge-268/reinier-maliepaard/blog.txt b/challenge-268/reinier-maliepaard/blog.txt
new file mode 100644
index 0000000000..8cc2bcf2d4
--- /dev/null
+++ b/challenge-268/reinier-maliepaard/blog.txt
@@ -0,0 +1 @@
+https://reiniermaliepaard.nl/perl/pwc/index.php?id=pwc268
diff --git a/challenge-268/reinier-maliepaard/perl/ch-1.pl b/challenge-268/reinier-maliepaard/perl/ch-1.pl
new file mode 100644
index 0000000000..b0863ccdad
--- /dev/null
+++ b/challenge-268/reinier-maliepaard/perl/ch-1.pl
@@ -0,0 +1,80 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+
+I tried to find a solution without using the obvious 'sort'.
+The solution below is not efficient, but easy to understand and it
+does the job well
+
+sub magic_number {
+
+ # define two arrays
+ my ($arr_1_ref, $arr_2_ref) = @_;
+
+ # by dereferencing
+ my @arr_1 = @$arr_1_ref;
+ my @arr_2 = @$arr_2_ref;
+
+ # check if arrays are of the same size
+ die "Arrays must be of the same size" unless @arr_1 == @arr_2;
+
+ # more validation tests should be done...I'll leave it to you :-)
+
+ my $magic_number;
+
+ my %differences;
+
+ OUTER: for my $i (0 .. $#arr_1) {
+
+ for my $y (0 .. $#arr_2) {
+
+ # calculate the difference between elements
+ of the two arrays
+
+ my $diff = $arr_2[$y] - $arr_1[$i];
+
+ # if there is a magic number, then its frequency
+ must equal the size of @arr_1 (= length @arr_2)
+
+ if (++$differences{$diff} == scalar(@arr_1)) {
+ $magic_number = $diff;
+ last OUTER;
+ }
+ }
+ }
+
+ if (defined $magic_number) {
+ print "The magic number is: $magic_number\n";
+ } else {
+ print "No magic number found\n";
+ }
+}
+
+
+# TESTS
+
+my (@x, @y);
+
+# Example 1
+@x = (3, 7, 5);
+@y = (9, 5, 7);
+magic_number(\@x, \@y); # Output: The magic number is: 2
+magic_number(\@y, \@x); # Output: The magic number is: -2
+
+# Example 2
+@x = (1, 2, 1);
+@y = (5, 4, 4);
+magic_number(\@x, \@y); # Output: The magic number is: 3
+magic_number(\@y, \@x); # Output: The magic number is: -3
+
+# Example 3
+@x = (2);
+@y = (5);
+magic_number(\@x, \@y); # Output: The magic number is: 3
+magic_number(\@y, \@x); # Output: The magic number is: -3
+
+# Example 4
+@x = (2, 3, 4);
+@y = (5, 7, 9);
+magic_number(\@x, \@y); # Output: No magic number found
+magic_number(\@y, \@x); # Output: No magic number found
diff --git a/challenge-268/reinier-maliepaard/perl/ch-2.pl b/challenge-268/reinier-maliepaard/perl/ch-2.pl
new file mode 100644
index 0000000000..6ee2cc5f85
--- /dev/null
+++ b/challenge-268/reinier-maliepaard/perl/ch-2.pl
@@ -0,0 +1,37 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+
+use List::MoreUtils qw(natatime);
+
+sub number_game {
+
+ my @ints = sort (@_);
+ my @new_arr = ();
+
+ # https://metacpan.org/pod/List::MoreUtils -> natatime
+ # natatime creates an array iterator, for looping over an array in chunks of $n items at a time.
+ # in our case $n = 2
+ my $it = (natatime 2, @ints);
+ while (my @vals = reverse( $it->() )) {
+ push(@new_arr, @vals);
+ }
+ print "(", join(", ", @new_arr), ")\n";
+
+}
+
+# TESTS
+
+my @ints;
+
+# Example 1
+@ints = (2, 5, 3, 4);
+number_game(@ints); # Output: (3, 2, 5, 4)
+
+# Example 2
+@ints = (9, 4, 1, 3, 6, 4, 6, 1);
+number_game(@ints); # Output: (1, 1, 4, 3, 6, 4, 9, 6)
+
+# Example 3
+@ints = (1, 2, 2, 3);
+number_game(@ints); # Output: (2, 1, 3, 2)