aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Pankoff <ccntrq@screenri.de>2021-12-02 18:59:35 +0100
committerAlexander Pankoff <ccntrq@screenri.de>2021-12-02 18:59:35 +0100
commit48f2afa206bbcd528658c4b3bdb73afb6e48f41f (patch)
tree4b09c27a1e1b52bfb99a42bb12afe2174b12f45d
parent4017ec0ffb3b249c16468d19cee0ca295e15c138 (diff)
downloadperlweeklychallenge-club-48f2afa206bbcd528658c4b3bdb73afb6e48f41f.tar.gz
perlweeklychallenge-club-48f2afa206bbcd528658c4b3bdb73afb6e48f41f.tar.bz2
perlweeklychallenge-club-48f2afa206bbcd528658c4b3bdb73afb6e48f41f.zip
Add solution for challenge-141 task 2
-rw-r--r--challenge-141/alexander-pankoff/perl/ch-2.pl49
1 files changed, 49 insertions, 0 deletions
diff --git a/challenge-141/alexander-pankoff/perl/ch-2.pl b/challenge-141/alexander-pankoff/perl/ch-2.pl
new file mode 100644
index 0000000000..a2d1d0bea6
--- /dev/null
+++ b/challenge-141/alexander-pankoff/perl/ch-2.pl
@@ -0,0 +1,49 @@
+use strict;
+use warnings;
+use feature qw'say signatures';
+no warnings 'experimental::signatures';
+
+use List::Util qw(reduce);
+
+use constant DEBUG => $ENV{DEBUG} // 0;
+
+run() unless caller();
+
+sub run() {
+ my $m = prompt_for_integer('m');
+ my $n = prompt_for_integer('n');
+
+ my @possible_integers = numbers_from_digits($m);
+ my @divisible_by_n = grep { $_ % $n == 0 } @possible_integers;
+ say scalar @divisible_by_n;
+}
+
+sub numbers_from_digits($x) {
+ my @digits = split( '', $x );
+ my $numbers = reduce(
+ sub {
+ my $digit = $digits[$b];
+ return [
+ @$a, #
+ $digit,
+ ( grep { length $_ < @digits } map { $_ . $digit } @$a ),
+ ];
+ },
+ [],
+ 0 .. $#digits
+ );
+
+ return @$numbers;
+}
+
+sub prompt_for_integer($name) {
+ say "Enter positive integer '$name'";
+ chomp( my $number = <STDIN> );
+
+ if ( $number !~ m/^\d+$/ || $number < 1 ) {
+ say "Invalid integer.";
+ return prompt_for_integer($name);
+ }
+
+ return $number;
+}