aboutsummaryrefslogtreecommitdiff
path: root/challenge-004/jo-37/perl/ch-2.pl
blob: b7065f744a19d123592d4ea5f6d809979df914a6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#!/usr/bin/perl -s

use v5.16;
use warnings;
use experimental 'signatures';

our $letters;

die <<EOS unless @ARGV && $letters;
usage: $0 -letters=LETTERS [FILE]

-letters=LETTERS
    list of letters

FILE
    Name of a file containing one word per line. Use '-' for STDIN.

EOS


### Input and Output

main: {
    my %letters;
    $letters{$_}++ for split //, lc $letters;
    while (<>) {
        chomp;
        say if check_word(\%letters, lc);
    }
}

### Implementation

sub check_word ($letters, $word) {
    my %letters = %$letters;
    for my $l (split //, $word) {
        return unless exists $letters{$l} && $letters{$l}--;
    }
    1;
}