]> www.fi.muni.cz Git - aoc.git/blob - 2022/28.pl
Day 14: slightly polished solution
[aoc.git] / 2022 / 28.pl
1 #!/usr/bin/perl -w
2
3 use v5.36;
4 use strict;
5 use experimental 'for_list';
6
7 my @map;
8
9 while (<>) {
10         my @list = /(\d+)/g;
11         my ($x0, $y0) = splice @list, 0, 2;
12         $map[$y0][$x0] = 1;
13
14         for my ($x, $y) (@list) {
15                 while ($x0 != $x || $y0 != $y) {
16                         $x0 += $x <=> $x0;
17                         $y0 += $y <=> $y0;
18                         $map[$y0][$x0] = 1;
19                 }
20         }
21 }
22 my $maxy = @map;
23
24 my $units = 0;
25 while (!$map[0][500]) {
26         my ($x, $y) = (500, 0);
27
28         while ($y < $maxy) {
29                 if (!$map[$y+1][$x]) {
30                         $y++;
31                 } elsif (!$map[$y+1][$x-1]) {
32                         $x--; $y++;
33                 } elsif (!$map[$y+1][$x+1]) {
34                         $x++; $y++;
35                 } else {
36                         last;
37                 }
38         }
39         $map[$y][$x] = 2;
40         $units++;
41 }
42
43 say $units;