diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-07-01 19:08:27 +0100 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-07-01 19:08:27 +0100 |
| commit | 033813ec45b89fbe5653bc0189688aed724c5650 (patch) | |
| tree | 65dc6aa433347e2273a1ae1e6cde9a4762e979e5 /challenge-067 | |
| parent | f72c755fe1ea941c51d44a88c808d9d423d4e8b8 (diff) | |
| download | perlweeklychallenge-club-033813ec45b89fbe5653bc0189688aed724c5650.tar.gz perlweeklychallenge-club-033813ec45b89fbe5653bc0189688aed724c5650.tar.bz2 perlweeklychallenge-club-033813ec45b89fbe5653bc0189688aed724c5650.zip | |
- Added Letter Phone task in Perl.
Diffstat (limited to 'challenge-067')
| -rw-r--r-- | challenge-067/mohammad-anwar/perl/ch-2.pl | 57 | ||||
| -rw-r--r-- | challenge-067/mohammad-anwar/perl/ch-2a.pl | 69 |
2 files changed, 126 insertions, 0 deletions
diff --git a/challenge-067/mohammad-anwar/perl/ch-2.pl b/challenge-067/mohammad-anwar/perl/ch-2.pl new file mode 100644 index 0000000000..aa3d7d2389 --- /dev/null +++ b/challenge-067/mohammad-anwar/perl/ch-2.pl @@ -0,0 +1,57 @@ +#!/usr/bin/perl + +# +# Perl Weekly Challenge - 067 +# +# Task #2: Letter Phone +# +# https://perlweeklychallenge.org/blog/perl-weekly-challenge-067/ +# + +use strict; +use warnings; + +binmode STDOUT, 'encoding(UTF-8)'; +print join "\n", phone_letters($ARGV[0]), ''; + +sub phone_letters { + my ($digits) = @_; + + die "ERROR: Missing digits.\n" + unless defined $digits; + die "ERROR: Invalid digits [$digits].\n" + unless ($digits =~ /^[0-9\*\#]+$/); + + # letter phone + my %letter_of = ( + '1' => '_,@', + '2' => 'abc', + '3' => 'def', + '4' => 'ghi', + '5' => 'jlk', + '6' => 'mno', + '7' => 'pqrs', + '8' => 'tuv', + '9' => 'wxyz', + '0' => '0', + '#' => '#', + '*' => chr(9251), + ); + + # prepare data set + my @data = (); + foreach my $digit (split //,$digits) { + push @data, [ split //, $letter_of{$digit} ]; + } + + # generate all possible combinations + my @combinations = (''); + foreach my $members (@data) { + @combinations = map { + my $member = $_; + map $member.$_, @$members + } @combinations; + } + + return @combinations; +} diff --git a/challenge-067/mohammad-anwar/perl/ch-2a.pl b/challenge-067/mohammad-anwar/perl/ch-2a.pl new file mode 100644 index 0000000000..99b8c14cad --- /dev/null +++ b/challenge-067/mohammad-anwar/perl/ch-2a.pl @@ -0,0 +1,69 @@ +#!/usr/bin/perl + +# +# Perl Weekly Challenge - 067 +# +# Task #2: Letter Phone +# +# https://perlweeklychallenge.org/blog/perl-weekly-challenge-067/ +# + +use strict; +use warnings; + +use Test::More; +use Test::Deep; + +is_deeply( [ phone_letters('35') ], + [ 'dj', 'dl', 'dk', 'ej', 'el', 'ek', 'fj', 'fl', 'fk' ], + 'testing digits 35' ); +is_deeply( [ phone_letters('10') ], + [ '_0', ',0', '@0' ], + 'testing digits 10' ); +is_deeply( [ phone_letters('2#') ], + [ 'a#', 'b#', 'c#' ], + 'testing digits 2#' ); + +done_testing; + +sub phone_letters { + my ($digits) = @_; + + die "ERROR: Missing digits.\n" + unless defined $digits; + die "ERROR: Invalid digits [$digits].\n" + unless ($digits =~ /^[0-9\*\#]+$/); + + # letter phone + my %letter_of = ( + '1' => '_,@', + '2' => 'abc', + '3' => 'def', + '4' => 'ghi', + '5' => 'jlk', + '6' => 'mno', + '7' => 'pqrs', + '8' => 'tuv', + '9' => 'wxyz', + '0' => '0', + '#' => '#', + '*' => chr(9251), + ); + + # prepare data set + my @data = (); + foreach my $digit (split //,$digits) { + push @data, [ split //, $letter_of{$digit} ]; + } + + # generate all possible combinations + my @combinations = (''); + foreach my $members (@data) { + @combinations = map { + my $member = $_; + map $member.$_, @$members + } @combinations; + } + + return @combinations; +} |
