]> www.fi.muni.cz Git - aoc2021.git/blob - 43.pl
Day 25: pretty straightforward
[aoc2021.git] / 43.pl
1 #!/usr/bin/perl -w
2
3 use v5.16;
4
5 $; = ',';
6 my %cubes;
7 while (<>) {
8         my $state = /^on / ? 1 : 0;
9         my ($xmin, $xmax, $ymin, $ymax, $zmin, $zmax) = /-?\d+/g;
10         ($xmin, $xmax) = ($xmax, $xmin) if $xmax < $xmin;
11         ($ymin, $ymax) = ($ymax, $ymin) if $ymax < $ymin;
12         ($zmin, $zmax) = ($zmax, $zmin) if $zmax < $zmin;
13         say "cuboid ", join(',', $state, $xmin, $xmax, $ymin, $ymax, $zmin, $zmax);
14         next if ($xmax < -50 || $ymax < -50 || $zmax < -50);
15         next if ($xmin > 50 || $ymin > 50 || $zmin > 50);
16         $xmin = -50 if ($xmin < -50);
17         $ymin = -50 if ($ymin < -50);
18         $zmin = -50 if ($zmin < -50);
19         $xmax = 50 if $xmax > 50;
20         $ymax = 50 if $zmax > 50;
21         $zmax = 50 if $zmax > 50;
22         for my $x ($xmin .. $xmax) {
23         for my $y ($ymin .. $ymax) {
24         for my $z ($zmin .. $zmax) {
25                 $cubes{$x,$y,$z} = $state;
26                 say "$x,$y,$z => $state";
27         } } }
28 }
29
30 my $count;
31 for my $x (-50 .. 50) {
32 for my $y (-50 .. 50) {
33 for my $z (-50 .. 50) {
34         $count++ if $cubes{$x,$y,$z};
35 } } }
36
37 say $count;
38