]> www.fi.muni.cz Git - aoc.git/blob - 2016/15.pl
Day 25: examining the input
[aoc.git] / 2016 / 15.pl
1 #!/usr/bin/perl -w
2
3 use strict;
4 use v5.30;
5
6 my %screen;
7 my ($w, $h) = (50, 6);
8 $; = ',';
9
10 while (<>) {
11         if (/rect (\d+)x(\d+)/) {
12                 for my $x (0 .. $1-1) {
13                 for my $y (0 .. $2-1) {
14                         $screen{$x,$y} = 1;
15                 } }
16         } elsif (/rotate row y=(\d+) by (\d+)/) {
17                 my %ns = %screen;
18                 for my $x (0 .. $w-1) {
19                         my $sx = $x - $2;
20                         $sx += $w if $sx < 0;
21                         $ns{$x,$1} = $screen{$sx,$1};
22                 }
23                 %screen = %ns;
24         } elsif (/rotate column x=(\d+) by (\d+)/) {
25                 my %ns = %screen;
26                 for my $y (0 .. $h-1) {
27                         my $sy = $y - $2;
28                         $sy += $h if $sy < 0;
29                         $ns{$1,$y} = $screen{$1,$sy};
30                 }
31                 %screen = %ns;
32         }
33 }
34
35 my $sum =()= grep { $screen{$_} } keys %screen;
36
37 say $sum;
38