diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2021-05-23 21:27:09 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-05-23 21:27:09 +0100 |
| commit | ae46850ffe2e7a6825893a6c5f78a21fdddbbb65 (patch) | |
| tree | cbe4da14753c7ce57101773e0db98db7785ac890 | |
| parent | 03eb3fa7435d497e68348362885148da5298156e (diff) | |
| parent | af750f6fd9ce9389bd6c12b3aa92fb062451b813 (diff) | |
| download | perlweeklychallenge-club-ae46850ffe2e7a6825893a6c5f78a21fdddbbb65.tar.gz perlweeklychallenge-club-ae46850ffe2e7a6825893a6c5f78a21fdddbbb65.tar.bz2 perlweeklychallenge-club-ae46850ffe2e7a6825893a6c5f78a21fdddbbb65.zip | |
Merge pull request #4123 from wlmb/challenges
Challenges
| -rwxr-xr-x | challenge-113/wlmb/perl/ch-1.pl | 3 | ||||
| -rwxr-xr-x | challenge-113/wlmb/perl/ch-1a.pl | 2 | ||||
| -rwxr-xr-x | challenge-113/wlmb/perl/ch-1b.pl | 32 |
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 (); +} |
