aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Anderson <mark@frontrangerunner.com>2020-02-26 14:34:13 -0700
committerMark Anderson <mark@frontrangerunner.com>2020-02-26 14:34:13 -0700
commit93245ed80b43e4008060848b35301c4bef504d8c (patch)
tree4ba70d3c050c6f77ac7426129f3fe9dedb67cbac
parent6fd74b2f430bede898418de695a2b020e5749a82 (diff)
downloadperlweeklychallenge-club-93245ed80b43e4008060848b35301c4bef504d8c.tar.gz
perlweeklychallenge-club-93245ed80b43e4008060848b35301c4bef504d8c.tar.bz2
perlweeklychallenge-club-93245ed80b43e4008060848b35301c4bef504d8c.zip
Challenge 49 Solutions
-rw-r--r--challenge-049/mark-anderson/raku/ch-1.p68
-rw-r--r--challenge-049/mark-anderson/raku/ch-2.p683
2 files changed, 91 insertions, 0 deletions
diff --git a/challenge-049/mark-anderson/raku/ch-1.p6 b/challenge-049/mark-anderson/raku/ch-1.p6
new file mode 100644
index 0000000000..37eef57c7e
--- /dev/null
+++ b/challenge-049/mark-anderson/raku/ch-1.p6
@@ -0,0 +1,8 @@
+#!/usr/bin/env perl6
+
+sub MAIN(Int $arg where $arg > 0) {
+ 1 .. Inf ==>
+ map { .fmt("%b") } ==>
+ first { $_ %% $arg } ==>
+ say();
+}
diff --git a/challenge-049/mark-anderson/raku/ch-2.p6 b/challenge-049/mark-anderson/raku/ch-2.p6
new file mode 100644
index 0000000000..abe7f8a143
--- /dev/null
+++ b/challenge-049/mark-anderson/raku/ch-2.p6
@@ -0,0 +1,83 @@
+#!/usr/bin/env perl6
+
+class LRU {
+ has $.capacity;
+ has @!cache;
+ has %!index;
+ has %!value;
+
+ method set(Int $k, Int $v) {
+ if defined %!index{$k} {
+ self!update($k);
+ }
+
+ else {
+ if (@!cache.elems == $.capacity) {
+ %!value{shift @!cache}:delete;
+ }
+
+ @!cache.push($k);
+ %!value{$k} = $v;
+ %!index = @!cache.kv.reverse; #this can be improved since all
+ #indexes don't need to be updated.
+ }
+ }
+
+ method get(Int $k) {
+ if defined %!index{$k} {
+ self!update($k);
+ }
+
+ return %!value{$k} // -1;
+ }
+
+ method !update(Int $k) {
+ my $i = %!index{$k};
+
+ unless ($i == $.capacity - 1) {
+ @!cache = (@!cache[0..$i-1], @!cache[$i+1..*-1], $k).flat;
+ %!index = @!cache.kv.reverse; # ditto
+ }
+ }
+
+ method printIt {
+ say "[least recently used] {@!cache.join(", ")} [most recently used]";
+ #say "Value = ", %!value;
+ #say "Index = ", %!index;
+ print "\n";
+ }
+}
+
+sub MAIN(Int $capacity where $capacity > 0) {
+ my $lru = LRU.new(capacity => $capacity);
+
+ say "capacity = {$lru.capacity}\n";
+
+ $lru.set(1, 3);
+
+ $lru.set(2, 5);
+
+ $lru.set(3, 7);
+
+ $lru.printIt;
+
+ $lru.get(2).say;
+
+ $lru.printIt;
+
+ $lru.get(1).say;
+
+ $lru.printIt;
+
+ $lru.get(4).say;
+
+ $lru.printIt;
+
+ $lru.set(4, 9);
+
+ $lru.printIt;
+
+ $lru.get(3).say;
+
+ $lru.printIt;
+}