1
0
Fork 0

2020 day 19 part 2

This commit is contained in:
Lucidiot 2021-12-01 23:17:39 +01:00
parent 217fe176c9
commit 786ac542c2
Signed by: lucidiot
GPG Key ID: 3358C1CA6906FB8D
2 changed files with 23 additions and 8 deletions

View File

@ -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";

View File

@ -29,7 +29,7 @@ is acceptable; anything goes as long as I solve it myself!
16 ██ ██ ██
17 ██ ██
18 ██ ██
19 █
19 █
20 ██
21
22 █