2020 day 19 part 2
This commit is contained in:
parent
217fe176c9
commit
786ac542c2
|
@ -1,6 +1,15 @@
|
|||
#!/usr/bin/env perl
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
sub parse_rule {
|
||||
my ($rule) = @_;
|
||||
$rule =~ s/"//g;
|
||||
$rule =~ s/(\d+)(?![\d:])/(?&rule$1)/g;
|
||||
$rule =~ s/^(\d+):\s*(.*)$/(?<rule$1>$2)/;
|
||||
return $rule;
|
||||
}
|
||||
|
||||
my $rules = "";
|
||||
|
||||
while (<>) {
|
||||
|
@ -8,17 +17,23 @@ while (<>) {
|
|||
if ($_ eq "") {
|
||||
last;
|
||||
}
|
||||
s/"//g;
|
||||
s/(\d+)(?![\d:])/(?&rule$1)/g;
|
||||
s/^(\d+):\s*(.*)$/(?<rule$1>$2)/;
|
||||
$rules .= $_ . "\n";
|
||||
$rules .= parse_rule($_) . "\n";
|
||||
}
|
||||
|
||||
my $regexp = "(?(DEFINE)" . $rules . ")^(?&rule0)\$";
|
||||
$regexp =~ s/\s*//g;
|
||||
|
||||
my $part1 = 0;
|
||||
my $newrule8 = parse_rule('8: 42 | 42 8');
|
||||
my $newrule11 = parse_rule('11: 42 31 | 42 11 31');
|
||||
my $regexp2 = $regexp;
|
||||
$regexp2 =~ s/\(\?<rule8>.*\)/$newrule8/;
|
||||
$regexp2 =~ s/\(\?<rule11>.*\)/$newrule11/;
|
||||
|
||||
$regexp =~ s/\s*//g;
|
||||
$regexp2 =~ s/\s*//g;
|
||||
|
||||
my $part1 = 0, my $part2 = 0;
|
||||
while (<>) {
|
||||
$part1 += ($_ =~ $regexp);
|
||||
$part2 += ($_ =~ $regexp2);
|
||||
}
|
||||
print($part1);
|
||||
print $part1, "\n", $part2, "\n";
|
||||
|
|
Loading…
Reference in New Issue