about summary refs log tree commit diff
path: root/day03.pl
diff options
context:
space:
mode:
Diffstat (limited to 'day03.pl')
-rw-r--r--day03.pl38
1 files changed, 38 insertions, 0 deletions
diff --git a/day03.pl b/day03.pl
new file mode 100644
index 0000000..542e820
--- /dev/null
+++ b/day03.pl
@@ -0,0 +1,38 @@
+#!/usr/bin/perl -w
+use v5.16;
+
+use File::Slurper 'read_lines';
+use List::Util qw'min sum';
+
+my @c = read_lines "day03";
+
+my %f;
+my @dur;
+
+while (my ($i, $c) = each @c) {
+    my ($x,$y) = (0,0);
+
+    my %d;
+    push @dur, \%d;
+    my $d = 0;
+
+    for (split ",", $c) {
+        for my $n (1..substr($_, 1)) {
+            if (/R/) { $x++ }
+            if (/L/) { $x-- }
+            if (/U/) { $y++ }
+            if (/D/) { $y-- }
+            
+            $f{$x,$y} |= $i+1;
+            $d{$x,$y} = ++$d;
+        }
+    }
+}
+
+my @dup = grep { $f{$_} == 1+2 } keys %f;
+say min map { my ($x,$y) = split($;, $_); abs($x)+abs($y) } @dup;
+say min map { my $c = $_; sum(map { $_->{$c} } @dur) } @dup;
+
+__END__
+258
+12304