summaryrefslogtreecommitdiff
path: root/4.pl
blob: 110708a337fa8a09e56b33e6c5aa1b1b4c7471a7 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#!/usr/bin/env perl
open(my $fh, "4-input.txt") or die ;
while (<$fh>) { chomp; push @lines, [split //]; }
close($fh);

my $xmas_count = 0;
my $mas_count = 0;

for ($i = 0; $i < scalar @lines; $i++) {
    my @line = @{ $lines[$i] };
    for($j=0; $j < scalar @line; $j++) {
      if ($i+3 < scalar @lines) {
        if ($j+3 < scalar @line and $line[$j] eq 'X' and $lines[$i+1][$j+1] eq 'M' and $lines[$i+2][$j+2] eq 'A' and $lines[$i+3][$j+3] eq 'S') { $xmas_count++; }
        if ($j-3 >= 0 and $line[$j] eq 'X' and $lines[$i+1][$j-1] eq 'M' and $lines[$i+2][$j-2] eq 'A' and $lines[$i+3][$j-3] eq 'S') { $xmas_count++; }
        if ($line[$j] eq 'X' and $lines[$i+1][$j] eq 'M' and $lines[$i+2][$j] eq 'A' and $lines[$i+3][$j] eq 'S') { $xmas_count++; }
      }

      if ($i-3 >= 0) {
        if ($j+3 < scalar @line and $line[$j] eq 'X' and $lines[$i-1][$j+1] eq 'M' and $lines[$i-2][$j+2] eq 'A' and $lines[$i-3][$j+3] eq 'S') { $xmas_count++; }
        if ($j-3 >= 0 and $line[$j] eq 'X' and $lines[$i-1][$j-1] eq 'M' and $lines[$i-2][$j-2] eq 'A' and $lines[$i-3][$j-3] eq 'S') { $xmas_count++; }
        if ($line[$j] eq 'X' and $lines[$i-1][$j] eq 'M' and $lines[$i-2][$j] eq 'A' and $lines[$i-3][$j] eq 'S') { $xmas_count++; }
      }

      if ($j+3 < scalar @line and $line[$j] eq 'X' and $line[$j+1] eq 'M' and $line[$j+2] eq 'A' and $line[$j+3] eq 'S') { $xmas_count++; }
      if ($j-3 >= 0 and $line[$j] eq 'X' and $line[$j-1] eq 'M' and $line[$j-2] eq 'A' and $line[$j-3] eq 'S') { $xmas_count++; }

      if ($line[$j] eq 'A' and $i-1>=0 and $j-1>=0 and $i+1<scalar @lines and $j+1 <scalar @line) {
        $k = 0;
        if ($lines[$i-1][$j-1] eq 'M' and $lines[$i+1][$j+1] eq 'S') { $k++; }
        if ($lines[$i-1][$j+1] eq 'M' and $lines[$i+1][$j-1] eq 'S') { $k++; }
        if ($lines[$i+1][$j-1] eq 'M' and $lines[$i-1][$j+1] eq 'S') { $k++; }
        if ($lines[$i+1][$j+1] eq 'M' and $lines[$i-1][$j-1] eq 'S') { $k++; }
        if ($k > 1) { $mas_count++; }
      }
    }
}

print "puzzle 1: $xmas_count\n";
print "puzzle 2: $mas_count\n";