diff options
| author | Mark Anderson <mark@frontrangerunner.com> | 2020-02-26 14:34:13 -0700 |
|---|---|---|
| committer | Mark Anderson <mark@frontrangerunner.com> | 2020-02-26 14:34:13 -0700 |
| commit | 93245ed80b43e4008060848b35301c4bef504d8c (patch) | |
| tree | 4ba70d3c050c6f77ac7426129f3fe9dedb67cbac | |
| parent | 6fd74b2f430bede898418de695a2b020e5749a82 (diff) | |
| download | perlweeklychallenge-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.p6 | 8 | ||||
| -rw-r--r-- | challenge-049/mark-anderson/raku/ch-2.p6 | 83 |
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; +} |
