aboutsummaryrefslogtreecommitdiff
path: root/challenge-059
diff options
context:
space:
mode:
authorJaldhar H. Vyas <jaldhar@braincells.com>2020-08-16 01:07:54 -0400
committerJaldhar H. Vyas <jaldhar@braincells.com>2020-08-16 01:07:54 -0400
commitc5a6037568368e9b79111f30ee13398ecb113245 (patch)
treecead7a618cf89b387f73579bd6a798e29bfcb8ff /challenge-059
parent050694a6678b9eb09149d807d314b6552e83f717 (diff)
downloadperlweeklychallenge-club-c5a6037568368e9b79111f30ee13398ecb113245.tar.gz
perlweeklychallenge-club-c5a6037568368e9b79111f30ee13398ecb113245.tar.bz2
perlweeklychallenge-club-c5a6037568368e9b79111f30ee13398ecb113245.zip
Challenge 59 by Jaldhar H. Vyas
Diffstat (limited to 'challenge-059')
-rw-r--r--challenge-059/jaldhar-h-vyas/blog.txt1
-rwxr-xr-xchallenge-059/jaldhar-h-vyas/perl/ch-1.pl147
-rwxr-xr-xchallenge-059/jaldhar-h-vyas/perl/ch-2.pl60
-rwxr-xr-xchallenge-059/jaldhar-h-vyas/raku/ch-1.p6115
-rwxr-xr-xchallenge-059/jaldhar-h-vyas/raku/ch-2.p619
5 files changed, 342 insertions, 0 deletions
diff --git a/challenge-059/jaldhar-h-vyas/blog.txt b/challenge-059/jaldhar-h-vyas/blog.txt
new file mode 100644
index 0000000000..082f88ede5
--- /dev/null
+++ b/challenge-059/jaldhar-h-vyas/blog.txt
@@ -0,0 +1 @@
+https://www.braincells.com/perl/2020/08/perl_weekly_challenge_week_59.html
diff --git a/challenge-059/jaldhar-h-vyas/perl/ch-1.pl b/challenge-059/jaldhar-h-vyas/perl/ch-1.pl
new file mode 100755
index 0000000000..9783414253
--- /dev/null
+++ b/challenge-059/jaldhar-h-vyas/perl/ch-1.pl
@@ -0,0 +1,147 @@
+#!/usr/bin/perl
+use 5.020;
+
+
+package LinkedList {
+ use Moo;
+ use namespace::autoclean;
+
+ package LinkedList::Node {
+ use Moo;
+ use namespace::autoclean;
+
+ has _value => (
+ is => 'rw',
+ );
+
+ has _next => (
+ is => 'rw',
+ isa => sub { return ref eq 'LinkedList::Node'; },
+ );
+
+ sub BUILDARGS {
+ my ($orig, $class, @args) = @_;
+
+ return { _value => $args[0], _next => undef };
+ }
+ }
+
+ has _head => (
+ is => 'ro',
+ isa => sub { return ref eq 'LinkedList::Node'; },
+ );
+
+ sub BUILDARGS {
+ my ($orig, $class, @args) = @_;
+
+ return { _head => undef };
+ }
+
+ sub add {
+ my ($self, $newval) = @_;
+
+ my $v = $self->{_head};
+
+ if ($v) {
+ while ($v->{_next}) {
+ $v = $v->{_next};
+ }
+ $v->{_next} = LinkedList::Node->new(value => $newval);
+ } else {
+ $self->{_head} = LinkedList::Node->new(value => $newval);
+ }
+
+ $self->{_count}++;
+ }
+
+ sub print {
+ my ($self) = @_;
+
+ my $v = $self->{_head};
+
+ while ($v) {
+ print $v->{_value} // q{}, q{ };
+ $v = $v->{_next};
+ }
+
+ print "\n";
+ }
+
+ sub attach {
+ my ($self, $node) = @_;
+
+ my $v = $self->{_head};
+
+ if ($v) {
+ while ($v->{_next}) {
+ $v = $v->{_next};
+ }
+ $v->{_next} = $node;
+ } else {
+ $self->{_head} = $node;
+ }
+ }
+
+ sub merge {
+ my ($self, $list) = @_;
+
+ my $v = $self->{_head};
+
+ if ($v) {
+ while ($v->{_next}) {
+ $v = $v->{_next};
+ }
+ $v->{_next} = $list->{_head};
+ } else {
+ $self->{_head} = $list->{_head};
+ }
+ }
+
+ sub partition {
+ my ($self, $k) = @_;
+
+ my $higher = LinkedList->new();
+ my $lower = LinkedList->new();
+ my $same = LinkedList->new();
+
+ my $v = $self->{_head};
+
+ while ($v) {
+ my $node = $v;
+ $v = $v->{_next};
+ $node->{_next} = undef;
+
+ if ($node->{_value} < $k) {
+ $lower->attach($node);
+ } elsif ($node->{_value} > $k) {
+ $higher->attach($node);
+ } else {
+ $same->attach($node);
+ }
+ }
+
+ if ($self->{_head}) {
+ $self->{_head} = undef;
+ }
+
+ $self->merge($lower);
+ $self->merge($same);
+ $self->merge($higher);
+ }
+
+}
+
+package main;
+use 5.020;
+use warnings;
+
+my $linked_list = LinkedList->new();
+$linked_list->add(1);
+$linked_list->add(4);
+$linked_list->add(3);
+$linked_list->add(2);
+$linked_list->add(5);
+$linked_list->add(2);
+
+$linked_list->partition(3);
+$linked_list->print(); \ No newline at end of file
diff --git a/challenge-059/jaldhar-h-vyas/perl/ch-2.pl b/challenge-059/jaldhar-h-vyas/perl/ch-2.pl
new file mode 100755
index 0000000000..1a4f777a2f
--- /dev/null
+++ b/challenge-059/jaldhar-h-vyas/perl/ch-2.pl
@@ -0,0 +1,60 @@
+#!/usr/bin/perl
+use 5.020;
+use warnings;
+use English qw/ -no_match_vars /;
+
+sub usage {
+ print<<"-USAGE-";
+Usage:
+ $PROGRAM_NAME [<ARGS> ...]
+-USAGE-
+
+ exit(0);
+}
+
+sub combinations {
+ my @list = @{$_[0]};
+ my $length = $_[1];
+
+ if ($length <= 1) {
+ return map [$_], @list;
+ }
+
+ my @combos;
+
+ for (my $i = 0; $i + $length <= scalar @list; $i++) {
+ my $val = $list[$i];
+ my @rest = @list[$i + 1 .. $#list];
+ for my $c (combinations(\@rest, $length - 1)) {
+ push @combos, [$val, @{$c}] ;
+ }
+ }
+
+ return @combos;
+}
+
+sub f {
+ my ($a, $b) = @_;
+ my $c = 0 + sprintf("%b", $a);
+ my $d = 0 + sprintf("%b", $b);
+
+ if (length $c > length $d) {
+ $d = sprintf("%0*d", length $c, $d);
+ } elsif (length $d > length $c) {
+ $c = sprintf("%0*d", length $d, $c);
+ }
+ return ($c ^ $d) =~ tr/1/1/;
+}
+
+if (scalar @ARGV < 1) {
+ usage();
+}
+
+my $total = 0;
+
+for my $a (combinations(\@ARGV, 2)) {
+ $total += f($a->[0], $a->[1]);
+}
+
+say $total;
+ \ No newline at end of file
diff --git a/challenge-059/jaldhar-h-vyas/raku/ch-1.p6 b/challenge-059/jaldhar-h-vyas/raku/ch-1.p6
new file mode 100755
index 0000000000..eac2c3b517
--- /dev/null
+++ b/challenge-059/jaldhar-h-vyas/raku/ch-1.p6
@@ -0,0 +1,115 @@
+#!/usr/bin/perl6
+
+class LinkedList {
+
+ class Node {
+ has $.value is rw;
+ has Node $.next is rw;
+
+ submethod BUILD( :$value) {
+ $!value = $value;
+ $!next = Nil;
+ }
+ }
+
+ has Node $.head is rw;
+
+
+ submethod BUILD() {
+ self.head = Nil;
+ }
+
+ method add($newval) {
+ my $v = $.head;
+
+ if $v {
+ while $v.next {
+ $v = $v.next;
+ }
+ $v.next = Node.new(value => $newval);
+ } else {
+ $.head = Node.new(value => $newval);
+ }
+ }
+
+ method print() {
+ my $v = $.head;
+
+ while $v {
+ print $v.value // q{}, q{ };
+ $v = $v.next;
+ }
+
+ print "\n";
+ }
+
+ method attach(Node $node) {
+ my $v = $.head;
+
+ if $v {
+ while $v.next {
+ $v = $v.next;
+ }
+ $v.next = $node;
+ } else {
+ $.head = $node;
+ }
+ }
+
+ method merge(LinkedList $n) {
+ my $v = $.head;
+
+ if $v {
+ while $v.next {
+ $v = $v.next;
+ }
+ $v.next = $n.head;
+ } else {
+ $.head = $n.head;
+ }
+ }
+
+ method partition(Int $k) {
+ my $higher = LinkedList.new();
+ my $lower = LinkedList.new();
+ my $same = LinkedList.new();
+
+ my $v = $.head;
+
+ while $v {
+ my $node = $v;
+ $v = $v.next;
+ $node.next = Nil;
+
+ if ($node.value < $k) {
+ $lower.attach($node);
+ } elsif ($node.value > $k) {
+ $higher.attach($node);
+ } else {
+ $same.attach($node);
+ }
+ }
+
+ if ($.head) {
+ $.head = Nil;
+ }
+
+ self.merge($lower);
+ self.merge($same);
+ self.merge($$higher);
+ }
+}
+
+sub MAIN() {
+ my $linked_list = LinkedList.new();
+ $linked_list.add(1);
+ $linked_list.add(4);
+ $linked_list.add(3);
+ $linked_list.add(2);
+ $linked_list.add(5);
+ $linked_list.add(2);
+
+ $linked_list.partition(3);
+
+ $linked_list.print();
+} \ No newline at end of file
diff --git a/challenge-059/jaldhar-h-vyas/raku/ch-2.p6 b/challenge-059/jaldhar-h-vyas/raku/ch-2.p6
new file mode 100755
index 0000000000..f827466949
--- /dev/null
+++ b/challenge-059/jaldhar-h-vyas/raku/ch-2.p6
@@ -0,0 +1,19 @@
+#!/usr/bin/perl6
+
+sub f($a, $b) {
+ my $c = ($a+0).base(2);
+ my $d = ($b+0).base(2);
+
+ if ($c.chars > $d.chars) {
+ $d = sprintf("%0*d", $c.chars, $d);
+ } elsif ($d.chars > $c.chars) {
+ $c = sprintf("%0*d", $d.chars, $c);
+ }
+
+ return ($c +^ $d ~~ m:g/ 1 /).elems;
+}
+
+sub MAIN(*@ARGS where { @*ARGS.elems > 0; }) {
+
+ say [+] @*ARGS.combinations(2).map({ f(@_[0], @_[1]); });
+ } \ No newline at end of file