diff options
| author | Alexander Pankoff <ccntrq@screenri.de> | 2021-12-02 18:59:35 +0100 |
|---|---|---|
| committer | Alexander Pankoff <ccntrq@screenri.de> | 2021-12-02 18:59:35 +0100 |
| commit | 48f2afa206bbcd528658c4b3bdb73afb6e48f41f (patch) | |
| tree | 4b09c27a1e1b52bfb99a42bb12afe2174b12f45d | |
| parent | 4017ec0ffb3b249c16468d19cee0ca295e15c138 (diff) | |
| download | perlweeklychallenge-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.pl | 49 |
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; +} |
