aboutsummaryrefslogtreecommitdiff
path: root/challenge-113/arne-sommer/perl/represent-integer-perl
diff options
context:
space:
mode:
Diffstat (limited to 'challenge-113/arne-sommer/perl/represent-integer-perl')
-rwxr-xr-xchallenge-113/arne-sommer/perl/represent-integer-perl37
1 files changed, 37 insertions, 0 deletions
diff --git a/challenge-113/arne-sommer/perl/represent-integer-perl b/challenge-113/arne-sommer/perl/represent-integer-perl
new file mode 100755
index 0000000000..9d6a3af8dc
--- /dev/null
+++ b/challenge-113/arne-sommer/perl/represent-integer-perl
@@ -0,0 +1,37 @@
+#! /usr/bin/env perl
+
+use strict;
+use feature 'say';
+
+use Algorithm::Combinatorics 'combinations';
+use List::Util 'sum';
+use Getopt::Long;
+
+my $verbose = 0;
+GetOptions("verbose" => \$verbose);
+
+my $N = shift(@ARGV) // die "Please specify an integer > 0";
+die "Please specify an integer > 0" unless $N =~ /^[1-9]\d*$/;
+
+my $D = shift(@ARGV) // die "Please specify a digit";
+die "Please specify a digit" unless $D =~ /^\d$/;
+
+my @candidates = grep { /$D/ } (1 .. $N);
+
+say ": Candidates " . join(', ', @candidates) if $verbose;
+
+for my $size (1 .. @candidates)
+{
+ for my $comb (combinations(\@candidates, $size))
+ {
+ say ": Considering " . join(' + ', @$comb) if $verbose;
+
+ if (sum(@$comb) == $N)
+ {
+ say 1;
+ exit;
+ }
+ }
+}
+
+say 0;