]> www.fi.muni.cz Git - aoc.git/blob - 2018/11.pl
Day 25: examining the input
[aoc.git] / 2018 / 11.pl
1 #!/usr/bin/perl -w
2
3 use v5.30;
4 use strict;
5
6 my @pts = map { [ /(\d+)/g ] } <>;
7
8 my ($minx, $miny, $maxx, $maxy);
9 for my $pt (@pts) {
10         $minx = $pt->[0] if !defined $minx || $minx > $pt->[0];
11         $maxx = $pt->[0] if !defined $maxx || $maxx < $pt->[0];
12         $miny = $pt->[1] if !defined $miny || $miny > $pt->[1];
13         $maxy = $pt->[1] if !defined $maxy || $maxy < $pt->[1];
14 }
15
16 my (%count, %inf);
17 for my $x ($minx .. $maxx) {
18 for my $y ($miny .. $maxy) {
19         my ($minpt, $mindist);
20         for my $i (0 .. $#pts) {
21                 my $pt = $pts[$i];
22                 my $dist = abs($x-$pt->[0]) + abs($y-$pt->[1]);
23                 if (!defined $mindist || $mindist > $dist) {
24                         $minpt = $i;
25                         $mindist = $dist;
26                 } elsif (defined $mindist && $mindist == $dist) {
27                         $minpt = undef;
28                 }
29         }
30         next if !defined $minpt;
31         say "$x,$y closest to $minpt at $mindist";
32         if ($y == $miny || $y == $maxy || $x == $minx || $x == $maxx) {
33                 $inf{$minpt}++;
34                 say "$minpt is infinite";
35         } else {
36                 $count{$minpt}++;
37         }
38 } }
39
40 my $maxarea;
41 for my $i (0 .. $#pts) {
42         next if $inf{$i};
43         $maxarea = $count{$i} if !$maxarea || $maxarea < $count{$i};
44 }
45
46 say $maxarea;
47         
48         
49                 
50