]> www.fi.muni.cz Git - aoc.git/blob - 2018/20.pl
Day 25: examining the input
[aoc.git] / 2018 / 20.pl
1 #!/usr/bin/perl -w
2
3 use v5.30;
4 use strict;
5
6 my @pts;
7 my @vel;
8 while (<>) {
9         my ($x, $y, $dx, $dy) = /(-?\d+)/g;
10         push @pts, [ $x, $y ];
11         push @vel, [ $dx, $dy ];
12 }
13
14 $; = ',';
15 my $printed;
16 my $count;
17
18 while (1) {
19         my %map;
20         my ($minx, $miny, $maxx, $maxy);
21         for my $i (0 .. $#pts) {
22                 my $pt = $pts[$i];
23                 my $ve = $vel[$i];
24                 $pt->[$_] += $ve->[$_] for 0 .. 1;
25                 $maxx = $pt->[0] if !defined $maxx || $maxx < $pt->[0];
26                 $maxy = $pt->[1] if !defined $maxy || $maxy < $pt->[1];
27                 $minx = $pt->[0] if !defined $minx || $minx > $pt->[0];
28                 $miny = $pt->[1] if !defined $miny || $miny > $pt->[1];
29                 $map{$pt->[0],$pt->[1]}++;
30         }
31         $count++;
32         my $dim = $maxx-$minx + $maxy-$miny;
33         if ($dim < 150) {
34                 say "count=$count :";
35                 for my $y ($miny .. $maxy) {
36                         for my $x ($minx .. $maxx) {
37                                 print $map{$x,$y} ? '#' : '.';
38                         }
39                         print "\n";
40                 }
41                 $printed = 1;
42         } elsif ($printed) {
43                 last;
44         }
45         say "dim=$dim\n";
46 }
47
48
49         
50
51