aboutsummaryrefslogtreecommitdiff
path: root/challenge-059
diff options
context:
space:
mode:
authorchirvasitua <stuart-little@users.noreply.github.com>2020-11-21 11:43:21 -0500
committerchirvasitua <stuart-little@users.noreply.github.com>2020-11-21 11:43:21 -0500
commitf8b559aed7f7d1f161eee1267ee662f27e67ac83 (patch)
treeba43b0bd0222e297854678b7a90fccc6f076c007 /challenge-059
parent3515458c7a0532e4b4475b3ad4b34e4e92b7dc99 (diff)
downloadperlweeklychallenge-club-f8b559aed7f7d1f161eee1267ee662f27e67ac83.tar.gz
perlweeklychallenge-club-f8b559aed7f7d1f161eee1267ee662f27e67ac83.tar.bz2
perlweeklychallenge-club-f8b559aed7f7d1f161eee1267ee662f27e67ac83.zip
initial commit on 056--059
Diffstat (limited to 'challenge-059')
-rw-r--r--challenge-059/stuart-little/README1
-rwxr-xr-xchallenge-059/stuart-little/raku/ch-1.p6112
-rwxr-xr-xchallenge-059/stuart-little/raku/ch-2.p66
3 files changed, 119 insertions, 0 deletions
diff --git a/challenge-059/stuart-little/README b/challenge-059/stuart-little/README
new file mode 100644
index 0000000000..78439907de
--- /dev/null
+++ b/challenge-059/stuart-little/README
@@ -0,0 +1 @@
+Solutions by Stuart Little
diff --git a/challenge-059/stuart-little/raku/ch-1.p6 b/challenge-059/stuart-little/raku/ch-1.p6
new file mode 100755
index 0000000000..133dda05ee
--- /dev/null
+++ b/challenge-059/stuart-little/raku/ch-1.p6
@@ -0,0 +1,112 @@
+#!/usr/bin/env perl6
+use v6;
+
+class Node {
+ has Real $.val;
+ has Node $.next is rw;
+}
+
+class Sll {
+ has Node $.head is rw;
+
+ method show() {
+ my $node = self.head;
+ (! $node) && return;
+ while ($node.next) {
+ print $node.val, " -> ";
+ $node=$node.next;
+ }
+ say $node.val;
+ }
+
+ method len() {
+ my $node = self.head;
+ my $len=0;
+ while ($node) {
+ $len++;
+ $node=$node.next;
+ }
+ return $len;
+ }
+
+ multi method insert(Real $val) {
+ my $node=self.head;
+ (! $node) && do {
+ self.head=Node.new(val => $val);
+ return;
+ }
+ while ($node.next) {
+ $node=$node.next;
+ }
+ $node.next=Node.new(val => $val);
+ }
+
+ multi method insert(0, Real $val) {
+ my $node=Node.new(val => $val, next => 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.next;
+ }
+ $node.next=$cur.next;
+ $cur.next=$node;
+ }
+ }
+ }
+
+ method del(Int $idx where * >= 0) {
+ given $idx {
+ when self.len..* { warn "Index out of range" }
+ when 0 { self.head=self.head.next }
+ default {
+ my $cur=self.head;
+ for (^($idx-1)) {
+ $cur=$cur.next;
+ }
+ $cur.next=$cur.next.next;
+ }
+ }
+ }
+}
+
+my $ll=Sll.new();
+for (@*ARGS[1..*].map(*.Real)) {
+ $ll.insert($_);
+}
+
+print "Initial list: ";
+$ll.show();
+
+my $k=@*ARGS[0].Real;
+my $cur=Node.new(next => $ll.head);
+my ($ins_idx,$cur_idx)=(0,0);
+
+while ($cur.next && $cur.next.val < $k) {
+ $ins_idx++;
+ $cur_idx++;
+ $cur.next=$cur.next.next;
+}
+
+while ($cur.next && $cur.next.next) {
+ my $val=$cur.next.next.val;
+ ($val < $k) && do {
+ $ll.del(++$cur_idx);
+ $ll.insert($ins_idx,$val);
+ $ins_idx++;
+ }
+ $cur_idx++;
+ $cur.next=$cur.next.next;
+}
+
+print "Final list: ";
+$ll.show();
+
+# run as <script> <number $k> <space-separated numbers making up the list>
diff --git a/challenge-059/stuart-little/raku/ch-2.p6 b/challenge-059/stuart-little/raku/ch-2.p6
new file mode 100755
index 0000000000..b775075932
--- /dev/null
+++ b/challenge-059/stuart-little/raku/ch-2.p6
@@ -0,0 +1,6 @@
+#!/usr/bin/env perl6
+use v6;
+
+say @*ARGS.map(*.Int).combinations(2).map({ ($_[0] +^ $_[1]).base(2).comb.grep(1).elems }).sum
+
+# run as <script> <space-separated numbers>