diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-02-28 11:30:27 +0000 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-02-28 11:30:27 +0000 |
| commit | 4a0e7a230f9da4ca47237cf6323ff3fb07757889 (patch) | |
| tree | 11b28103eb4c8237f602b8ff1443db5814992e93 | |
| parent | fe605e08c124df72a5c90e37c2f661e3f65eef7c (diff) | |
| download | perlweeklychallenge-club-4a0e7a230f9da4ca47237cf6323ff3fb07757889.tar.gz perlweeklychallenge-club-4a0e7a230f9da4ca47237cf6323ff3fb07757889.tar.bz2 perlweeklychallenge-club-4a0e7a230f9da4ca47237cf6323ff3fb07757889.zip | |
- Added solutions by Javier Luque.
| -rw-r--r-- | challenge-049/javier-luque/blog.txt | 1 | ||||
| -rw-r--r-- | challenge-049/javier-luque/perl/ch-1.pl | 20 | ||||
| -rw-r--r-- | challenge-049/javier-luque/perl/ch-2.pl | 197 | ||||
| -rw-r--r-- | challenge-049/javier-luque/raku/ch-1.p6 | 13 | ||||
| -rw-r--r-- | challenge-049/javier-luque/raku/ch-2.p6 | 116 | ||||
| -rw-r--r-- | stats/pwc-current.json | 163 | ||||
| -rw-r--r-- | stats/pwc-language-breakdown-summary.json | 74 | ||||
| -rw-r--r-- | stats/pwc-language-breakdown.json | 364 | ||||
| -rw-r--r-- | stats/pwc-leaders.json | 378 | ||||
| -rw-r--r-- | stats/pwc-summary-1-30.json | 110 | ||||
| -rw-r--r-- | stats/pwc-summary-121-150.json | 50 | ||||
| -rw-r--r-- | stats/pwc-summary-151-180.json | 52 | ||||
| -rw-r--r-- | stats/pwc-summary-31-60.json | 118 | ||||
| -rw-r--r-- | stats/pwc-summary-61-90.json | 50 | ||||
| -rw-r--r-- | stats/pwc-summary-91-120.json | 98 | ||||
| -rw-r--r-- | stats/pwc-summary.json | 356 |
16 files changed, 1265 insertions, 895 deletions
diff --git a/challenge-049/javier-luque/blog.txt b/challenge-049/javier-luque/blog.txt new file mode 100644 index 0000000000..5715fb6b7b --- /dev/null +++ b/challenge-049/javier-luque/blog.txt @@ -0,0 +1 @@ +https://perlchallenges.wordpress.com/2020/02/28/perl-weekly-challenge-049/ diff --git a/challenge-049/javier-luque/perl/ch-1.pl b/challenge-049/javier-luque/perl/ch-1.pl new file mode 100644 index 0000000000..4f98ad3ec4 --- /dev/null +++ b/challenge-049/javier-luque/perl/ch-1.pl @@ -0,0 +1,20 @@ +#!/usr/bin/perl +# Test: ./ch-1.pl 55 +use strict; +use warnings; +use feature qw /say/; + +my $number = join '', @ARGV; + +unless ($number =~ /^\d*$/) { + say "Argument: $number needs to be a number"; + exit; +} + +my $i = 1; +my $new_number = $number; +while (!($new_number =~ /^[01]+$/)) { + $new_number = $number * $i++; +} + +say "Smallest multiple of $number is $new_number"; diff --git a/challenge-049/javier-luque/perl/ch-2.pl b/challenge-049/javier-luque/perl/ch-2.pl new file mode 100644 index 0000000000..ffb1c7ede1 --- /dev/null +++ b/challenge-049/javier-luque/perl/ch-2.pl @@ -0,0 +1,197 @@ +#!/usr/bin/perl +# Test: ./ch-2.pl 3 +package LL::Node; # Linked list + +use Mouse; + +has 'key' => ( + is => 'rw', + isa => 'Int', + default => sub { + return undef; + } +); + +has 'value' => ( + is => 'rw', + isa => 'Str', + default => sub { + return undef; + } +); + +has 'next' => ( + is => 'rw', + isa => 'Maybe[LL::Node]', + default => sub { + return undef + } +); + +has 'prev' => ( + is => 'rw', + isa => 'Maybe[LL::Node]', + default => sub { + return undef + } +); + + +__PACKAGE__->meta->make_immutable(); + +package Cache::LRU; # LRU Cache + +use Mouse; +use feature qw /say/; +use LL::Node; + +has 'max_capacity' => ( + is => 'rw', + isa => 'Int', + default => sub { + return 3; + } +); + +has 'capacity' => ( + is => 'rw', + isa => 'Int', + default => sub { + return 0; + } +); + +has 'positions' => ( + is => 'rw', + isa => 'HashRef', + default => sub { + return {} + } +); + +has 'last' => ( + is => 'rw', + isa => 'Ref', +); + + +has 'first' => ( + is => 'rw', + isa => 'Ref', +); + + + +sub set { + my ($self, $key, $value) = @_; + + # New node + my $new_node = LL::Node->new( + key => $key, value => $value + ); + + # Push out 1 if at capacity + if ($self->capacity >= $self->max_capacity) { + my $node_to_kill = $self->first; + $self->first($self->first->next); + delete $self->positions->{$node_to_kill->key}; + $self->capacity($self->capacity - 1); + } + + # Set the first and last reference to the new node + if ( $self->first ) { + $self->last->next($new_node); + $new_node->prev($self->last); + } else { + $self->first($new_node); + } + + # Last node + $self->last($new_node); + + # Store the position + $self->positions->{$key} = $new_node; + + # Increment capacity + $self->capacity($self->capacity + 1); + + say "Setting: ($key, $value)" . $self->show_nodes; +} + + +sub get { + my ($self, $key) = @_; + + my $node = $self->positions->{$key}; + + # Cache miss + unless ($node) { + say "Getting: ($key) - cache miss" . + $self->show_nodes; + + # Return the cache miss -1 + return -1; + } + + # This might be the first node + if ($node->prev) { + $node->prev->next($node->next) + } else { + $self->first($node->next); + } + + # Change this node previous to last + $node->prev($self->last); + + # Set the last's next to this node + $self->last->next($node); + + # clear the node's next as it will be last + $node->next(undef); + + # Set to LRU last pointer to this + $self->last($node); + + # Get the value + my $value = $node->value; + + say "Getting: ($key) Value: $value)" . $self->show_nodes; + return $node->value; +} + + + +sub show_nodes { + my $self = shift; + my @keys; + + my $node = $self->first; + + while ($node) { + push @keys, $node->key; + $node = $node->next; + } + + return " [LRU] - " . (join ',', @keys) . " - [MRU]"; +} + + +__PACKAGE__->meta->make_immutable(); + +package main; + +use strict; +use warnings; +use Cache::LRU; + +my $max_capacity = my $number = join '', @ARGV; +my $cache = Cache::LRU->new(max_capacity => $max_capacity || 3); + +$cache->set(1, 3); +$cache->set(2, 5); +$cache->set(3, 7); +$cache->get(2); # returns 5 +$cache->get(1); # returns 3 +$cache->get(4); # returns -1 +$cache->set(4, 9); +$cache->get(3); # returns -1 diff --git a/challenge-049/javier-luque/raku/ch-1.p6 b/challenge-049/javier-luque/raku/ch-1.p6 new file mode 100644 index 0000000000..8c16f51e26 --- /dev/null +++ b/challenge-049/javier-luque/raku/ch-1.p6 @@ -0,0 +1,13 @@ +# Test: perl6 ch-1.p6 55 + +sub MAIN(Int $number) { + my $i = 1; + + my $new_number = $number; + while (!($new_number ~~ /^^<[01]>+$$/)) { + $new_number = $number * $i++; + } + + say "Smallest multiple of $number is $new_number"; + +} diff --git a/challenge-049/javier-luque/raku/ch-2.p6 b/challenge-049/javier-luque/raku/ch-2.p6 new file mode 100644 index 0000000000..55ebdc183f --- /dev/null +++ b/challenge-049/javier-luque/raku/ch-2.p6 @@ -0,0 +1,116 @@ +# Test: perl6 ch-2.p6 3 +use v6.d; + +class Node { + has Int $.key is rw; + has Int $.value is rw; + has Node $.next is rw; + has Node $.prev is rw; +} + +class LRU { + has Node $.first is rw; + has Node $.last is rw; + has %.positions is rw; + has Int $.max_capacity is rw; + has Int $.capacity is rw = 0; + + method set(Int $key, Int $value) { + my $new_node = Node.new( + key => $key, + value => $value, + next => Nil, + prev => Nil + ); + + # Push out 1 if at capacity + if (self.capacity >= self.max_capacity) { + my $node-to-kill = self.first; + self.first = self.first.next; + self.positions.{$node-to-kill.key}:delete; + self.capacity = self.capacity - 1; + } + + # Set the first and last reference to the new node + if ( self.first ) { + self.last.next = $new_node; + $new_node.prev = self.last; + } else { + self.first = $new_node; + } + + # Last node + self.last = $new_node; + + # Store the position + self.positions.{$key} = $new_node; + + # Increment capacity + self.capacity = self.capacity + 1; + + say "Setting: ($key, $value)" ~ self.show_nodes; + } + + method get(Int $key) { + my $node = self.positions.{$key}; + + # Cache miss + unless ($node) { + say "Getting: ($key) - cache miss" ~ + self.show_nodes; + + # Return the cache miss -1 + return -1; + } + + # This might be the first node + if ($node.prev) { + $node.prev.next = $node.next; + } else { + self.first = $node.next; + } + + # Change this node previous to last + $node.prev = self.last; + + # Set the last's next to this node + self.last.next = $node; + + # clear the node's next as it will be last + $node.next = Nil; + + # Set to LRU last pointer to this + self.last = $node; + + # Get the value + my $value = $node.value; + + say "Getting: ($key) Value: $value)" ~ + self.show_nodes; + return $node.value; + } + + method show_nodes() { + my @keys; + my $node = self.first; + + while ($node) { + push @keys, $node.key; + $node = $node.next; + } + + return " [LRU] - " ~ @keys.join(',') ~ " - [MRU]"; + } +} + +sub MAIN (Int $max_capacity) { + my $cache = LRU.new( max_capacity => $max_capacity ); + $cache.set(1, 3); + $cache.set(2, 5); + $cache.set(3, 7); + $cache.get(2); # returns 5 + $cache.get(1); # returns 3 + $cache.get(4); # returns -1 + $cache.set(4, 9); + $cache.get(3); # returns -1 +} diff --git a/stats/pwc-current.json b/stats/pwc-current.json index 05e5d15d9c..89c87fcbde 100644 --- a/stats/pwc-current.json +++ b/stats/pwc-current.json @@ -1,11 +1,33 @@ { - "subtitle" : { - "text" : "[Champions: 14] Last updated at 2020-02-28 10:59:35 GMT" + "yAxis" : { + "title" : { + "text" : "Total Solutions" + } + }, + "chart" : { + "type" : "column" + }, + "tooltip" : { + "followPointer" : 1, + "headerFormat" : "<span style='font-size:11px'>{series.name}</span><br/>", + "pointFormat" : "<span style='color:{point.color}'>{point.name}</span>: <b>{point.y:f}</b><br/>" + }, + "plotOptions" : { + "series" : { + "borderWidth" : 0, + "dataLabels" : { + "format" : "{point.y}", + "enabled" : 1 + } + } + }, + "legend" : { + "enabled" : 0 }, "series" : [ { - "name" : "Perl Weekly Challenge - 049", "colorByPoint" : 1, + "name" : "Perl Weekly Challenge - 049", "data" : [ { "drilldown" : "Dave Jacoby", @@ -13,39 +35,44 @@ "y" : 1 }, { - "name" : "Duane Powell", "y" : 2, + "name" : "Duane Powell", "drilldown" : "Duane Powell" }, { - "drilldown" : "E. Choroba", "y" : 2, - "name" : "E. Choroba" + "name" : "E. Choroba", + "drilldown" : "E. Choroba" + }, + { + "name" : "Javier Luque", + "drilldown" : "Javier Luque", + "y" : 5 }, { + "y" : 1, "drilldown" : "Jonas Berlin", - "name" : "Jonas Berlin", - "y" : 1 + "name" : "Jonas Berlin" }, { - "drilldown" : "Luca Ferrari", "name" : "Luca Ferrari", + "drilldown" : "Luca Ferrari", "y" : 4 }, { "drilldown" : "Mark Anderson", - "y" : 2, - "name" : "Mark Anderson" + "name" : "Mark Anderson", + "y" : 2 }, { + "name" : "Markus Holzer", "drilldown" : "Markus Holzer", - "y" : 1, - "name" : "Markus Holzer" + "y" : 1 }, { - "name" : "Mohammad S Anwar", "y" : 4, - "drilldown" : "Mohammad S Anwar" + "drilldown" : "Mohammad S Anwar", + "name" : "Mohammad S Anwar" }, { "y" : 1, @@ -54,18 +81,18 @@ }, { "drilldown" : "Roger Bell West", - "y" : 4, - "name" : "Roger Bell West" + "name" : "Roger Bell West", + "y" : 4 }, { - "drilldown" : "Saif Ahmed", + "y" : 2, "name" : "Saif Ahmed", - "y" : 2 + "drilldown" : "Saif Ahmed" }, { + "y" : 3, "drilldown" : "Simon Proctor", - "name" : "Simon Proctor", - "y" : 3 + "name" : "Simon Proctor" }, { "y" : 2, @@ -73,67 +100,75 @@ "drilldown" : "Wanderdoc" }, { - "name" : "Yet Ebreo", "y" : 2, - "drilldown" : "Yet Ebreo" + "drilldown" : "Yet Ebreo", + "name" : "Yet Ebreo" } ] } ], - "chart" : { - "type" : "column" - }, - "tooltip" : { - "pointFormat" : "<span style='color:{point.color}'>{point.name}</span>: <b>{point.y:f}</b><br/>", - "headerFormat" : "<span style='font-size:11px'>{series.name}</span><br/>", - "followPointer" : 1 - }, - "yAxis" : { - "title" : { - "text" : "Total Solutions" - } + "title" : { + "text" : "Perl Weekly Challenge - 049" }, "drilldown" : { "series" : [ { - "name" : "Dave Jacoby", - "id" : "Dave Jacoby", "data" : [ [ "Perl", 1 ] - ] + ], + "id" : "Dave Jacoby", + "name" : "Dave Jacoby" }, { - "name" : "Duane Powell", - "id" : "Duane Powell", "data" : [ [ "Perl", 2 ] - ] + ], + "id" : "Duane Powell", + "name" : "Duane Powell" }, { - "name" : "E. Choroba", "data" : [ [ "Perl", 2 ] ], - "id" : "E. Choroba" + "id" : "E. Choroba", + "name" : "E. Choroba" }, { "data" : [ [ + "Perl", + 2 + ], + [ "Raku", + 2 + ], + [ + "Blog", 1 ] ], + "id" : "Javier Luque", + "name" : "Javier Luque" + }, + { + "name" : "Jonas Berlin", "id" : "Jonas Berlin", - "name" : "Jonas Berlin" + "data" : [ + [ + "Raku", + 1 + ] + ] }, { "name" : "Luca Ferrari", @@ -151,23 +186,23 @@ }, { "name" : "Mark Anderson", - "id" : "Mark Anderson", "data" : [ [ "Raku", 2 ] - ] + ], + "id" : "Mark Anderson" }, { - "name" : "Markus Holzer", "id" : "Markus Holzer", "data" : [ [ "Raku", 1 ] - ] + ], + "name" : "Markus Holzer" }, { "data" : [ @@ -188,14 +223,14 @@ "name" : "Mohammad S Anwar" }, { - "id" : "Peter Scott", + "name" : "Peter Scott", "data" : [ [ "Perl", 1 ] ], - "name" : "Peter Scott" + "id" : "Peter Scott" }, { "id" : "Roger Bell West", @@ -212,13 +247,13 @@ "name" : "Roger Bell West" }, { + "id" : "Saif Ahmed", "data" : [ [ "Perl", 2 ] ], - "id" : "Saif Ahmed", "name" : "Saif Ahmed" }, { @@ -236,43 +271,31 @@ ] }, { - "name" : "Wanderdoc", - "id" : "Wanderdoc", "data" : [ [ "Perl", 2 ] - ] + ], + "id" : "Wanderdoc", + "name" : "Wanderdoc" }, { - "name" : "Yet Ebreo", "data" : [ [ "Perl", 2 ] ], - "id" : "Yet Ebreo" + "id" : "Yet Ebreo", + "name" : "Yet Ebreo" } ] }, - "legend" : { - "enabled" : 0 - }, - "title" : { - "text" : "Perl Weekly Challenge - 049" - }, "xAxis" : { "type" : "category" }, - "plotOptions" : { - "series" : { - "dataLabels" : { - "format" : "{point.y}", - "enabled" : 1 - }, - "borderWidth" : 0 - } + "subtitle" : { + "text" : "[Champions: 15] Last updated at 2020-02-28 11:30:03 GMT" } } diff --git a/stats/pwc-language-breakdown-summary.json b/stats/pwc-language-breakdown-summary.json index 0030e9958a..e2ed72106a 100644 --- a/stats/pwc-language-breakdown-summary.json +++ b/stats/pwc-language-breakdown-summary.json @@ -1,63 +1,63 @@ { + "legend" : { + "enabled" : "false" + }, + "tooltip" : { + "pointFormat" : "<b>{point.y:.0f}</b>" + }, "chart" : { "type" : "column" }, + "yAxis" : { + "min" : 0, + "title" : { + "text" : null + } + }, + "xAxis" : { + "type" : "category", + "labels" : { + "style" : { + "fontSize" : "13px", + "fontFamily" : "Verdana, sans-serif" + } + } + }, + "subtitle" : { + "text" : "Last updated at 2020-02-28 11:30:03 GMT" + }, + "title" : { + "text" : "Perl Weekly Challenge Contributions [2019 - 2020]" + }, "series" : [ { "data" : [ [ "Blog", - 522 + 523 ], [ "Perl", - 2025 + 2027 ], [ "Raku", - 1236 + 1238 ] ], + "name" : "Contributions", "dataLabels" : { - "rotation" : -90, - "enabled" : "true", + "y" : 10, "align" : "right", + "format" : "{point.y:.0f}", + "color" : "#FFFFFF", "style" : { "fontSize" : "13px", "fontFamily" : "Verdana, sans-serif" }, - "format" : "{point.y:.0f}", - "color" : "#FFFFFF", - "y" : 10 - }, - "name" : "Contributions" - } - ], - "subtitle" : { - "text" : "Last updated at 2020-02-28 10:59:35 GMT" - }, - "tooltip" : { - "pointFormat" : "<b>{point.y:.0f}</b>" - }, - "yAxis" : { - "title" : { - "text" : null - }, - "min" : 0 - }, - "title" : { - "text" : "Perl Weekly Challenge Contributions [2019 - 2020]" - }, - "xAxis" : { - "type" : "category", - "labels" : { - "style" : { - "fontSize" : "13px", - "fontFamily" : "Verdana, sans-serif" + "rotation" : -90, + "enabled" : "true" } } - }, - "legend" : { - "enabled" : "false" - } + ] } diff --git a/stats/pwc-language-breakdown.json b/stats/pwc-language-breakdown.json index 933925c3d2..f68764c727 100644 --- a/stats/pwc-language-breakdown.json +++ b/stats/pwc-language-breakdown.json @@ -1,6 +1,8 @@ { "series" : [ { + "name" : "Perl Weekly Challenge Languages", + "colorByPoint" : "true", "data" : [ { "y" : 140, @@ -8,49 +10,49 @@ "drilldown" : "001" }, { - "y" : 109, "name" : "#002", - "drilldown" : "002" + "drilldown" : "002", + "y" : 109 }, { - "drilldown" : "003", "y" : 71, - "name" : "#003" + "name" : "#003", + "drilldown" : "003" }, { "drilldown" : "004", - "y" : 91, - "name" : "#004" + "name" : "#004", + "y" : 91 }, { + "name" : "#005", "drilldown" : "005", - "y" : 71, - "name" : "#005" + "y" : 71 }, { - "y" : 48, "name" : "#006", - "drilldown" : "006" + "drilldown" : "006", + "y" : 48 }, { + "name" : "#007", "drilldown" : "007", - "y" : 56, - "name" : "#007" + "y" : 56 }, { - "name" : "#008", "y" : 70, - "drilldown" : "008" + "drilldown" : "008", + "name" : "#008" }, { "drilldown" : "009", - "y" : 68, - "name" : "#009" + "name" : "#009", + "y" : 68 }, { - "drilldown" : "010", "y" : 60, - "name" : "#010" + "name" : "#010", + "drilldown" : "010" }, { "y" : 79, @@ -58,44 +60,44 @@ "drilldown" : "011" }, { - "y" : 83, + "drilldown" : "012", "name" : "#012", - "drilldown" : "012" + "y" : 83 }, { "y" : 76, - "name" : "#013", - "drilldown" : "013" + "drilldown" : "013", + "name" : "#013" }, { + "drilldown" : "014", "name" : "#014", - "y" : 96, - "drilldown" : "014" + "y" : 96 }, { - "drilldown" : "015", + "y" : 93, "name" : "#015", - "y" : 93 + "drilldown" : "015" }, { - "drilldown" : "016", "y" : 66, + "drilldown" : "016", "name" : "#016" }, { "y" : 79, - "name" : "#017", - "drilldown" : "017" + "drilldown" : "017", + "name" : "#017" }, { + "drilldown" : "018", "name" : "#018", - "y" : 76, - "drilldown" : "018" + "y" : 76 }, { + "drilldown" : "019", "name" : "#019", - "y" : 95, - "drilldown" : "019" + "y" : 95 }, { "y" : 95, @@ -104,13 +106,13 @@ }, { "drilldown" : "021", - "y" : 67, - "name" : "#021" + "name" : "#021", + "y" : 67 }, { "name" : "#022", - "y" : 63, - "drilldown" : "022" + "drilldown" : "022", + "y" : 63 }, { "drilldown" : "023", @@ -119,83 +121,83 @@ }, { "name" : "#024", - "y" : 70, - "drilldown" : "024" + "drilldown" : "024", + "y" : 70 }, { - "y" : 55, + "drilldown" : "025", "name" : "#025", - "drilldown" : "025" + "y" : 55 }, { "drilldown" : "026", - "y" : 70, - "name" : "#026" + "name" : "#026", + "y" : 70 }, { - "y" : 58, + "drilldown" : "027", "name" : "#027", - "drilldown" : "027" + "y" : 58 }, { - "y" : 78, + "drilldown" : "028", "name" : "#028", - "drilldown" : "028" + "y" : 78 }, { + "name" : "#029", "drilldown" : "029", - "y" : 77, - "name" : "#029" + "y" : 77 }, { - "drilldown" : "030", "name" : "#030", + "drilldown" : "030", "y" : 115 }, { - "drilldown" : "031", + "y" : 87, "name" : "#031", - "y" : 87 + "drilldown" : "031" }, { - "drilldown" : "032", "y" : 92, + "drilldown" : "032", "name" : "#032" }, { + "drilldown" : "033", "name" : "#033", - "y" : 108, - "drilldown" : "033" + "y" : 108 }, { "y" : 62, - "name" : "#034", - "drilldown" : "034" + "drilldown" : "034", + "name" : "#034" }, { "name" : "#035", - "y" : 62, - "drilldown" : "035" + "drilldown" : "035", + "y" : 62 }, { - "drilldown" : "036", "y" : 63, - "name" : "#036" + "name" : "#036", + "drilldown" : "036" }, { "drilldown" : "037", - "y" : 63, - "name" : "#037" + "name" : "#037", + "y" : 63 }, { + "y" : 60, "drilldown" : "038", - "name" : "#038", - "y" : 60 + "name" : "#038" }, { + "drilldown" : "039", "name" : "#039", - "y" : 60, - "drilldown" : "039" + "y" : 60 }, { "drilldown" : "040", @@ -203,70 +205,66 @@ "y" : 66 |
