From 45acbf218d7cb9d413fe74d49c8e4ccc529bdf9b Mon Sep 17 00:00:00 2001 From: Mohammad S Anwar Date: Sat, 4 Jul 2020 18:15:57 +0100 Subject: - Added solutions by Laurent Rosenfeld. --- challenge-067/laurent-rosenfeld/blog.txt | 1 + challenge-067/laurent-rosenfeld/perl/ch-1.pl | 18 ++++++++++++++++++ challenge-067/laurent-rosenfeld/perl/ch-2.pl | 25 +++++++++++++++++++++++++ challenge-067/laurent-rosenfeld/raku/ch-1.raku | 5 +++++ challenge-067/laurent-rosenfeld/raku/ch-2.raku | 21 +++++++++++++++++++++ 5 files changed, 70 insertions(+) create mode 100644 challenge-067/laurent-rosenfeld/blog.txt create mode 100644 challenge-067/laurent-rosenfeld/perl/ch-1.pl create mode 100644 challenge-067/laurent-rosenfeld/perl/ch-2.pl create mode 100644 challenge-067/laurent-rosenfeld/raku/ch-1.raku create mode 100644 challenge-067/laurent-rosenfeld/raku/ch-2.raku (limited to 'challenge-067') 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 ], + 3 => [qw ], 4 => [qw ], 5 => [qw ], + 6 => [qw ], 7 => [qw ], + 8 => [qw ], 9 => [qw ]); + +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 => , 3 => , + 4 => , 5 => , 6 => , + 7 => , 8 => , 9 => ; + +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) + } +} -- cgit