diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-07-04 18:15:57 +0100 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-07-04 18:15:57 +0100 |
| commit | 45acbf218d7cb9d413fe74d49c8e4ccc529bdf9b (patch) | |
| tree | 587ad5ea3d9498e444f4c187f7bc7e2bd5abdcb8 /challenge-067 | |
| parent | 836d38f7f0a03d3f130d77b60d9582ff72169176 (diff) | |
| download | perlweeklychallenge-club-45acbf218d7cb9d413fe74d49c8e4ccc529bdf9b.tar.gz perlweeklychallenge-club-45acbf218d7cb9d413fe74d49c8e4ccc529bdf9b.tar.bz2 perlweeklychallenge-club-45acbf218d7cb9d413fe74d49c8e4ccc529bdf9b.zip | |
- Added solutions by Laurent Rosenfeld.
Diffstat (limited to 'challenge-067')
| -rw-r--r-- | challenge-067/laurent-rosenfeld/blog.txt | 1 | ||||
| -rw-r--r-- | challenge-067/laurent-rosenfeld/perl/ch-1.pl | 18 | ||||
| -rw-r--r-- | challenge-067/laurent-rosenfeld/perl/ch-2.pl | 25 | ||||
| -rw-r--r-- | challenge-067/laurent-rosenfeld/raku/ch-1.raku | 5 | ||||
| -rw-r--r-- | challenge-067/laurent-rosenfeld/raku/ch-2.raku | 21 |
5 files changed, 70 insertions, 0 deletions
diff --git a/challenge-067/laurent-rosenfeld/blog.txt b/challenge-067/laurent-rosenfeld/blog.txt new file mode 100644 index 0000000000..be2a6cd41a --- /dev/null +++ b/challenge-067/laurent-rosenfeld/blog.txt @@ -0,0 +1 @@ +http://blogs.perl.org/users/laurent_r/2020/07/perl-weekly-challenge-67-number-combinations-and-letter-phone.html diff --git a/challenge-067/laurent-rosenfeld/perl/ch-1.pl b/challenge-067/laurent-rosenfeld/perl/ch-1.pl new file mode 100644 index 0000000000..951c654cf6 --- /dev/null +++ b/challenge-067/laurent-rosenfeld/perl/ch-1.pl @@ -0,0 +1,18 @@ +use strict; +use warnings; +use feature qw /say/; + +my $m = shift // 5; +my $num = shift // 2; +combinations([], 1..$m); + +sub combinations { + my ($out, @in) = @_; + return unless @in; + for my $digit (@in) { + next if defined $out->[-1] and $digit <= $out->[-1]; + my $new_out = [ @$out, $digit ]; + say "@$new_out" and next if scalar @$new_out == $num; + combinations($new_out, @in[1..$#in]); + } +} diff --git a/challenge-067/laurent-rosenfeld/perl/ch-2.pl b/challenge-067/laurent-rosenfeld/perl/ch-2.pl new file mode 100644 index 0000000000..003f46c86b --- /dev/null +++ b/challenge-067/laurent-rosenfeld/perl/ch-2.pl @@ -0,0 +1,25 @@ +use strict; +use warnings; +use feature qw /say/; + +my %nums = (0 => ['-'], 1 => ['_', ',', '@'], 2 => [qw <A B C>], + 3 => [qw <D E F>], 4 => [qw <G H I>], 5 => [qw <J K L>], + 6 => [qw <M N O>], 7 => [qw <A Q R S>], + 8 => [qw <T U V>], 9 => [qw <W X Y Z>]); + +my $str = shift // "35"; +take_one("", split //, $str); +say ""; + +sub take_one { + my ($str, @digits) = @_; + if (@digits == 0) { + print "$str "; + return; + } + my $digit = shift @digits; + for my $letter (@{$nums{$digit}}) { + my $new_str = $str . $letter; + take_one($new_str, @digits) + } +} diff --git a/challenge-067/laurent-rosenfeld/raku/ch-1.raku b/challenge-067/laurent-rosenfeld/raku/ch-1.raku new file mode 100644 index 0000000000..ad7965b443 --- /dev/null +++ b/challenge-067/laurent-rosenfeld/raku/ch-1.raku @@ -0,0 +1,5 @@ +use v6; +my $m = 5; +my $n = 2; + +.say for 1..$m.combinations: $n; diff --git a/challenge-067/laurent-rosenfeld/raku/ch-2.raku b/challenge-067/laurent-rosenfeld/raku/ch-2.raku new file mode 100644 index 0000000000..578602e32a --- /dev/null +++ b/challenge-067/laurent-rosenfeld/raku/ch-2.raku @@ -0,0 +1,21 @@ +use v6; + +my %nums = 0 => '-', 1 => <_ , @>, 2 => <A B C>, 3 => <D E F>, + 4 => <G H I>, 5 => <J K L>, 6 => <M N O>, + 7 => <A Q R S>, 8 => <T U V>, 9 => <W X Y Z>; + +my $str = @*ARGS[0] // "35"; +take-one("", $str.comb); +say ""; + +sub take-one (Str $str, @digits is copy) { + if @digits.elems == 0 { + print "$str "; + return; + } + my $digit = shift @digits; + for %nums{$digit}.Seq -> $letter { + my $new-str = $str ~ $letter; + take-one($new-str, @digits) + } +} |
