aboutsummaryrefslogtreecommitdiff
path: root/challenge-049
diff options
context:
space:
mode:
authorRoger Bell_West <roger@firedrake.org>2020-02-24 11:14:18 +0000
committerRoger Bell_West <roger@firedrake.org>2020-02-24 11:14:18 +0000
commit616e0343c827345b5afcefe862fc8887ad478dcf (patch)
tree7b1529cf9e6ac9fa82e9c7a77fa7f6c7517f3e63 /challenge-049
parent5734596d7d7d0620a856b03ddd375aca18df1ab2 (diff)
downloadperlweeklychallenge-club-616e0343c827345b5afcefe862fc8887ad478dcf.tar.gz
perlweeklychallenge-club-616e0343c827345b5afcefe862fc8887ad478dcf.tar.bz2
perlweeklychallenge-club-616e0343c827345b5afcefe862fc8887ad478dcf.zip
Solution for challenge #49.
Diffstat (limited to 'challenge-049')
-rwxr-xr-xchallenge-049/roger-bell-west/perl5/ch-1.pl16
-rw-r--r--challenge-049/roger-bell-west/perl5/ch-2.pl57
-rwxr-xr-xchallenge-049/roger-bell-west/perl6/ch-1.p614
-rw-r--r--challenge-049/roger-bell-west/perl6/ch-2.p641
4 files changed, 128 insertions, 0 deletions
diff --git a/challenge-049/roger-bell-west/perl5/ch-1.pl b/challenge-049/roger-bell-west/perl5/ch-1.pl
new file mode 100755
index 0000000000..ef8580eb83
--- /dev/null
+++ b/challenge-049/roger-bell-west/perl5/ch-1.pl
@@ -0,0 +1,16 @@
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+
+foreach my $n (@ARGV) {
+ my $t=$n;
+ while (1) {
+ if ($t =~ /^[01]+$/) {
+ print "$t\n";
+ last;
+ } else {
+ $t+=$n;
+ }
+ }
+}
diff --git a/challenge-049/roger-bell-west/perl5/ch-2.pl b/challenge-049/roger-bell-west/perl5/ch-2.pl
new file mode 100644
index 0000000000..ae7df2d514
--- /dev/null
+++ b/challenge-049/roger-bell-west/perl5/ch-2.pl
@@ -0,0 +1,57 @@
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+
+my $q=Local::LRU->new($ARGV[0] || 3);
+$q->set(1,3);
+$q->set(2,5);
+$q->set(3,7);
+print $q->get(2)," = 5\n";
+print $q->get(1)," = 3\n";
+print $q->get(4)," = -1\n";
+$q->set(4,9);
+print $q->get(3)," = -1\n";
+
+package Local::LRU;
+
+sub new {
+ my $class = shift;
+ my $self={};
+ $self->{size}=shift || 3;
+ $self->{store}={};
+ $self->{lru}=[];
+ bless $self,$class;
+ return $self;
+}
+
+sub set {
+ my $self=shift;
+ my $k=shift;
+ my $v=shift;
+ $self->{store}{$k}=$v;
+ $self->update_lru($k);
+ if (scalar @{$self->{lru}} > $self->{size}) {
+ delete $self->{store}{$self->{lru}[0]};
+ shift @{$self->{lru}};
+ }
+}
+
+sub get {
+ my $self=shift;
+ my $k=shift;
+ if (exists $self->{store}{$k}) {
+ $self->update_lru($k);
+ return $self->{store}{$k};
+ } else {
+ return -1;
+ }
+}
+
+sub update_lru {
+ my $self=shift;
+ my $k=shift;
+ my @l=grep {$_ != $k} @{$self->{lru}};
+ push @l,$k;
+ @{$self->{lru}}=@l;
+}
diff --git a/challenge-049/roger-bell-west/perl6/ch-1.p6 b/challenge-049/roger-bell-west/perl6/ch-1.p6
new file mode 100755
index 0000000000..16453539a4
--- /dev/null
+++ b/challenge-049/roger-bell-west/perl6/ch-1.p6
@@ -0,0 +1,14 @@
+#! /usr/bin/perl6
+
+
+for @*ARGS -> $n {
+ my $t=$n;
+ while (1) {
+ if ($t ~~ /^<[01]>+$/) {
+ say $t;
+ last;
+ } else {
+ $t+=$n;
+ }
+ }
+}
diff --git a/challenge-049/roger-bell-west/perl6/ch-2.p6 b/challenge-049/roger-bell-west/perl6/ch-2.p6
new file mode 100644
index 0000000000..2e89a239c6
--- /dev/null
+++ b/challenge-049/roger-bell-west/perl6/ch-2.p6
@@ -0,0 +1,41 @@
+#! /usr/bin/perl6
+
+class LRU {
+ has Int $.size;
+ has %!store;
+ has @!lru;
+
+ method set(Int $k, Int $v) {
+ %!store{$k}=$v;
+ self.update_lru($k);
+ if @!lru.elems > $.size {
+ %!store{@!lru[0]}:delete;
+ @!lru.shift;
+ }
+ }
+
+ method get(Int $k) {
+ if %!store{$k}:exists {
+ self.update_lru($k);
+ return %!store{$k};
+ } else {
+ return -1;
+ }
+ }
+
+ method update_lru(Int $k) {
+ my @l=grep {$_ != $k}, @!lru;
+ @l.push($k);
+ @!lru=@l;
+ }
+}
+
+my $q=LRU.new(size => (@*ARGS[0] or 3));
+$q.set(1,3);
+$q.set(2,5);
+$q.set(3,7);
+print $q.get(2)," = 5\n";
+print $q.get(1)," = 3\n";
+print $q.get(4)," = -1\n";
+$q.set(4,9);
+print $q.get(3)," = -1\n";