X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=41.pl;fp=41.pl;h=846f78eb97018f6e87cd53255c650cf8e0c217bb;hb=63b534141e63cf51990d5fa2234e1d21f0bc1bbc;hp=0000000000000000000000000000000000000000;hpb=a5a6272d28f8ecd0c24250cbf75f195ed5385e72;p=aoc2020.git diff --git a/41.pl b/41.pl new file mode 100755 index 0000000..846f78e --- /dev/null +++ b/41.pl @@ -0,0 +1,46 @@ +#!/usr/bin/perl -w + +use strict; + +my %allergens; +my %ingredients; +my %in_count; + +while (<>) { + chomp; + my ($ingr, $al) = /\A([^\(]+) \(contains (.*)\)\z/; + my %ingr = map { $_ => 1 } split /\s+/, $ingr; + my @al = split /, /, $al; + for my $al (@al) { + if (defined $allergens{$al}) { + for my $in1 (keys %{ $allergens{$al} }) { + if (! $ingr{$in1}) { + delete $allergens{$al}->{$in1}; + } + } + } else { + $allergens{$al} = { %ingr }; + } + } + for my $in (keys %ingr) { + $ingredients{$in} = {}; + $in_count{$in}++; + } +} + +for my $al (keys %allergens) { + for my $in (keys %{ $allergens{$al} }) { + print "$in can be $al.\n"; + $ingredients{$in}->{$al} = 1; + } +} + +my $sum = 0; +for my $in (keys %ingredients) { + if (keys %{ $ingredients{$in} } == 0) { + # print "$in can't contain allergen\n"; + $sum += $in_count{$in}; + } +} + +print "Sum=$sum\n";