Blame


1 1ddd2d4e 2023-09-10 jrmu #!/usr/bin/perl
2 1ddd2d4e 2023-09-10 jrmu
3 1ddd2d4e 2023-09-10 jrmu # Using the final version of check_required_items, write a subroutine
4 1ddd2d4e 2023-09-10 jrmu # check_items_for_all that takes as its only parameter a reference to a
5 1ddd2d4e 2023-09-10 jrmu # hash whose keys are the people aboard the Minnow and whose corresponding
6 1ddd2d4e 2023-09-10 jrmu # values are array references of the things they intend to bring on board.
7 1ddd2d4e 2023-09-10 jrmu #
8 1ddd2d4e 2023-09-10 jrmu # For example, the hash reference might be constructed like so:
9 1ddd2d4e 2023-09-10 jrmu #
10 1ddd2d4e 2023-09-10 jrmu # my @gilligan = (... gilligan items ...);
11 1ddd2d4e 2023-09-10 jrmu # my @skipper = (... skipper items ...);
12 1ddd2d4e 2023-09-10 jrmu # my @professor = (... professor items ...);
13 1ddd2d4e 2023-09-10 jrmu #
14 1ddd2d4e 2023-09-10 jrmu # my %all = (
15 1ddd2d4e 2023-09-10 jrmu # Gilligan => \@gilligan,
16 1ddd2d4e 2023-09-10 jrmu # Skipper => \@skipper,
17 1ddd2d4e 2023-09-10 jrmu # Professor => \@professor,
18 1ddd2d4e 2023-09-10 jrmu # );
19 1ddd2d4e 2023-09-10 jrmu #
20 1ddd2d4e 2023-09-10 jrmu # check_items_for_all(\%all);
21 1ddd2d4e 2023-09-10 jrmu #
22 1ddd2d4e 2023-09-10 jrmu # The newly constructed subroutine should call check_required_items for
23 1ddd2d4e 2023-09-10 jrmu # each person in the hash, updating their provisions list to include the
24 1ddd2d4e 2023-09-10 jrmu # required items.
25 1ddd2d4e 2023-09-10 jrmu #
26 1ddd2d4e 2023-09-10 jrmu # Some starting code is in the Downloads section on
27 1ddd2d4e 2023-09-10 jrmu # https://www.intermediateperl.com/
28 1ddd2d4e 2023-09-10 jrmu
29 1ddd2d4e 2023-09-10 jrmu use v5.24;
30 1ddd2d4e 2023-09-10 jrmu use warnings;
31 1ddd2d4e 2023-09-10 jrmu use strict;
32 1ddd2d4e 2023-09-10 jrmu use utf8;
33 1ddd2d4e 2023-09-10 jrmu
34 1ddd2d4e 2023-09-10 jrmu sub check_required_items {
35 1ddd2d4e 2023-09-10 jrmu my $who = shift;
36 1ddd2d4e 2023-09-10 jrmu my $items = shift;
37 1ddd2d4e 2023-09-10 jrmu my %whose_items = map { $_, 1 } @$items;
38 1ddd2d4e 2023-09-10 jrmu my @required = qw(preserver sunscreen water_bottle jacket);
39 1ddd2d4e 2023-09-10 jrmu my @missing = ();
40 1ddd2d4e 2023-09-10 jrmu
41 1ddd2d4e 2023-09-10 jrmu for my $item (@required) {
42 1ddd2d4e 2023-09-10 jrmu unless ($whose_items{$item}) {
43 1ddd2d4e 2023-09-10 jrmu print "$who is missing $item.\n";
44 1ddd2d4e 2023-09-10 jrmu push @missing, $item;
45 1ddd2d4e 2023-09-10 jrmu }
46 1ddd2d4e 2023-09-10 jrmu }
47 1ddd2d4e 2023-09-10 jrmu
48 1ddd2d4e 2023-09-10 jrmu if (@missing) {
49 1ddd2d4e 2023-09-10 jrmu print "Adding @missing to @$items for $who.\n";
50 1ddd2d4e 2023-09-10 jrmu push @$items, @missing;
51 1ddd2d4e 2023-09-10 jrmu }
52 1ddd2d4e 2023-09-10 jrmu }
53 1ddd2d4e 2023-09-10 jrmu sub check_items_for_all {
54 1ddd2d4e 2023-09-10 jrmu my $allref = shift;
55 1ddd2d4e 2023-09-10 jrmu foreach my $person (keys %$allref) {
56 1ddd2d4e 2023-09-10 jrmu check_required_items($person, $allref->{$person});
57 1ddd2d4e 2023-09-10 jrmu }
58 1ddd2d4e 2023-09-10 jrmu }
59 1ddd2d4e 2023-09-10 jrmu my @gilligan = qw(red_shirt hat lucky_socks water_bottle);
60 1ddd2d4e 2023-09-10 jrmu my @skipper = qw(blue_shirt hat jacket preserver sunscreen);
61 1ddd2d4e 2023-09-10 jrmu my @professor = qw(sunscreen water_bottle slide_rule batteries radio);
62 1ddd2d4e 2023-09-10 jrmu
63 1ddd2d4e 2023-09-10 jrmu my %all = (
64 1ddd2d4e 2023-09-10 jrmu Gilligan => \@gilligan,
65 1ddd2d4e 2023-09-10 jrmu Skipper => \@skipper,
66 1ddd2d4e 2023-09-10 jrmu Professor => \@professor,
67 1ddd2d4e 2023-09-10 jrmu );
68 1ddd2d4e 2023-09-10 jrmu
69 1ddd2d4e 2023-09-10 jrmu check_items_for_all(\%all);