]> www.fi.muni.cz Git - aoc.git/blob - 2023/25.pl
Day 13: off-by-one errors, quite ugly
[aoc.git] / 2023 / 25.pl
1 #!/usr/bin/perl -w
2
3 use v5.38;
4 use experimental 'multidimensional', 'for_list', 'builtin';
5 use builtin 'indexed';
6 use List::Util;
7 use Y::AoC::Task;
8 $; = ';';
9 # t;
10
11 $/ = "\n\n";
12
13 my $sum;
14 MAP:
15 while (<>) {
16         chomp;
17         my @map = map { [ split // ] } split /\n/, $_;
18
19         say "============ $#{ $map[0] } x $#map ==========";
20         COL:
21         for my $r1 (1 .. $#{ $map[0] }) {
22                 say "Trying col $r1";
23                 for my $x (0 .. $r1) {
24                         my $x1 = 2*$r1-$x-1;
25                         say "col $x vs $x1";
26                         next if $x1 > $#{ $map[0] };
27                         for my $y (0 .. $#map) {
28                                 next COL if $map[$y][$x] ne $map[$y][$x1];
29                         }
30                 }
31                 say "X match at $r1";
32                 $sum += $r1;
33                 next MAP;
34         }
35         ROW:
36         for my $r1 (1 .. $#map) {
37                 say "Trying row $r1";
38                 for my $y (0 .. $r1) {
39                         my $y1 = 2*$r1-$y-1;
40                         say "row $y vs $y1";
41                         next if $y1 > $#map;
42                         for my $x (0 .. $#{ $map[0] }) {
43                                 next ROW if $map[$y][$x] ne $map[$y1][$x];
44                         }
45                 }
46                 say "Y match at $r1";
47                 $sum += 100*$r1;
48                 next MAP;
49         }
50         die "No match at $.";
51 }
52
53 say $sum;
54
55