4 use experimental 'for_list';
5 use List::Util qw(sum);
11 my ($name, $rest) = /(\w+)\{(\S+)\}/;
13 for my $r (split /,/, $rest) {
14 my ($id, $op, $val, $rule) = $r =~ /(\w+)(?:(\W)(\d+):(\w+))?/;
15 push @rules, [ $id, $op, $val, $rule ];
17 $wfl{$name} = \@rules;
23 for my ($id, $val) (/(\w)=(\d+)/g) {
30 my ($part, $name) = @_;
33 return 0 if $seen{$name}++;
36 } elsif ($name eq 'A') {
37 return sum values %$part;
41 my ($id, $op, $val, $nxt) = @$rule;
48 if ($part->{$id} < $val) {
54 if ($part->{$id} > $val) {
63 say sum map { evaluate($_, 'in') } @parts;