aboutsummaryrefslogtreecommitdiff
path: root/challenge-005/kian-meng-ang/ch-2.pl
diff options
context:
space:
mode:
Diffstat (limited to 'challenge-005/kian-meng-ang/ch-2.pl')
-rw-r--r--challenge-005/kian-meng-ang/ch-2.pl44
1 files changed, 44 insertions, 0 deletions
diff --git a/challenge-005/kian-meng-ang/ch-2.pl b/challenge-005/kian-meng-ang/ch-2.pl
new file mode 100644
index 0000000000..18e659b925
--- /dev/null
+++ b/challenge-005/kian-meng-ang/ch-2.pl
@@ -0,0 +1,44 @@
+#!/usr/bin/env perl
+
+use 5.010;
+use autodie;
+use strict;
+use warnings;
+use utf8;
+use Carp;
+use List::Util qw(max);
+
+carp 'missing dictionary file' if (@ARGV != 1);
+my ($dict) = @ARGV;
+my %anagram_list;
+
+open my $fh, '<:encoding(UTF-8)', $dict;
+while (my $dword = <$fh>) {
+ chomp $dword;
+
+ my $dword_hash = join '', sort split //, $dword;
+ push @{ $anagram_list{$dword_hash} }, $dword;
+}
+close $fh;
+
+my $max_anagram_count = max(map { scalar @{$_} } values %anagram_list);
+
+foreach my $anagrams (values %anagram_list) {
+ next if (scalar @{$anagrams} != $max_anagram_count);
+ say sprintf 'Total anagrams: %d', scalar @{$anagrams};
+ say sprintf 'Anagrams: %s', join q|, |, @{$anagrams};
+ say q||;
+}
+
+1;
+
+__END__
+
+$ perl ch-2.pl /usr/share/dict/words
+Total anagrams: 7
+Anagrams: carets, caster, caters, crates, reacts, recast, traces
+
+Total anagrams: 7
+Anagrams: pares, parse, pears, rapes, reaps, spare, spear
+
+# vi:et:sw=4 ts=4 ft=perl