]> www.fi.muni.cz Git - aoc.git/blobdiff - 2017/22.pl
AoC 2017 days 11 to 15
[aoc.git] / 2017 / 22.pl
diff --git a/2017/22.pl b/2017/22.pl
new file mode 100755 (executable)
index 0000000..dcaa0da
--- /dev/null
@@ -0,0 +1,51 @@
+#!/usr/bin/perl
+
+use v5.30;
+use strict;
+
+my ($x, $y) = (0, 0);
+
+my @path = split /[,\s]/, <>;
+
+#   |/
+#   o
+#  /|
+# x y
+
+sub dist {
+       my ($x,$y) = @_;
+       my $dist;
+       if ($x >= 0 && $y >= 0 || $x <= 0 && $y <= 0) {
+               $dist = abs($x + $y);
+       } elsif (abs($x) >= abs($y)) {
+               $dist = abs($x);
+       } else {
+               $dist = abs($y);
+       }
+       return $dist;
+}
+
+my $max;
+for my $dir (@path) {
+       if ($dir eq 's') {
+               $y--;
+       } elsif ($dir eq 'n') {
+               $y++;
+       } elsif ($dir eq 'ne') {
+               $x++;
+       } elsif ($dir eq 'nw') {
+               $x--;
+               $y++;
+       } elsif ($dir eq 'se') {
+               $x++;
+               $y--;
+       } elsif ($dir eq 'sw') {
+               $x--;
+       }
+       my $d = dist($x,$y);
+       $max = $d if !$max || $max < $d;
+}
+
+say $max;
+       
+