diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2019-07-28 01:02:44 +0100 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2019-07-28 01:02:44 +0100 |
| commit | cf4e0810bafed04b13bb7872cb2bfcd1ae920864 (patch) | |
| tree | 00da43267f405d5cbbc437a08b10cdb4ccb41056 /challenge-018 | |
| parent | 98391b4205b0ccc61d44bca97fa4cfc4d0dd4057 (diff) | |
| download | perlweeklychallenge-club-cf4e0810bafed04b13bb7872cb2bfcd1ae920864.tar.gz perlweeklychallenge-club-cf4e0810bafed04b13bb7872cb2bfcd1ae920864.tar.bz2 perlweeklychallenge-club-cf4e0810bafed04b13bb7872cb2bfcd1ae920864.zip | |
- Added solutions by Arne Sommer.
Diffstat (limited to 'challenge-018')
7 files changed, 71 insertions, 0 deletions
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 --- /dev/null +++ b/challenge-018/arne-sommer/perl6/lib/.precomp/.lock diff --git a/challenge-018/arne-sommer/perl6/lib/.precomp/B834E114E7A64AF8236503A5AE1E84F9F37C8B47/03/03D0BC625DDEC3BE511B7A604CF03963963B5CBF b/challenge-018/arne-sommer/perl6/lib/.precomp/B834E114E7A64AF8236503A5AE1E84F9F37C8B47/03/03D0BC625DDEC3BE511B7A604CF03963963B5CBF Binary files differnew file mode 100644 index 0000000000..ae1304a28b --- /dev/null +++ b/challenge-018/arne-sommer/perl6/lib/.precomp/B834E114E7A64AF8236503A5AE1E84F9F37C8B47/03/03D0BC625DDEC3BE511B7A604CF03963963B5CBF 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; +} |
