package part1;

use 5.20.0;
use warnings;

use experimental qw/
    signatures
    postderef
/;

sub parse_line($line) {
    $line =~ s/(\w+ \w+) bags//;
    my $bag = $1;

    my %content = ();

    while ( $line =~ /(\d+) (\w+ \w+) bag/g ) {
        $content{$2} = $1;
    }

    return $bag => \%content;
}

sub contains( $name, $target, $bags ) {

    return 1 if $bags->{$name}{$target};

    for ( keys $bags->{$name}->%* ) {
        return 1 if contains( $_, $target, $bags );
    }

    return 0;
}

sub solution(@lines) {
    my %bags = map { parse_line($_) } @lines;

    return scalar grep { contains($_, 'shiny gold', \%bags) } keys %bags;

}

1;