From cf4e0810bafed04b13bb7872cb2bfcd1ae920864 Mon Sep 17 00:00:00 2001 From: Mohammad S Anwar Date: Sun, 28 Jul 2019 01:02:44 +0100 Subject: - Added solutions by Arne Sommer. --- challenge-018/arne-sommer/blog.txt | 1 + challenge-018/arne-sommer/perl6/ch-1.p6 | 25 +++++++++++++++++ challenge-018/arne-sommer/perl6/ch-2.p6 | 14 ++++++++++ challenge-018/arne-sommer/perl6/lib/.precomp/.lock | 0 .../03/03D0BC625DDEC3BE511B7A604CF03963963B5CBF | Bin 0 -> 10699 bytes ...3D0BC625DDEC3BE511B7A604CF03963963B5CBF.repo-id | 1 + .../arne-sommer/perl6/lib/PriorityQueue.pm6 | 30 +++++++++++++++++++++ 7 files changed, 71 insertions(+) create mode 100644 challenge-018/arne-sommer/blog.txt create mode 100755 challenge-018/arne-sommer/perl6/ch-1.p6 create mode 100755 challenge-018/arne-sommer/perl6/ch-2.p6 create mode 100644 challenge-018/arne-sommer/perl6/lib/.precomp/.lock create mode 100644 challenge-018/arne-sommer/perl6/lib/.precomp/B834E114E7A64AF8236503A5AE1E84F9F37C8B47/03/03D0BC625DDEC3BE511B7A604CF03963963B5CBF create mode 100644 challenge-018/arne-sommer/perl6/lib/.precomp/B834E114E7A64AF8236503A5AE1E84F9F37C8B47/03/03D0BC625DDEC3BE511B7A604CF03963963B5CBF.repo-id create mode 100644 challenge-018/arne-sommer/perl6/lib/PriorityQueue.pm6 (limited to 'challenge-018') diff --git a/challenge-018/arne-sommer/blog.txt b/challenge-018/arne-sommer/blog.txt new file mode 100644 index 0000000000..ec2b70257a --- /dev/null +++ b/challenge-018/arne-sommer/blog.txt @@ -0,0 +1 @@ +https://perl6.eu/substring-queues.html diff --git a/challenge-018/arne-sommer/perl6/ch-1.p6 b/challenge-018/arne-sommer/perl6/ch-1.p6 new file mode 100755 index 0000000000..2d4e7b0b5f --- /dev/null +++ b/challenge-018/arne-sommer/perl6/ch-1.p6 @@ -0,0 +1,25 @@ +#! /usr/bin/env perl6 + +sub MAIN (*@strings where @strings.elems >= 2) +{ + my %common = substrings( @strings.shift ); + + %common = %common ∩ substrings($_) for @strings; + + .say for %common.keys.grep({ .chars == %common.keys>>.chars.max }); +} + + +sub substrings ($string) +{ + my %substrings; + + for ^$string.chars -> $i + { + for 1 .. $string.chars - $i -> $j + { + %substrings{ $string.substr($i, $j) } = True; + } + } + return %substrings; +} diff --git a/challenge-018/arne-sommer/perl6/ch-2.p6 b/challenge-018/arne-sommer/perl6/ch-2.p6 new file mode 100755 index 0000000000..7237e4e562 --- /dev/null +++ b/challenge-018/arne-sommer/perl6/ch-2.p6 @@ -0,0 +1,14 @@ +#! /usr/bin/env perl6 + +use lib "lib"; + +use PriorityQueue; + +my $PQ = PriorityQueue.new; + +$PQ.insert_with_priority("AA$_", (^99).pick) for ^10; + +while ! $PQ.is_empty +{ + say $PQ.pull_highest_priority_element; +} \ No newline at end of file diff --git a/challenge-018/arne-sommer/perl6/lib/.precomp/.lock b/challenge-018/arne-sommer/perl6/lib/.precomp/.lock new file mode 100644 index 0000000000..e69de29bb2 diff --git a/challenge-018/arne-sommer/perl6/lib/.precomp/B834E114E7A64AF8236503A5AE1E84F9F37C8B47/03/03D0BC625DDEC3BE511B7A604CF03963963B5CBF b/challenge-018/arne-sommer/perl6/lib/.precomp/B834E114E7A64AF8236503A5AE1E84F9F37C8B47/03/03D0BC625DDEC3BE511B7A604CF03963963B5CBF new file mode 100644 index 0000000000..ae1304a28b Binary files /dev/null and b/challenge-018/arne-sommer/perl6/lib/.precomp/B834E114E7A64AF8236503A5AE1E84F9F37C8B47/03/03D0BC625DDEC3BE511B7A604CF03963963B5CBF differ diff --git a/challenge-018/arne-sommer/perl6/lib/.precomp/B834E114E7A64AF8236503A5AE1E84F9F37C8B47/03/03D0BC625DDEC3BE511B7A604CF03963963B5CBF.repo-id b/challenge-018/arne-sommer/perl6/lib/.precomp/B834E114E7A64AF8236503A5AE1E84F9F37C8B47/03/03D0BC625DDEC3BE511B7A604CF03963963B5CBF.repo-id new file mode 100644 index 0000000000..52cb87c55b --- /dev/null +++ b/challenge-018/arne-sommer/perl6/lib/.precomp/B834E114E7A64AF8236503A5AE1E84F9F37C8B47/03/03D0BC625DDEC3BE511B7A604CF03963963B5CBF.repo-id @@ -0,0 +1 @@ +DAADAA97D202102F50C02F99B89E28CFC6A3CFFF \ No newline at end of file diff --git a/challenge-018/arne-sommer/perl6/lib/PriorityQueue.pm6 b/challenge-018/arne-sommer/perl6/lib/PriorityQueue.pm6 new file mode 100644 index 0000000000..9d2421eda9 --- /dev/null +++ b/challenge-018/arne-sommer/perl6/lib/PriorityQueue.pm6 @@ -0,0 +1,30 @@ +use v6; + +unit class PriorityQueue; + +has %!queue; + +method is_empty +{ + return ! %!queue.elems; +} + +method insert_with_priority ($payload, Int $priority) +{ + say ":: $payload ($priority)"; + + %!queue{$priority}.push: $payload; +} + +method pull_highest_priority_element +{ + my $priority = %!queue.keys.max; + + # say "Q: $priority -> " ~ @(%!queue{$priority}); + + my $element = @(%!queue{$priority}).shift; + + %!queue{$priority}:delete unless @(%!queue{$priority}).elems; + + return $element; +} -- cgit