aboutsummaryrefslogtreecommitdiff
path: root/challenge-059
diff options
context:
space:
mode:
authorJared Martin <jaredor+github@gmail.com>2020-05-15 12:23:44 -0500
committerGitHub <noreply@github.com>2020-05-15 12:23:44 -0500
commit16b5c61e73278b37d483e0153ee9455d7c9b3be9 (patch)
treeffa87d894d19cbe1cf09dc6cb1dfb41c2f00a0b2 /challenge-059
parent25203be9ff4441f1ecd8773cec5b7bbf67a2c3a7 (diff)
parent4bd44dfd597811f71468831c7ee80a9101e7f30a (diff)
downloadperlweeklychallenge-club-16b5c61e73278b37d483e0153ee9455d7c9b3be9.tar.gz
perlweeklychallenge-club-16b5c61e73278b37d483e0153ee9455d7c9b3be9.tar.bz2
perlweeklychallenge-club-16b5c61e73278b37d483e0153ee9455d7c9b3be9.zip
Merge pull request #13 from manwar/master
PWC 059
Diffstat (limited to 'challenge-059')
-rw-r--r--challenge-059/adam-russell/blog.txt1
-rw-r--r--challenge-059/adam-russell/perl/LinkedList.pm75
-rw-r--r--challenge-059/adam-russell/perl/ch-1.pl22
-rw-r--r--challenge-059/adam-russell/perl/ch-2.pl38
-rw-r--r--challenge-059/arne-sommer/blog.txt1
-rwxr-xr-xchallenge-059/arne-sommer/raku/bit-diff23
-rwxr-xr-xchallenge-059/arne-sommer/raku/bit-diff218
-rwxr-xr-xchallenge-059/arne-sommer/raku/bit-sum20
-rwxr-xr-xchallenge-059/arne-sommer/raku/bit-sum-musing46
-rwxr-xr-xchallenge-059/arne-sommer/raku/bit-sum-musing256
-rwxr-xr-xchallenge-059/arne-sommer/raku/ch-1.p631
-rwxr-xr-xchallenge-059/arne-sommer/raku/ch-2.p620
-rwxr-xr-xchallenge-059/arne-sommer/raku/linked-list31
-rwxr-xr-xchallenge-059/arne-sommer/raku/linked-list-linked48
-rw-r--r--challenge-059/athanasius/perl/ch-1.pl120
-rw-r--r--challenge-059/athanasius/perl/ch-2.pl109
-rw-r--r--challenge-059/athanasius/raku/ch-1.raku132
-rw-r--r--challenge-059/athanasius/raku/ch-2.raku111
-rw-r--r--challenge-059/cheok-yin-fung/BLOG.txt1
-rw-r--r--challenge-059/cheok-yin-fung/perl/ch-1.pl121
-rw-r--r--challenge-059/cheok-yin-fung/perl/ch-2.pl31
-rw-r--r--challenge-059/colin-crain/blog.txt1
-rw-r--r--challenge-059/colin-crain/perl/ch-1.pl88
-rw-r--r--challenge-059/colin-crain/perl/ch-2.pl35
-rw-r--r--challenge-059/colin-crain/raku/ch-1.p665
-rw-r--r--challenge-059/colin-crain/raku/ch-2.p611
-rw-r--r--challenge-059/dave-jacoby/blog.txt1
-rw-r--r--challenge-059/dave-jacoby/blog1.txt1
-rw-r--r--challenge-059/duncan-c-white/README82
-rwxr-xr-xchallenge-059/duncan-c-white/perl/ch-1.pl167
-rwxr-xr-xchallenge-059/duncan-c-white/perl/ch-2.pl74
-rw-r--r--challenge-059/e-choroba/blog.txt1
-rwxr-xr-xchallenge-059/e-choroba/perl/ch-2.pl46
-rw-r--r--challenge-059/jaredor/blog.txt1
-rw-r--r--challenge-059/javier-luque/perl/ch-1.pl84
-rw-r--r--challenge-059/javier-luque/raku/ch-1.p686
-rwxr-xr-xchallenge-059/jo-37/perl/ch-1.pl72
-rwxr-xr-xchallenge-059/jo-37/perl/ch-2.pl15
-rw-r--r--challenge-059/kevin-colyer/raku/ch-1.p6193
-rw-r--r--challenge-059/kevin-colyer/raku/ch-2.p659
-rw-r--r--challenge-059/laurent-rosenfeld/blog.txt1
-rw-r--r--challenge-059/laurent-rosenfeld/perl/ch-1.pl16
-rw-r--r--challenge-059/laurent-rosenfeld/perl/ch-1a.pl31
-rw-r--r--challenge-059/laurent-rosenfeld/perl/ch-2.pl22
-rw-r--r--challenge-059/laurent-rosenfeld/raku/ch-1.p613
-rw-r--r--challenge-059/laurent-rosenfeld/raku/ch-1a.p66
-rw-r--r--challenge-059/laurent-rosenfeld/raku/ch-2.p617
-rwxr-xr-xchallenge-059/manfredi/perl/ch-2.pl38
-rwxr-xr-xchallenge-059/manfredi/python/ch-2.py24
-rw-r--r--challenge-059/markus-holzer/raku/ch-1.p638
-rw-r--r--challenge-059/markus-holzer/raku/ch-2.p67
-rw-r--r--challenge-059/markus-holzer/raku/lib/LinkedList/Simple.pm6110
-rw-r--r--challenge-059/mohammad-anwar/blog.txt1
-rw-r--r--challenge-059/mohammad-anwar/perl/ch-1.pl28
-rw-r--r--challenge-059/mohammad-anwar/perl/ch-1a.pl25
-rw-r--r--challenge-059/mohammad-anwar/perl/ch-2.pl38
-rw-r--r--challenge-059/mohammad-anwar/perl/ch-2a.pl46
-rw-r--r--challenge-059/mohammad-anwar/raku/ch-1.p626
-rw-r--r--challenge-059/mohammad-anwar/raku/ch-1a.p623
-rw-r--r--challenge-059/mohammad-anwar/raku/ch-2.p638
-rw-r--r--challenge-059/mohammad-anwar/raku/ch-2a.p645
-rw-r--r--challenge-059/noud/raku/ch-1.p618
-rw-r--r--challenge-059/noud/raku/ch-2.p642
-rw-r--r--challenge-059/richard-park/apl/BitSum.aplf8
-rw-r--r--challenge-059/richard-park/apl/LinkedList.aplf4
-rw-r--r--challenge-059/richard-park/apl/ch-1.aplf4
-rw-r--r--challenge-059/richard-park/apl/ch-2.aplf8
-rw-r--r--challenge-059/richard-park/raku/ch-1.raku13
-rw-r--r--challenge-059/roger-bell-west/blog.txt1
-rw-r--r--challenge-059/saiftynet/perl/ch-1.pl31
-rw-r--r--challenge-059/saiftynet/perl/ch-2.pl26
-rw-r--r--challenge-059/sangeet-kar/README1
-rw-r--r--challenge-059/sangeet-kar/perl/ch-1.pl85
-rw-r--r--challenge-059/sangeet-kar/perl/ch-2.pl16
-rw-r--r--challenge-059/shahed-nooshmand/blog.txt1
-rw-r--r--challenge-059/shahed-nooshmand/raku/ch-1.sh1
-rw-r--r--challenge-059/shahed-nooshmand/raku/ch-2.sh1
-rw-r--r--challenge-059/shawak/README.md6
-rw-r--r--challenge-059/shawak/ruby/ch-2.rb7
-rw-r--r--challenge-059/yet-ebreo/perl/ch-1.pl117
80 files changed, 2979 insertions, 141 deletions
diff --git a/challenge-059/adam-russell/blog.txt b/challenge-059/adam-russell/blog.txt
new file mode 100644
index 0000000000..4f5e408d78
--- /dev/null
+++ b/challenge-059/adam-russell/blog.txt
@@ -0,0 +1 @@
+https://adamcrussell.livejournal.com/16202.html
diff --git a/challenge-059/adam-russell/perl/LinkedList.pm b/challenge-059/adam-russell/perl/LinkedList.pm
new file mode 100644
index 0000000000..a340f898e9
--- /dev/null
+++ b/challenge-059/adam-russell/perl/LinkedList.pm
@@ -0,0 +1,75 @@
+use strict;
+use warnings;
+package LinkedList{
+ use boolean;
+ use Tie::RefHash;
+ use Class::Struct;
+ package Node{
+ use Class::Struct;
+
+ struct(
+ data => q/$/,
+ next => q/Node/
+ );
+ }
+
+ struct(
+ head => q/Node/
+ );
+
+ sub stringify{
+ my($self) = @_;
+ my $s = "";
+ my $next = $self->head()->next();
+ while($next && $next->next()){
+ $s .= " -> " if $s;
+ $s = $s . $next->data();
+ $next = $next->next();
+ }
+ $s = $s . " -> " . $next->data() if $next->data();
+ $s .= "\n";
+ return $s;
+ }
+
+ sub insert{
+ my($self, $data, $previous) = @_;
+ if(!$previous){
+ $previous=new Node(data => undef, next => undef);
+ $self->head($previous);
+ }
+ my $next=new Node(data => $data, next => undef);
+ $previous->next($next);
+ return $next;
+ }
+
+ sub partition{
+ my($self, $k) = @_;
+ my $previous = $self->head();
+ my $next = $self->head()->next();
+ tie my %node_value, "Tie::RefHash";
+ while($next){
+ if($next->data() < $k){
+ $node_value{$next} = $next->data();
+ if($next->next()){
+ $previous->next($next->next());
+ }
+ else{
+ $previous->next(new Node());
+ $next = undef;
+ next;
+ }
+ }
+ $previous = $next;
+ $next = $next->next();
+ }
+ my @sorted_nodes = sort {$node_value{$b} <=> $node_value{$a}} keys %node_value;
+ $previous = $self->head();
+ my $old_first = $previous->next();
+ while(@sorted_nodes){
+ my $node = pop @sorted_nodes;
+ $previous = insert($self,$node->data(), $previous);
+ }
+ $previous->next($old_first);
+ }
+ true;
+}
diff --git a/challenge-059/adam-russell/perl/ch-1.pl b/challenge-059/adam-russell/perl/ch-1.pl
new file mode 100644
index 0000000000..960302b6a3
--- /dev/null
+++ b/challenge-059/adam-russell/perl/ch-1.pl
@@ -0,0 +1,22 @@
+use strict;
+use warnings;
+##
+# Write a script to partition a linked list such that
+# all nodes less than k come before nodes greater than or equal to k.
+##
+use LinkedList;
+
+MAIN:{
+ my $ll = new LinkedList();
+ my $next = $ll->insert(1, undef);
+ $next = $ll->insert(4, $next);
+ $next = $ll->insert(3, $next);
+ $next = $ll->insert(2, $next);
+ $next = $ll->insert(5, $next);
+ $next = $ll->insert(2, $next);
+ print "Original: ";
+ print $ll->stringify();
+ $ll->partition(3);
+ print "Partitioned: ";
+ print $ll->stringify();
+}
diff --git a/challenge-059/adam-russell/perl/ch-2.pl b/challenge-059/adam-russell/perl/ch-2.pl
new file mode 100644
index 0000000000..ea09ad3c25
--- /dev/null
+++ b/challenge-059/adam-russell/perl/ch-2.pl
@@ -0,0 +1,38 @@
+use strict;
+use warnings;
+##
+# Write a function which returns the count of
+# different bits of the binary representation of
+# positive numbers a and b. The script should
+# accept n positive numbers and sum the result
+# for every pair of numbers given.
+##
+sub count_different_bits{
+ my($a, $b) = @_;
+ my $bits = 0;
+ while($a || $b){
+ $bits++ if ($a & 1) && !($b & 1);
+ $bits++ if !($a & 1) && ($b & 1);
+ $a = $a >> 1;
+ $b = $b >> 1;
+ }
+ return $bits;
+}
+
+MAIN:{
+ my $sum = 0;
+ my $line;
+ while($line = <DATA>){
+ chomp($line);
+ my($a, $b) = split(/,/, $line);
+ my $different_bits = count_different_bits($a, $b);
+ print "($a, $b) = $different_bits\n";
+ $sum += $different_bits;
+ }
+ print "sum of all bit differences: $sum\n";
+}
+
+__DATA__
+2,3
+2,4
+3,4
diff --git a/challenge-059/arne-sommer/blog.txt b/challenge-059/arne-sommer/blog.txt
new file mode 100644
index 0000000000..3217ab84fe
--- /dev/null
+++ b/challenge-059/arne-sommer/blog.txt
@@ -0,0 +1 @@
+https://raku-musings.com/linked-sum.html
diff --git a/challenge-059/arne-sommer/raku/bit-diff b/challenge-059/arne-sommer/raku/bit-diff
new file mode 100755
index 0000000000..fc27e3b060
--- /dev/null
+++ b/challenge-059/arne-sommer/raku/bit-diff
@@ -0,0 +1,23 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (Int $a is copy, $b is copy, :$verbose);
+
+($a, $b) = ($b, $a) if $b > $a;
+
+my $a2 = $a.base(2);
+
+my $length = $a2.chars;
+
+my $b2 = $b.fmt('%0' ~ $length ~ 'b');
+
+my $c2 = ($a +^ $b).fmt('%0' ~ $length ~ 'b');
+
+if $verbose
+{
+ say ": $a2 ($a)";
+ say ": $b2 ($b)";
+ say ": $c2 -> ", $c2.comb.sum;
+}
+
+say $c2.comb.sum;
+
diff --git a/challenge-059/arne-sommer/raku/bit-diff2 b/challenge-059/arne-sommer/raku/bit-diff2
new file mode 100755
index 0000000000..0cb783fa56
--- /dev/null
+++ b/challenge-059/arne-sommer/raku/bit-diff2
@@ -0,0 +1,18 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (Int $a, $b, :$verbose);
+
+my $c = ($a +^ $b);
+
+my $sum = $c.comb.sum;
+
+if $verbose
+{
+ my $length = (max($a, $b)).base(2).chars;
+
+ say ": { $a.fmt('%0' ~ $length ~ 'b') } ($a)";
+ say ": { $b.fmt('%0' ~ $length ~ 'b') } ($b)";
+ say ": { $c.fmt('%0' ~ $length ~ 'b') } -> $sum";
+}
+
+say $sum;
diff --git a/challenge-059/arne-sommer/raku/bit-sum b/challenge-059/arne-sommer/raku/bit-sum
new file mode 100755
index 0000000000..89962b4271
--- /dev/null
+++ b/challenge-059/arne-sommer/raku/bit-sum
@@ -0,0 +1,20 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@numbers where @numbers.elems > 1 && all(@numbers) ~~ Int,
+ :$verbose);
+
+my $grand-total;
+
+for @numbers.combinations(2) -> $list
+{
+ my $sum = bit-diff(|$list);
+ say ": $list -> $sum" if $verbose;
+ $grand-total += $sum;
+}
+
+say $grand-total;
+
+sub bit-diff (Int $a, Int $b)
+{
+ return ($a +^ $b).base(2).comb.sum;
+}
diff --git a/challenge-059/arne-sommer/raku/bit-sum-musing b/challenge-059/arne-sommer/raku/bit-sum-musing
new file mode 100755
index 0000000000..e4d1166e93
--- /dev/null
+++ b/challenge-059/arne-sommer/raku/bit-sum-musing
@@ -0,0 +1,46 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (Int $limit where $limit > 1 = 100, :$verbose);
+
+my $prev-sum = 0;
+my $prev-inc = 0;
+my $prev-inx = 0;
+
+my @result;
+
+for 2 .. $limit -> $number
+{
+ my @list = 1 .. $number;
+
+ my $sum = bit-sum(@list);
+ my $inc = $sum - $prev-sum;
+ my $inx = $inc - $prev-inc;
+
+ say ": bit-sum 1..{ $number.fmt("%3d") } -> { $sum.fmt("%3d") } -> { $inc.fmt("%3d") } -> { $inx.fmt("%3d") }" if $verbose;
+
+ @result.push: $inx;
+
+ $prev-sum = $sum;
+ $prev-inc = $inc;
+ $prev-inx = $inx;
+}
+
+put @result;
+
+sub bit-sum (*@numbers where @numbers.elems > 1 && all(@numbers) ~~ Int)
+{
+ my $grand-total;
+
+ for @numbers.combinations(2) -> $list
+ {
+ my $sum = bit-diff(|$list);
+ $grand-total += $sum;
+ }
+
+ return $grand-total;
+
+ sub bit-diff (Int $a, Int $b)
+ {
+ return ($a +^ $b).base(2).comb.sum;
+ }
+}
diff --git a/challenge-059/arne-sommer/raku/bit-sum-musing2 b/challenge-059/arne-sommer/raku/bit-sum-musing2
new file mode 100755
index 0000000000..9562349691
--- /dev/null
+++ b/challenge-059/arne-sommer/raku/bit-sum-musing2
@@ -0,0 +1,56 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (Int $limit where $limit > 1 = 100, :$verbose, :$type = "int");
+
+my $prev-sum = 0;
+my $prev-inc = 0;
+my $prev-inx = 0;
+
+my @result;
+
+for 2 .. $limit -> $number
+{
+ my @list;
+
+ given $type
+ {
+ when "int" { @list = (1 .. Inf)[^$number] }
+ when "even" { @list = (2, 4 ... Inf)[^$number] }
+ when "odd" { @list = (1, 3 ... Inf)[^$number] }
+ when "prime" { @list = ((1 .. Inf).grep: *.is-prime)[^$number] }
+ when "fib" { @list = (1, 1, * + * ... Inf)[^$number] }
+ default { die "Unknown type $_" }
+ }
+
+ my $sum = bit-sum(@list);
+ my $inc = $sum - $prev-sum;
+ my $inx = $inc - $prev-inc;
+
+ say ": bit-sum @list[] -> { $sum.fmt("%3d") } -> { $inc.fmt("%3d") } -> { $inx.fmt("%3d") }" if $verbose;
+
+ @result.push: $inx;
+
+ $prev-sum = $sum;
+ $prev-inc = $inc;
+ $prev-inx = $inx;
+}
+
+put @result;
+
+sub bit-sum (*@numbers where @numbers.elems > 1 && all(@numbers) ~~ Int)
+{
+ my $grand-total;
+
+ for @numbers.combinations(2) -> $list
+ {
+ my $sum = bit-diff(|$list);
+ $grand-total += $sum;
+ }
+
+ return $grand-total;
+
+ sub bit-diff (Int $a, Int $b)
+ {
+ return ($a +^ $b).base(2).comb.sum;
+ }
+}
diff --git a/challenge-059/arne-sommer/raku/ch-1.p6 b/challenge-059/arne-sommer/raku/ch-1.p6
new file mode 100755
index 0000000000..27b549dfd5
--- /dev/null
+++ b/challenge-059/arne-sommer/raku/ch-1.p6
@@ -0,0 +1,31 @@
+#! /usr/bin/env raku
+
+multi MAIN (Int $k = 3, Str $list = "1 4 3 2 5 2", :$verbose)
+{
+ MAIN($k, $list.words, :$verbose);
+}
+
+multi MAIN (Int $k = 3, *@list, :$verbose)
+{
+ my @lower;
+ my @higher;
+
+ for @list -> $elem
+ {
+ $elem >= $k
+ ?? @higher.push: $elem
+ !! @lower.push: $elem;
+ }
+
+ my @result = (@lower, @higher).flat;
+
+ if $verbose
+ {
+ say ": == : $k";
+ say ": < : @lower[]";
+ say ": >= : @higher[]";
+ }
+
+ say @result.join(" → ");
+}
+ \ No newline at end of file
diff --git a/challenge-059/arne-sommer/raku/ch-2.p6 b/challenge-059/arne-sommer/raku/ch-2.p6
new file mode 100755
index 0000000000..89962b4271
--- /dev/null
+++ b/challenge-059/arne-sommer/raku/ch-2.p6
@@ -0,0 +1,20 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@numbers where @numbers.elems > 1 && all(@numbers) ~~ Int,
+ :$verbose);
+
+my $grand-total;
+
+for @numbers.combinations(2) -> $list
+{
+ my $sum = bit-diff(|$list);
+ say ": $list -> $sum" if $verbose;
+ $grand-total += $sum;
+}
+
+say $grand-total;
+
+sub bit-diff (Int $a, Int $b)
+{
+ return ($a +^ $b).base(2).comb.sum;