]> www.fi.muni.cz Git - aoc2020.git/blob - 41.pl
Task 9 Perl Golf-style
[aoc2020.git] / 41.pl
1 #!/usr/bin/perl -w
2
3 use strict;
4
5 my %allergens;
6 my %ingredients;
7 my %in_count;
8
9 while (<>) {
10         chomp;
11         my ($ingr, $al) = /\A([^\(]+) \(contains (.*)\)\z/;
12         my %ingr = map { $_ => 1 } split /\s+/, $ingr;
13         my @al = split /, /, $al;
14         for my $al (@al) {
15                 if (defined $allergens{$al}) {
16                         for my $in1 (keys %{ $allergens{$al} }) {
17                                 if (! $ingr{$in1}) {
18                                         delete $allergens{$al}->{$in1};
19                                 }
20                         }
21                 } else {
22                         $allergens{$al} = { %ingr };
23                 }
24         }
25         for my $in (keys %ingr) {
26                 $ingredients{$in} = {};
27                 $in_count{$in}++;
28         }
29 }
30
31 for my $al (keys %allergens) {
32         for my $in (keys %{ $allergens{$al} }) {
33                 print "$in can be $al.\n";
34                 $ingredients{$in}->{$al} = 1;
35         }
36 }
37
38 my $sum = 0;
39 for my $in (keys %ingredients) {
40         if (keys %{ $ingredients{$in} } == 0) {
41                 # print "$in can't contain allergen\n";
42                 $sum += $in_count{$in};
43         }
44 }
45
46 print "Sum=$sum\n";