aboutsummaryrefslogtreecommitdiff
path: root/challenge-113
diff options
context:
space:
mode:
authorLuis Mochan <mochan@fis.unam.mx>2021-05-23 12:10:46 -0500
committerLuis Mochan <mochan@fis.unam.mx>2021-05-23 12:10:46 -0500
commit088dbd3dc9664b07cdf8ab0872c68a903438a0e0 (patch)
treeab718cb7d7f8b30bbc912bee53bd97241a50a20f /challenge-113
parent77cb584534f888754b4e8a62f1989ae9ff4812fb (diff)
downloadperlweeklychallenge-club-088dbd3dc9664b07cdf8ab0872c68a903438a0e0.tar.gz
perlweeklychallenge-club-088dbd3dc9664b07cdf8ab0872c68a903438a0e0.tar.bz2
perlweeklychallenge-club-088dbd3dc9664b07cdf8ab0872c68a903438a0e0.zip
Add yet another solution
Diffstat (limited to 'challenge-113')
-rwxr-xr-xchallenge-113/wlmb/perl/ch-1.pl3
-rwxr-xr-xchallenge-113/wlmb/perl/ch-1a.pl2
-rwxr-xr-xchallenge-113/wlmb/perl/ch-1b.pl32
3 files changed, 34 insertions, 3 deletions
diff --git a/challenge-113/wlmb/perl/ch-1.pl b/challenge-113/wlmb/perl/ch-1.pl
index dd45af20c1..d0557028eb 100755
--- a/challenge-113/wlmb/perl/ch-1.pl
+++ b/challenge-113/wlmb/perl/ch-1.pl
@@ -1,6 +1,6 @@
#!/usr/bin/env perl
# Perl weekly challenge 113
-# Task 1: Represent integer.
+# Task 1: Represent integer. Faster, recursive
#
# See https://wlmb.github.io/2021/05/22/PWC113/#task-1-represent-integer
use strict;
@@ -21,7 +21,6 @@ say("Inputs: N=$N D=$D: Output: ",
sub find {
my ($goal, @set)=@_;
- die "Shouldn't happen" if $goal==0;
while(defined (my $current=shift @set)){
next if $current > $goal;
return ($current) if $current==$goal;
diff --git a/challenge-113/wlmb/perl/ch-1a.pl b/challenge-113/wlmb/perl/ch-1a.pl
index 7ae51a652c..aafb16bbdc 100755
--- a/challenge-113/wlmb/perl/ch-1a.pl
+++ b/challenge-113/wlmb/perl/ch-1a.pl
@@ -1,6 +1,6 @@
#!/usr/bin/env perl
# Perl weekly challenge 113
-# Task 1: Represent integer.
+# Task 1: Represent integer. Slow, exhaustive
#
# See https://wlmb.github.io/2021/05/22/PWC113/#task-1-represent-integer
use strict;
diff --git a/challenge-113/wlmb/perl/ch-1b.pl b/challenge-113/wlmb/perl/ch-1b.pl
new file mode 100755
index 0000000000..eb9ca9a0b1
--- /dev/null
+++ b/challenge-113/wlmb/perl/ch-1b.pl
@@ -0,0 +1,32 @@
+#!/usr/bin/env perl
+# Perl weekly challenge 113
+# Task 1: Represent integer. Even faster, recursive with cutoff.
+#
+# See https://wlmb.github.io/2021/05/22/PWC113/#task-1-represent-integer
+use strict;
+use warnings;
+use v5.12;
+use List::Util qw(sum0);
+use POSIX qw(floor);
+
+my ($N, $D)=@ARGV; #get arguments from command line.
+die "Usage: ./ch-1b.pl positive-integer digit"
+ unless defined $N and defined $D and $N>=0
+ and $D=~m/^\d$/ and $N==floor $N;
+say("Inputs: N=$N D=$D: Output: 1 as $N>=",$D*10), exit if $N>=$D*10;
+my @set=reverse grep {m/$D/} (1..$N); # ordered set from large to small.
+my @answer=find($N,@set);
+say("Inputs: N=$N D=$D: Output: ",
+ @answer? "1 as $N=". join("+", @answer):"0");
+
+
+sub find {
+ my ($goal, @set)=@_;
+ while(defined (my $current=shift @set)){
+ next if $current > $goal;
+ return ($current) if $current==$goal;
+ my @answer=find($goal-$current, @set);
+ return ($current,@answer) if @answer;
+ }
+ return ();
+}