aboutsummaryrefslogtreecommitdiff
path: root/challenge-067
diff options
context:
space:
mode:
authorMohammad S Anwar <mohammad.anwar@yahoo.com>2020-07-04 18:15:57 +0100
committerMohammad S Anwar <mohammad.anwar@yahoo.com>2020-07-04 18:15:57 +0100
commit45acbf218d7cb9d413fe74d49c8e4ccc529bdf9b (patch)
tree587ad5ea3d9498e444f4c187f7bc7e2bd5abdcb8 /challenge-067
parent836d38f7f0a03d3f130d77b60d9582ff72169176 (diff)
downloadperlweeklychallenge-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.txt1
-rw-r--r--challenge-067/laurent-rosenfeld/perl/ch-1.pl18
-rw-r--r--challenge-067/laurent-rosenfeld/perl/ch-2.pl25
-rw-r--r--challenge-067/laurent-rosenfeld/raku/ch-1.raku5
-rw-r--r--challenge-067/laurent-rosenfeld/raku/ch-2.raku21
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)
+ }
+}