]> www.fi.muni.cz Git - aoc.git/blob - 2023/35.pl
Day 25: examining the input
[aoc.git] / 2023 / 35.pl
1 #!/usr/bin/perl -w
2
3 use v5.38;
4 use experimental 'multidimensional';
5 $; = ';';
6
7 my ($x, $y) = (1000, 1000);
8 my ($xmin, $xmax, $ymin, $ymax) = (1000) x 4;
9 my %dir = (
10         R => [ 1,  0 ],
11         D => [ 0,  1 ],
12         L => [ -1, 0 ],
13         U => [ 0, -1 ],
14 );
15
16 my %map;
17 while (<>) {
18         my ($dir, $len, $col) = /^(.) (\d+) \(\#(\w+)\)/;
19         say "at $x,$y dir $dir len $len col $col";
20         while ($len--){
21                 $x += $dir{$dir}->[0];
22                 $y += $dir{$dir}->[1];
23                 say "    at $x,$y len $len";
24
25                 $xmax = $x if $xmax < $x;
26                 $ymax = $y if $ymax < $y;
27                 $xmin = $x if $xmin > $x;
28                 $ymin = $y if $ymin > $y;
29
30                 $map{$x,$y} = $col;
31         }
32 }
33
34 say "$xmin..$xmax x $ymin..$ymax";
35
36 my $sum;
37 for my $y ($ymin .. $ymax) {
38         my $in = 0;
39         my $from = 0;
40         for my $x ($xmin .. $xmax) {
41                 if ($map{$x,$y}) {
42                         $sum++;
43                         if ($map{$x,$y-1} && $map{$x,$y+1}) {
44                                 $in = !$in;
45                                 $from = 0;
46                         } elsif ($map{$x,$y-1}) {
47                                 if ($from == 1) {
48                                         $in = !$in;
49                                         $from = 0;
50                                 } elsif ($from == 0) {
51                                         $from = -1;
52                                 } else {
53                                         $from = 0;
54                                 }
55                         } elsif ($map{$x,$y+1}) {
56                                 if ($from == -1) {
57                                         $in = !$in;
58                                         $from = 0;
59                                 } elsif ($from == 0) {
60                                         $from = 1;
61                                 } else {
62                                         $from = 0;
63                                 }
64                         }
65                         print '#';
66                 } else {
67                         $sum++ if $in;
68                         print $map{$x,$y} || $in ? 'O' : '.';
69                 }
70         }
71         print "\n";
72 }
73
74
75 asay $sum;
76