diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2020-11-22 04:51:10 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-11-22 04:51:10 +0000 |
| commit | f5167bace8769b7e63318dc27cbf3d95dee0d293 (patch) | |
| tree | 219a3c2a147fce8bfe31d5efce617ce5486fdea1 | |
| parent | 586bfd8469caf7bd6f744e3f0ccce81b3dcdfef7 (diff) | |
| parent | f8b559aed7f7d1f161eee1267ee662f27e67ac83 (diff) | |
| download | perlweeklychallenge-club-f5167bace8769b7e63318dc27cbf3d95dee0d293.tar.gz perlweeklychallenge-club-f5167bace8769b7e63318dc27cbf3d95dee0d293.tar.bz2 perlweeklychallenge-club-f5167bace8769b7e63318dc27cbf3d95dee0d293.zip | |
Merge pull request #2811 from stuart-little/stuart-little_056--059
initial commit on 056--059
| -rw-r--r-- | challenge-056/stuart-little/README | 1 | ||||
| -rwxr-xr-x | challenge-056/stuart-little/raku/ch-1.p6 | 10 | ||||
| -rwxr-xr-x | challenge-056/stuart-little/raku/ch-2.p6 | 31 | ||||
| -rw-r--r-- | challenge-057/stuart-little/README | 1 | ||||
| -rwxr-xr-x | challenge-057/stuart-little/raku/ch-1.p6 | 22 | ||||
| -rwxr-xr-x | challenge-057/stuart-little/raku/ch-2.p6 | 10 | ||||
| -rw-r--r-- | challenge-058/stuart-little/README | 1 | ||||
| -rwxr-xr-x | challenge-058/stuart-little/raku/ch-1.p6 | 10 | ||||
| -rwxr-xr-x | challenge-058/stuart-little/raku/ch-2.p6 | 12 | ||||
| -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 |
12 files changed, 217 insertions, 0 deletions
diff --git a/challenge-056/stuart-little/README b/challenge-056/stuart-little/README new file mode 100644 index 0000000000..78439907de --- /dev/null +++ b/challenge-056/stuart-little/README @@ -0,0 +1 @@ +Solutions by Stuart Little diff --git a/challenge-056/stuart-little/raku/ch-1.p6 b/challenge-056/stuart-little/raku/ch-1.p6 new file mode 100755 index 0000000000..050e6f6750 --- /dev/null +++ b/challenge-056/stuart-little/raku/ch-1.p6 @@ -0,0 +1,10 @@ +#!/usr/bin/env perl6 +use v6; + +sub diffk($k,@a) { + (&{$_}, &{$_.map(*.reverse)}).map({|@a.keys.combinations(2).$_}).grep({ @a[$_[0]]-@a[$_[1]] == $k }) || "nothing" +} + +say diffk(@*ARGS[0].Int, @*ARGS[1..*].map(*.Int)) + +# run as <script> <target difference $k> <space-separated array entries> diff --git a/challenge-056/stuart-little/raku/ch-2.p6 b/challenge-056/stuart-little/raku/ch-2.p6 new file mode 100755 index 0000000000..6a1fc64eeb --- /dev/null +++ b/challenge-056/stuart-little/raku/ch-2.p6 @@ -0,0 +1,31 @@ +#!/usr/bin/env perl6 +use v6; + +sub leaf_paths(@t) { + (@t[1..*].all ~~ Str) && return ((@t[0],),); + my @left=@t[1..(my $idx = (1..^@t).first({ @t[1..$_].grep(*.Int).elems - @t[1..$_].grep(* ~~ Str).elems == -1 }))]; + my @right=@t[$idx^..*]; + (((@left[0].Int) ?? leaf_paths(@left) !! ()),((@right[0].Int) ?? leaf_paths(@right) !! ())).map(*.map({@t[0], |@$_ })).map(|*) +} + +say @*ARGS[1..*].map({ $_.Int || $_ }).&leaf_paths.grep({ $_.sum == @*ARGS[0] }); + +=finish + +run as <script> <target sum> <tree in preorder form with '.' for empty nodes, entered as space-separated values> + +ref: https://stackoverflow.com/a/2676849/11064961 + +e.g. 5 4 11 7 . . 2 . . . 8 13 . . 9 . 1 . . represents the tree + + 5 + / \ + 4 8 + / / \ + 11 13 9 + / \ \ + 7 2 1 + +given as an example in the problem formulation at https://perlweeklychallenge.org/blog/perl-weekly-challenge-056/ + +That example would be run as <script> 22 5 4 11 7 . . 2 . . . 8 13 . . 9 . 1 . ., returning ((5 4 11 2)) diff --git a/challenge-057/stuart-little/README b/challenge-057/stuart-little/README new file mode 100644 index 0000000000..78439907de --- /dev/null +++ b/challenge-057/stuart-little/README @@ -0,0 +1 @@ +Solutions by Stuart Little diff --git a/challenge-057/stuart-little/raku/ch-1.p6 b/challenge-057/stuart-little/raku/ch-1.p6 new file mode 100755 index 0000000000..a17b1bc417 --- /dev/null +++ b/challenge-057/stuart-little/raku/ch-1.p6 @@ -0,0 +1,22 @@ +#!/usr/bin/env perl6 +use v6; + +sub inv_tree(@t where { log2($_.elems + 1) %% 1 }) { + (0..(log2(@t.elems + 1)-1)).map(2 ** * - 1).map({ @t[$_ .. 2*$_].reverse }).flat +} + +sub ancest($n) { $n == 0 && return ($n,); return ($n % 2) ?? (|ancest(($n-1) div 2), $n) !! (|ancest(($n-2) div 2), $n); } + +sub draw_brnch(@a) { + |@a[0..^*-1].map(*.trans(['-', 0..9] => ' ')), @a[*-1] +} + +sub preord(@a) { @a == 1 && return @a; return (@a[0], |preord(@a[@a.keys.grep({($_+1).base(2) ~~ /^10/})]), |preord(@a[@a.keys.grep({($_+1).base(2) ~~ /^11/})]))} + +my @fragments=@*ARGS.pairs.map({ (($_.key %% 2) ?? ('') !! ('|')) ~ "--" ~ $_.value }); + +my @lines=@fragments.keys.map(*.&ancest).map({ @fragments[@($_)] }).map(*.&draw_brnch).map(*.join); + +for @lines.&preord {.say} + +# run as <script> <space-separated tree entries, ordered as you would read them in English: left-to-right then top-to-bottom> diff --git a/challenge-057/stuart-little/raku/ch-2.p6 b/challenge-057/stuart-little/raku/ch-2.p6 new file mode 100755 index 0000000000..eb75cd55e0 --- /dev/null +++ b/challenge-057/stuart-little/raku/ch-2.p6 @@ -0,0 +1,10 @@ +#!/usr/bin/env perl6 +use v6; + +sub uprefix($w,@a) { + ([\~] $w.comb).first(-> $p { @a.grep({ $_.starts-with($p) }).elems == 1 }) +} + +say @*ARGS.map({ uprefix($_,@*ARGS) }) + +# run as <script> <space-separated words> diff --git a/challenge-058/stuart-little/README b/challenge-058/stuart-little/README new file mode 100644 index 0000000000..78439907de --- /dev/null +++ b/challenge-058/stuart-little/README @@ -0,0 +1 @@ +Solutions by Stuart Little diff --git a/challenge-058/stuart-little/raku/ch-1.p6 b/challenge-058/stuart-little/raku/ch-1.p6 new file mode 100755 index 0000000000..6e008f388a --- /dev/null +++ b/challenge-058/stuart-little/raku/ch-1.p6 @@ -0,0 +1,10 @@ +#!/usr/bin/env perl6 +use v6; + +sub versprcs($v) { + $v.comb.map({ $_.Int || $_ }).map({ $_ ~~ Str && $_.trans(['.','_']=>['_','.']) || $_ }) +} + +say (@*ARGS[0].&versprcs cmp @*ARGS[1].&versprcs).Int + +# run as <script> <1st version number> <2nd version number> diff --git a/challenge-058/stuart-little/raku/ch-2.p6 b/challenge-058/stuart-little/raku/ch-2.p6 new file mode 100755 index 0000000000..6f6fa024ba --- /dev/null +++ b/challenge-058/stuart-little/raku/ch-2.p6 @@ -0,0 +1,12 @@ +#!/usr/bin/env perl6 +use v6; + +sub inspair(@a,$p) { |@a[0..^$p.value], $p.key, |@a[$p.value..*] } + +my @H=(27, 21, 37, 4, 19, 52, 23, 64, 1, 7, 51, 17, 24, 50, 3, 2, 34, 40, 47, 20, 8, 56, 14, 16, 42, 38, 62, 53, 31, 41, 55, 59, 48, 12, 32, 61, 9, 60, 46, 26, 58, 25, 15, 36, 11, 44, 63, 28, 5, 54, 10, 49, 57, 30, 29, 22, 35, 39, 45, 43, 18, 6, 13, 33); +my @T=( 6, 41, 1, 49, 38, 12, 1, 0, 58, 47, 4, 17, 26, 1, 61, 12, 29, 3, 4, 11, 45, 1, 32, 5, 9, 19, 1, 4, 28, 12, 2, 2, 13, 18, 19, 3, 4, 1, 10, 16, 4, 3, 29, 5, 49, 1, 1, 24, 2, 1, 38, 7, 7, 14, 35, 25, 0, 5, 4, 19, 10, 13, 4, 12); + +my @A=reduce(&inspair, (), |(@H Z=> @T).sort({ -$_.key.Int })); +say (@A.any ~~ Nil) ?? ("Error: no solution possible") !! (@A) + +# run as <script> 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> |
