diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-05-04 09:19:12 +0100 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-05-04 09:19:12 +0100 |
| commit | 856f56ef0cfd271b4c82090f140f65ce163ea709 (patch) | |
| tree | 280fc1f6579071a15739cbb15541d4999992106d /challenge-059/javier-luque/raku | |
| parent | 67cdd35efcf8c026c738ede53dcf8662282fbe29 (diff) | |
| download | perlweeklychallenge-club-856f56ef0cfd271b4c82090f140f65ce163ea709.tar.gz perlweeklychallenge-club-856f56ef0cfd271b4c82090f140f65ce163ea709.tar.bz2 perlweeklychallenge-club-856f56ef0cfd271b4c82090f140f65ce163ea709.zip | |
- Added solutions by Javier Luque.
Diffstat (limited to 'challenge-059/javier-luque/raku')
| -rw-r--r-- | challenge-059/javier-luque/raku/ch-1.p6 | 104 | ||||
| -rw-r--r-- | challenge-059/javier-luque/raku/ch-2.p6 | 26 |
2 files changed, 130 insertions, 0 deletions
diff --git a/challenge-059/javier-luque/raku/ch-1.p6 b/challenge-059/javier-luque/raku/ch-1.p6 new file mode 100644 index 0000000000..ca4849b3a3 --- /dev/null +++ b/challenge-059/javier-luque/raku/ch-1.p6 @@ -0,0 +1,104 @@ +# Test: perl6 ch-1.p6 +class LinkedList::Node { + has Int $.value is rw; + has LinkedList::Node $.next is rw; +} + +class LinkedList { + has LinkedList::Node $.first is rw; + + # Create the list + method create-list(*@values) { + my $prev_node; + + # Populate the list + for @values -> $value { + my $node = LinkedList::Node.new(value => $value); + + # Populate first and next nodes + if ($prev_node) { + $prev_node.next = $node + } else { + self.first = $node; + } + + # Next node + $prev_node = $node; + } + } + + method partition_list(Int $k) { + # Temp variables to store node locations + my $k_node_current; + my $k_node_first; + my $before_node_current; + my $before_node_first; + my $after_node_current; + my $after_node_first; + + # Loop through the nodes + my $node = self.first; + while ($node) { + if ($node.value == $k) { + if ($k_node_current) { + $k_node_current.next = $node; + $k_node_current = $node; + } else { + $k_node_first = $node; + $k_node_current = $node; + } + } + + # Process the nodex lower than k + if ($node.value < $k) { + if ($before_node_current) { + $before_node_current.next = $node; + $before_node_current = $node; + } else { + $before_node_first = $node; + $before_node_current = $node; + } + } + + # Process the nodex higher than k + if ($node.value > $k) { + if ($after_node_current) { + $after_node_current.next = $node; + $after_node_current = $node; + } else { + $after_node_first = $node; + $after_node_current = $node; + } + } + + $node = $node.next; + } + + # link the chains + self.first = $before_node_first; + $before_node_current.next = $k_node_first; + $k_node_current.next = $after_node_first; + $after_node_current.next = Nil; + } + + method display-list { + my $node = self.first; + my @keys; + + while ($node) { + @keys.push($node.value); + $node = $node.next; + } + + return @keys.join(" → "); + } +} + + +sub MAIN() { + my $ll = LinkedList.new(); + $ll.create-list(1,4,3,2,5,2); + say 'Before: ' ~ $ll.display-list; + $ll.partition_list(3); + say 'After: ' ~ $ll.display-list; +} diff --git a/challenge-059/javier-luque/raku/ch-2.p6 b/challenge-059/javier-luque/raku/ch-2.p6 new file mode 100644 index 0000000000..707105dd9a --- /dev/null +++ b/challenge-059/javier-luque/raku/ch-2.p6 @@ -0,0 +1,26 @@ +# Test: perl6 ch-2.p6 2 3 4 +sub MAIN(*@ARGV) { + my @combos = @ARGV.combinations: 2; + my $answer = 0; + + for @combos -> $combo { + $answer += f($combo[0], $combo[1]); + } + + say $answer; +} + +sub f(Int $a, Int $b) { + return calculate-true-bits($a +^ $b); +} + +# Calculate the number of true bits +sub calculate-true-bits(Int $n is copy) { + my $count = 0; + + repeat { + $count++ if ($n +& 1); + } while ($n = $n +> 1); + + return $count; +} |
