aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-334/kjetillll/perl/ch-1.pl8
-rw-r--r--challenge-334/kjetillll/perl/ch-2.pl24
2 files changed, 32 insertions, 0 deletions
diff --git a/challenge-334/kjetillll/perl/ch-1.pl b/challenge-334/kjetillll/perl/ch-1.pl
new file mode 100644
index 0000000000..865c6cf2c2
--- /dev/null
+++ b/challenge-334/kjetillll/perl/ch-1.pl
@@ -0,0 +1,8 @@
+sub f { eval join '+', @_[ shift .. shift ] }
+
+print pop(@$_) == f(@$_) ? "ok\n" : "err\n" for
+[ 0, 2 => -2, 0, 3, -5, 2, -1 => 1],
+[ 1, 3 => 1, -2, 3, -4, 5 => -3],
+[ 3, 4 => 1, 0, 2, -1, 3 => 2],
+[ 0, 3 => -5, 4, -3, 2, -1, 0 => -2],
+[ 0, 2 => -1, 0, 2, -3, -2, 1 => 1],
diff --git a/challenge-334/kjetillll/perl/ch-2.pl b/challenge-334/kjetillll/perl/ch-2.pl
new file mode 100644
index 0000000000..6f21d7f8ba
--- /dev/null
+++ b/challenge-334/kjetillll/perl/ch-2.pl
@@ -0,0 +1,24 @@
+
+sub mandist { my($x1, $y1, $x2, $y2) = @_; abs( $x1 - $x2 ) + abs( $y1 - $y2 ) }
+
+sub f {
+ my($x, $y, @p) = @_;
+ my $i = 0;
+ (
+ map { $$_{index} }
+ sort { $$a{mandist} <=> $$b{mandist} || $$a{index} <=> $$b{index} }
+ map { $$_{mandist} = mandist( $x, $y, @$_{qw(px py)} ); $_ }
+ grep { $$_{px} == $x or $$_{py} == $y }
+ map { {px => $$_[0], py => $$_[1], index => $i++} }
+ @p
+ )[0] // -1
+
+}
+
+print pop(@$_) == f(@$_) ? "ok\n" : "err\n" for
+[ 3, 4 => [1, 2], [3, 1], [2, 4], [2, 3] => 2 ],
+[ 2, 5 => [3, 4], [2, 3], [1, 5], [2, 5] => 3 ],
+[ 1, 1 => [2, 2], [3, 3], [4, 4] => -1 ],
+[ 0, 0 => [0, 1], [1, 0], [0, 2], [2, 0] => 0 ],
+[ 5, 5 => [5, 6], [6, 5], [5, 4], [4, 5] => 0 ],
+