summary refs log tree commit diff homepage
path: root/2020/day16.pl
blob: 8ebe5219645051ebe4da8d0f4a9b4d3af00c61c2 (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
use strict;
use warnings;

my (%rules, @ticket, @nearby);
while (<>) {
	chomp;
	if (/([^:]+): (\d+)-(\d+) or (\d+)-(\d+)/) {
		$rules{$1} = [$2, $3, $4, $5];
	} elsif (/your ticket:/) {
		<>;
		chomp;
		@ticket = split ',';
	} elsif (/^[\d,]+$/) {
		my @fields = split ',';
		push @nearby, \@fields;
	}
}

my $error = 0;
foreach my $t (@nearby) {
	foreach my $f (@$t) {
		my $valid = 0;
		foreach my $r (values %rules) {
			$valid = 1 if $f >= $$r[0] && $f <= $$r[1];
			$valid = 1 if $f >= $$r[2] && $f <= $$r[3];
		}
		$error += $f unless $valid;
	}
}
print "$error\n";