aboutsummaryrefslogtreecommitdiff
path: root/challenge-009
diff options
context:
space:
mode:
authorRuben Westerberg <drclaw@mac.com>2019-05-26 17:01:18 +1000
committerRuben Westerberg <drclaw@mac.com>2019-05-26 17:01:18 +1000
commitac8aafccc1ec148e0673e58b05d0e67a9b4ef9db (patch)
treef4e140ecd505224e23799cd7f8ca1918bfbe83bd /challenge-009
parentf99e141b646c9a9d3ff7b03685f38fa19de44d2a (diff)
downloadperlweeklychallenge-club-ac8aafccc1ec148e0673e58b05d0e67a9b4ef9db.tar.gz
perlweeklychallenge-club-ac8aafccc1ec148e0673e58b05d0e67a9b4ef9db.tar.bz2
perlweeklychallenge-club-ac8aafccc1ec148e0673e58b05d0e67a9b4ef9db.zip
Complete solutions and prettier output for ch-2
Diffstat (limited to 'challenge-009')
-rw-r--r--challenge-009/ruben-westerberg/README6
-rwxr-xr-xchallenge-009/ruben-westerberg/perl5/ch-2.pl45
-rwxr-xr-xchallenge-009/ruben-westerberg/perl6/bug.p618
-rwxr-xr-xchallenge-009/ruben-westerberg/perl6/ch-2.p627
4 files changed, 73 insertions, 23 deletions
diff --git a/challenge-009/ruben-westerberg/README b/challenge-009/ruben-westerberg/README
index cdf9befd14..8ac9e1ff34 100644
--- a/challenge-009/ruben-westerberg/README
+++ b/challenge-009/ruben-westerberg/README
@@ -1,8 +1,8 @@
Solution by Ruben Westerberg
ch-1.pl and ch-1.p6
-Simply run the program to generate perfect numbers
+Simply run the programs
ch-2.pl and ch-2.p6
-Run the program and type in lines. When finished press CTRL-D to finish input.
-Centered lines will we output
+When running the programs provide a space separeated list of numbers to rank. Input is sorted in assending order before ranking
+If no command line arguments are specifed then a default list is used
diff --git a/challenge-009/ruben-westerberg/perl5/ch-2.pl b/challenge-009/ruben-westerberg/perl5/ch-2.pl
new file mode 100755
index 0000000000..4cbd06e2a2
--- /dev/null
+++ b/challenge-009/ruben-westerberg/perl5/ch-2.pl
@@ -0,0 +1,45 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use v5.26;
+
+
+my @inputs=@ARGV > 0 ? @ARGV : (10,20,20,51);
+@inputs =sort @inputs;
+
+sub rank1224 {
+ my $ref=sub {map {
+ state $prev=$_;
+ state $count=0;
+ $count= ($prev != $$_[1])? 1: $count +1;
+ $prev=$$_[1];
+ $$_[0]+2-$count;
+ }
+
+ (map {state $i;[$i++,$_]} @_);
+ };
+ &$ref(@_);
+}
+
+sub rank1334 {
+ my @r=rank1224(reverse @_);
+ map {@r+1 - $_} reverse @r;
+}
+
+sub rank1223 {
+ map {
+ state $prev=$_;
+ state $r=1;
+ $r= ($prev != $_) ? $r+1: $r;
+ $prev=$_;
+ $r;
+
+ } @_;
+}
+print "Inputs: ",join " ",@inputs;
+print "\n";
+print "1224 Ranking: ",join ' ', rank1224(@inputs);
+print "\n";
+print "1334 Ranking: ",join ' ', rank1334(@inputs);
+print "\n";
+print "1223 Ranking: ", join ' ', rank1223(@inputs);
diff --git a/challenge-009/ruben-westerberg/perl6/bug.p6 b/challenge-009/ruben-westerberg/perl6/bug.p6
index 85b4f6ff94..0cf1dcd8fa 100755
--- a/challenge-009/ruben-westerberg/perl6/bug.p6
+++ b/challenge-009/ruben-westerberg/perl6/bug.p6
@@ -6,8 +6,18 @@ say do for @inputs {
NEXT { $prev=$_};
$r= ($prev !== $_) ?? $r+1 !! $r;
say $r;
- $r;
+ $r+0; # THIS IS REQUIRED for some reason
};
-say (for @inputs {
- $_*2;
-});
+
+sub bug (@vals) {
+ @vals.map: {
+ state $prev=$_;
+ state $r=1;
+ NEXT { $prev=$_};
+ $r= ($prev !== $_) ?? $r+1 !! $r;
+ say $r;
+ $r;
+ };
+}
+
+say bug(@inputs);
diff --git a/challenge-009/ruben-westerberg/perl6/ch-2.p6 b/challenge-009/ruben-westerberg/perl6/ch-2.p6
index 3c82c0ad59..e76f6a672a 100755
--- a/challenge-009/ruben-westerberg/perl6/ch-2.p6
+++ b/challenge-009/ruben-westerberg/perl6/ch-2.p6
@@ -1,19 +1,16 @@
#!/usr/bin/env perl6
my @inputs=@*ARGS>0??@*ARGS!![10,20,20,51];
-
+@inputs.=sort;
sub rank1224 (@inputs) {
#my @d=reverse sort input;
my @r=(for @inputs.kv {
- state $prev=-1;
- state $count=1;
+ state $prev=$^v;
+ state $count=0;
+ NEXT {$prev=$v};
$count= $prev !== $^v ?? 1!! $count+1;
- $prev=$v;
- $^k;
- $k+2-$count;
+ $^k+2-$count;
});
- #@r.elems +1 <<-<< @r.reverse
-
}
sub rank1334 (@inputs) {
my @d=reverse @inputs;
@@ -22,16 +19,14 @@ sub rank1334 (@inputs) {
}
sub rank1223 (@input) {
- @input.map({
+ @input.map: {
state $prev=$_;
state $r=1;
NEXT { $prev=$_};
$r= ($prev !== $_) ?? $r+1 !! $r;
- #say $r;
- $r;
- });
+ };
}
-
-say rank1224(@inputs);
-say rank1334(@inputs);
-say rank1223(@inputs);
+say "Inputs: "~@inputs;
+say "1224 Ranking: "~rank1224(@inputs);
+say "1334 Ranking: "~rank1334(@inputs);
+say "1223 Ranking: "~rank1223(@inputs);