diff options
| author | chirvasitua <stuart-little@users.noreply.github.com> | 2020-11-21 11:43:21 -0500 |
|---|---|---|
| committer | chirvasitua <stuart-little@users.noreply.github.com> | 2020-11-21 11:43:21 -0500 |
| commit | f8b559aed7f7d1f161eee1267ee662f27e67ac83 (patch) | |
| tree | ba43b0bd0222e297854678b7a90fccc6f076c007 /challenge-059 | |
| parent | 3515458c7a0532e4b4475b3ad4b34e4e92b7dc99 (diff) | |
| download | perlweeklychallenge-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/README | 1 | ||||
| -rwxr-xr-x | challenge-059/stuart-little/raku/ch-1.p6 | 112 | ||||
| -rwxr-xr-x | challenge-059/stuart-little/raku/ch-2.p6 | 6 |
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> |
