4 use List::Util qw(product);
12 my ($src, @dst) = /\w+/g;
13 ($types{$src}) = /^(\W)/;
14 @{ $dests{$src} } = @dst;
15 $inps{$_}->{$src} = 0 for @dst;
21 my ($q, $name, $pulse) = @_;
22 for (@{ $dests{$name} }) {
23 push @$q, [ $_ , $pulse, $name ];
29 my @q = ([ 'broadcaster', 0, 'button' ]);
33 my ($name, $pulse, $origin) = @$p;
34 my $type = $types{$name} // '';
38 $ffs{$name} = !$ffs{$name};
39 snd(\@q, $name, $ffs{$name});
41 } elsif ($type eq '&') {
42 my $in = $inps{$name};
43 $in->{$origin} = $pulse;
45 $out *= $_ for values %$in;
46 snd(\@q, $name, !$out);
53 say "@sums -> ", product @sums;