aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorchirvasitua <stuart-little@users.noreply.github.com>2020-11-04 10:58:59 -0500
committerchirvasitua <stuart-little@users.noreply.github.com>2020-11-04 10:58:59 -0500
commit3e71d013079068ed00d8e5eb5fef20f651343d25 (patch)
tree08a842404286621625fd34e339202d9c89172c83
parenta8513d6b47f39c06071054da5797d99c3343395a (diff)
downloadperlweeklychallenge-club-3e71d013079068ed00d8e5eb5fef20f651343d25.tar.gz
perlweeklychallenge-club-3e71d013079068ed00d8e5eb5fef20f651343d25.tar.bz2
perlweeklychallenge-club-3e71d013079068ed00d8e5eb5fef20f651343d25.zip
initial commit on challenges 070-073
-rw-r--r--challenge-070/stuart-little/README1
-rwxr-xr-xchallenge-070/stuart-little/raku/ch-1.p610
-rwxr-xr-xchallenge-070/stuart-little/raku/ch-2.p611
-rw-r--r--challenge-071/stuart-little/README1
-rwxr-xr-xchallenge-071/stuart-little/raku/ch-1.p612
-rwxr-xr-xchallenge-071/stuart-little/raku/ch-2.p694
-rw-r--r--challenge-072/stuart-little/README1
-rwxr-xr-xchallenge-072/stuart-little/raku/ch-1.p611
-rwxr-xr-xchallenge-072/stuart-little/raku/ch-2.p610
-rw-r--r--challenge-073/stuart-little/README1
-rwxr-xr-xchallenge-073/stuart-little/raku/ch-1.p610
-rwxr-xr-xchallenge-073/stuart-little/raku/ch-2.p610
12 files changed, 172 insertions, 0 deletions
diff --git a/challenge-070/stuart-little/README b/challenge-070/stuart-little/README
new file mode 100644
index 0000000000..76119cbbb8
--- /dev/null
+++ b/challenge-070/stuart-little/README
@@ -0,0 +1 @@
+Solutions by Stuart Little.
diff --git a/challenge-070/stuart-little/raku/ch-1.p6 b/challenge-070/stuart-little/raku/ch-1.p6
new file mode 100755
index 0000000000..cbad4f9e32
--- /dev/null
+++ b/challenge-070/stuart-little/raku/ch-1.p6
@@ -0,0 +1,10 @@
+#!/usr/bin/env perl6
+use v6;
+
+sub swp(Str $s, Int $c, Int $o where { $c <= $o && $c+$o <= $s.chars }) {
+ $s.substr(0,1) ~ $s.substr(1+$o, $c) ~ $s.substr($c+1..$o) ~ $s.substr(1, $c) ~ $s.substr($c+$o+1)
+}
+
+say swp(@*ARGS[0], |@*ARGS[1,2].map(*.Int) );
+
+# run as <script> <string count offset>
diff --git a/challenge-070/stuart-little/raku/ch-2.p6 b/challenge-070/stuart-little/raku/ch-2.p6
new file mode 100755
index 0000000000..ad6879fd38
--- /dev/null
+++ b/challenge-070/stuart-little/raku/ch-2.p6
@@ -0,0 +1,11 @@
+#!/usr/bin/env perl6
+use v6;
+
+sub gray($n) {
+ ($n==1) && return <0 1>.List;
+ return (.map({ 0~$_}), .reverse.map({ 1~$_})).flat.List with gray($n-1);
+}
+
+say gray(@*ARGS[0].Int).map({ :2($_)});
+
+# run as <script> <size>
diff --git a/challenge-071/stuart-little/README b/challenge-071/stuart-little/README
new file mode 100644
index 0000000000..76119cbbb8
--- /dev/null
+++ b/challenge-071/stuart-little/README
@@ -0,0 +1 @@
+Solutions by Stuart Little.
diff --git a/challenge-071/stuart-little/raku/ch-1.p6 b/challenge-071/stuart-little/raku/ch-1.p6
new file mode 100755
index 0000000000..d2899ea300
--- /dev/null
+++ b/challenge-071/stuart-little/raku/ch-1.p6
@@ -0,0 +1,12 @@
+#!/usr/bin/env perl6
+use v6;
+
+sub pks(@a) {
+ @a.[@a.keys.grep({ (-Inf, |@a).[$_+1] > (-Inf, |@a).[$_,$_+2].max })]
+}
+
+my @a=(1..50).pick(@*ARGS[0].Int);
+say("Initial array: ", @a);
+say("Peaks: ", pks(@a));
+
+# run as <script> <size>
diff --git a/challenge-071/stuart-little/raku/ch-2.p6 b/challenge-071/stuart-little/raku/ch-2.p6
new file mode 100755
index 0000000000..b8c961bfcf
--- /dev/null
+++ b/challenge-071/stuart-little/raku/ch-2.p6
@@ -0,0 +1,94 @@
+#!/usr/bin/env perl6
+use v6;
+
+class Node {
+ has Real $.val;
+ has Node $.nxt is rw;
+}
+
+class Sll {
+ has Node $.head is rw;
+
+ method show() {
+ my $node = self.head;
+ (! $node) && return;
+ while ($node.nxt) {
+ print $node.val, " -> ";
+ $node=$node.nxt;
+ }
+ say $node.val;
+ }
+
+ method len() {
+ my $node = self.head;
+ my $len=0;
+ while ($node) {
+ $len++;
+ $node=$node.nxt;
+ }
+ return $len;
+ }
+
+ multi method insert(Real $val) {
+ my $node=self.head;
+ (! $node) && do {
+ self.head=Node.new(val => $val);
+ return;
+ }
+ while ($node.nxt) {
+ $node=$node.nxt;
+ }
+ $node.nxt=Node.new(val => $val);
+ }
+
+ multi method insert(0, Real $val) {
+ my $node=Node.new(val => $val, nxt => self.head);
+ self.head=$node;
+ }
+
+ multi method insert(Int $idx where * > 0, Real $val) {
+ given self.len {
+ when 0 { self.insert(0,$val) }
+ when 1..$idx { self.insert($val) }
+ default {
+ my $cur=self.head;
+ my $node=Node.new(val => $val);
+ for (0..^($idx-1)) {
+ $cur=$cur.nxt;
+ }
+ $node.nxt=$cur.nxt;
+ $cur.nxt=$node;
+ }
+ }
+ }
+
+ method del(Int $idx where * >= 0) {
+ given $idx {
+ when self.len..* { warn "Index out of range" }
+ when 0 { self.head=self.head.nxt }
+ default {
+ my $cur=self.head;
+ for (^($idx-1)) {
+ $cur=$cur.nxt;
+ }
+ $cur.nxt=$cur.nxt.nxt;
+ }
+ }
+ }
+}
+
+my $ll=Sll.new();
+for (@*ARGS[1..*].map(*.Real)) {
+ $ll.insert($_);
+}
+
+print "Initial list: ";
+$ll.show();
+
+my $N=@*ARGS[0].Int;
+($N > $ll.len) ?? ($ll.del(0)) !! ($ll.del($ll.len-$N));
+
+print "Chopped list: ";
+$ll.show();
+
+# run as <script> <number $N> <space-separated numbers making up the list>
diff --git a/challenge-072/stuart-little/README b/challenge-072/stuart-little/README
new file mode 100644
index 0000000000..76119cbbb8
--- /dev/null
+++ b/challenge-072/stuart-little/README
@@ -0,0 +1 @@
+Solutions by Stuart Little.
diff --git a/challenge-072/stuart-little/raku/ch-1.p6 b/challenge-072/stuart-little/raku/ch-1.p6
new file mode 100755
index 0000000000..878a4eb283
--- /dev/null
+++ b/challenge-072/stuart-little/raku/ch-1.p6
@@ -0,0 +1,11 @@
+#!/usr/bin/env perl6
+use v6;
+
+sub prime_pow_fact($p,$n) {
+ ($p, $p ** 2, $p ** 3 ...^ * > $n).map({ Int($n/$_) }).sum
+}
+
+my $n=@*ARGS[0].Int;
+say min(prime_pow_fact(2,$n),prime_pow_fact(5,$n));
+
+# run as <script> <number>
diff --git a/challenge-072/stuart-little/raku/ch-2.p6 b/challenge-072/stuart-little/raku/ch-2.p6
new file mode 100755
index 0000000000..c7b6575486
--- /dev/null
+++ b/challenge-072/stuart-little/raku/ch-2.p6
@@ -0,0 +1,10 @@
+#!/usr/bin/env perl6
+use v6;
+
+sub flns($l1, $l2, $flnm) {
+ $flnm.IO.lines[($l1-1,$l2-1).min..($l1-1,$l2-1).max].join("\n")
+}
+
+say flns(|@*ARGS[0,1].map(*.Int), @*ARGS[2]);
+
+# run as <script> <two space-separated line numbers, in either order and then a filename>
diff --git a/challenge-073/stuart-little/README b/challenge-073/stuart-little/README
new file mode 100644
index 0000000000..76119cbbb8
--- /dev/null
+++ b/challenge-073/stuart-little/README
@@ -0,0 +1 @@
+Solutions by Stuart Little.
diff --git a/challenge-073/stuart-little/raku/ch-1.p6 b/challenge-073/stuart-little/raku/ch-1.p6
new file mode 100755
index 0000000000..9d10e184b6
--- /dev/null
+++ b/challenge-073/stuart-little/raku/ch-1.p6
@@ -0,0 +1,10 @@
+#!/usr/bin/env perl6
+use v6;
+
+sub slide($w, @a where @a >= $w) {
+ (0..@a-$w).map({ @a.[$_..^$_+$w].min })
+}
+
+say slide(@*ARGS[0].Int, @*ARGS[1..*].map(*.Int));
+
+# run as <script> <window size> <space-separated array entries>
diff --git a/challenge-073/stuart-little/raku/ch-2.p6 b/challenge-073/stuart-little/raku/ch-2.p6
new file mode 100755
index 0000000000..c417568372
--- /dev/null
+++ b/challenge-073/stuart-little/raku/ch-2.p6
@@ -0,0 +1,10 @@
+#!/usr/bin/env perl6
+use v6;
+
+sub slide(@a) {
+ (0..^@a).map({ (@a.[0..$_].min < @a[$_]) ?? (@a[0..^$_].min) !! (0) })
+}
+
+say slide(@*ARGS.map(*.Int));
+
+# run as <script> <space-separated array entries>