diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2019-09-09 00:02:45 +0100 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2019-09-09 00:02:45 +0100 |
| commit | 66395d10c3df3154719725bb7f3386eb78d7725a (patch) | |
| tree | b4caa3d28f9fe84c3795892041a8bc7b0b716521 | |
| parent | 5b06d0027a36df1fb156321e1829d48497e04480 (diff) | |
| download | perlweeklychallenge-club-66395d10c3df3154719725bb7f3386eb78d7725a.tar.gz perlweeklychallenge-club-66395d10c3df3154719725bb7f3386eb78d7725a.tar.bz2 perlweeklychallenge-club-66395d10c3df3154719725bb7f3386eb78d7725a.zip | |
- Added solutions by Arne Sommer.
27 files changed, 975 insertions, 749 deletions
diff --git a/challenge-024/arne-sommer/blog.txt b/challenge-024/arne-sommer/blog.txt new file mode 100644 index 0000000000..024dba115d --- /dev/null +++ b/challenge-024/arne-sommer/blog.txt @@ -0,0 +1 @@ +https://perl6.eu/small-inversions.html diff --git a/challenge-024/arne-sommer/perl6/0 b/challenge-024/arne-sommer/perl6/0 new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/challenge-024/arne-sommer/perl6/0 diff --git a/challenge-024/arne-sommer/perl6/1 b/challenge-024/arne-sommer/perl6/1 new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/challenge-024/arne-sommer/perl6/1 @@ -0,0 +1 @@ + diff --git a/challenge-024/arne-sommer/perl6/1-one b/challenge-024/arne-sommer/perl6/1-one new file mode 100644 index 0000000000..56a6051ca2 --- /dev/null +++ b/challenge-024/arne-sommer/perl6/1-one @@ -0,0 +1 @@ +1
\ No newline at end of file diff --git a/challenge-024/arne-sommer/perl6/1-semi b/challenge-024/arne-sommer/perl6/1-semi new file mode 100644 index 0000000000..1c8a0e7976 --- /dev/null +++ b/challenge-024/arne-sommer/perl6/1-semi @@ -0,0 +1 @@ +;
\ No newline at end of file diff --git a/challenge-024/arne-sommer/perl6/2 b/challenge-024/arne-sommer/perl6/2 new file mode 100644 index 0000000000..092bc2b041 --- /dev/null +++ b/challenge-024/arne-sommer/perl6/2 @@ -0,0 +1 @@ +; diff --git a/challenge-024/arne-sommer/perl6/2-quote b/challenge-024/arne-sommer/perl6/2-quote new file mode 100644 index 0000000000..3cc762b550 --- /dev/null +++ b/challenge-024/arne-sommer/perl6/2-quote @@ -0,0 +1 @@ +""
\ No newline at end of file diff --git a/challenge-024/arne-sommer/perl6/3 b/challenge-024/arne-sommer/perl6/3 new file mode 100644 index 0000000000..796e82d142 --- /dev/null +++ b/challenge-024/arne-sommer/perl6/3 @@ -0,0 +1 @@ +++$
\ No newline at end of file diff --git a/challenge-024/arne-sommer/perl6/5 b/challenge-024/arne-sommer/perl6/5 new file mode 100644 index 0000000000..bbc468fdd0 --- /dev/null +++ b/challenge-024/arne-sommer/perl6/5 @@ -0,0 +1 @@ +say 1
\ No newline at end of file diff --git a/challenge-024/arne-sommer/perl6/6 b/challenge-024/arne-sommer/perl6/6 new file mode 100644 index 0000000000..93667da8bb --- /dev/null +++ b/challenge-024/arne-sommer/perl6/6 @@ -0,0 +1 @@ +sink 1
\ No newline at end of file diff --git a/challenge-024/arne-sommer/perl6/ch-1.sh b/challenge-024/arne-sommer/perl6/ch-1.sh new file mode 100644 index 0000000000..c2e50d3010 --- /dev/null +++ b/challenge-024/arne-sommer/perl6/ch-1.sh @@ -0,0 +1 @@ +perl6 3 diff --git a/challenge-024/arne-sommer/perl6/ch-2.p6 b/challenge-024/arne-sommer/perl6/ch-2.p6 new file mode 100755 index 0000000000..0e444c505e --- /dev/null +++ b/challenge-024/arne-sommer/perl6/ch-2.p6 @@ -0,0 +1,17 @@ +#! /usr/bin/env perl6 + +sub MAIN ($word, :$index = "index.txt") +{ + for (slurp $index).lines -> $line + { + my ($entry, $files) = $line.split(":"); + + if $word eq $entry + { + say "«$word» found in: $files"; + exit; + } + } + say "Not found."; +} + diff --git a/challenge-024/arne-sommer/perl6/cro-index b/challenge-024/arne-sommer/perl6/cro-index new file mode 100755 index 0000000000..0dc1c47260 --- /dev/null +++ b/challenge-024/arne-sommer/perl6/cro-index @@ -0,0 +1,36 @@ +#! /usr/bin/env perl6 + +use Cro::HTTP::Router; +use Cro::HTTP::Server; + +sub MAIN (*@files where @files.elems >= 1, :$port = 10000) +{ + my %index; + for @files -> $file + { + say "Reading file: $file (start)"; + die "No such file: $file" unless $file.IO.e; + die "Unreadable file: $file" unless $file.IO.r; + + my @words = (slurp $file).split(/<+[\W] - [\-] + [_] >+/); + say "Reading file: $file (finished)"; + + @words.map({ %index{$_}.{$file} = True }); + } + + say "Port: $port"; + + my $application = route + { + get -> 'search', $search + { + content 'text/plain', "$search: { %index{$search}.keys.join(", ") }\n"; + } + } + + my Cro::Service $search-app = Cro::HTTP::Server.new: :host<localhost>, :$port, :$application; + + $search-app.start; + + react whenever signal(SIGINT) { $search-app.stop; exit; } +}
\ No newline at end of file diff --git a/challenge-024/arne-sommer/perl6/hex-dump b/challenge-024/arne-sommer/perl6/hex-dump new file mode 100755 index 0000000000..6f81d76e6a --- /dev/null +++ b/challenge-024/arne-sommer/perl6/hex-dump @@ -0,0 +1,51 @@ +#! /usr/bin/env perl6 + +constant CR = 9229.chr; # This is the unicode "C/R" symbol +constant LF = 9226.chr; # This is the unicode "L/F" symbol +constant BOX = 9617.chr; # This is a unicode gray box + +multi sub MAIN ($file where $file.IO && $file.IO.r, :$linesize = 10) +{ + my $fh = open $file, :bin; + say-blob($fh.read, $linesize); + $fh.close; +} + +multi sub MAIN ($string, :$linesize = 10) +{ + say-blob($string.encode("utf-8"), $linesize); +} + +sub say-blob ($blob, $linesize) +{ + my $ascii = ""; + my $elems = @$blob.elems; + my $count = 0; + for @$blob -> $byte + { + $count++; + print $byte.fmt("%02X "); + if $byte == 10 + { + $ascii ~= CR; + } + elsif $byte == 13 + { + $ascii ~= LF; + } + else + { + $ascii ~= 31 < $byte < 127 ?? $byte.chr !! BOX; + } + if $count == $linesize + { + say "| $ascii"; $count = 0; $ascii = ""; + } + } + + if $count && $count < $linesize + { + print " " x $linesize - $count; # Fill the last line + say "| $ascii"; + } +}
\ No newline at end of file diff --git a/challenge-024/arne-sommer/perl6/make-inverted-index b/challenge-024/arne-sommer/perl6/make-inverted-index new file mode 100755 index 0000000000..172f270da6 --- /dev/null +++ b/challenge-024/arne-sommer/perl6/make-inverted-index @@ -0,0 +1,20 @@ +#! /usr/bin/env perl6 + +sub MAIN (*@files where @files.elems >= 1, :$index = "index.txt") +{ + my %index; + for @files -> $file + { + die "No such file: $file" unless $file.IO.e; + die "Unreadable file: $file" unless $file.IO.r; + + my @words = (slurp $file).words; + + @words.map({ %index{$_}.{$file} = True }); + } + + die "Unable to write index" unless my $fh = open $index, :w; + $fh.say("$_:{ %index{$_}.keys.join(",") }") for %index.keys.sort; + $fh.close; +} + diff --git a/challenge-024/arne-sommer/perl6/make-inverted-index-fixed b/challenge-024/arne-sommer/perl6/make-inverted-index-fixed new file mode 100755 index 0000000000..dd2f88f8e7 --- /dev/null +++ b/challenge-024/arne-sommer/perl6/make-inverted-index-fixed @@ -0,0 +1,20 @@ +#! /usr/bin/env perl6 + +sub MAIN (*@files where @files.elems >= 1, :$index = "index.txt") +{ + my %index; + for @files -> $file + { + die "No such file: $file" unless $file.IO.e; + die "Unreadable file: $file" unless $file.IO.r; + + my @words = (slurp $file).split(/<+[\W] - [\-] + [_] >+/); + + @words.map({ %index{$_}.{$file} = True }); + } + + die "Unable to write index" unless my $fh = open $index, :w; + $fh.say("$_:{ %index{$_}.keys.join(",") }") for %index.keys.sort; + $fh.close; +} + diff --git a/challenge-024/arne-sommer/perl6/search-inverted-index b/challenge-024/arne-sommer/perl6/search-inverted-index new file mode 100755 index 0000000000..0e444c505e --- /dev/null +++ b/challenge-024/arne-sommer/perl6/search-inverted-index @@ -0,0 +1,17 @@ +#! /usr/bin/env perl6 + +sub MAIN ($word, :$index = "index.txt") +{ + for (slurp $index).lines -> $line + { + my ($entry, $files) = $line.split(":"); + + if $word eq $entry + { + say "«$word» found in: $files"; + exit; + } + } + say "Not found."; +} + diff --git a/challenge-024/arne-sommer/perl6/search-inverted-index-loop b/challenge-024/arne-sommer/perl6/search-inverted-index-loop new file mode 100755 index 0000000000..25e9c03f32 --- /dev/null +++ b/challenge-024/arne-sommer/perl6/search-inverted-index-loop @@ -0,0 +1,36 @@ +#! /usr/bin/env perl6 + +multi sub MAIN ($word, :$index = "index.txt") +{ + for (slurp $index).lines -> $line + { + my ($entry, $files) = $line.split(":"); + + if $word eq $entry + { + say "«$word» found in: $files"; + exit; + } + } + say "Not found."; +} + +multi sub MAIN (:$index = "index.txt") +{ + my %index; + for (slurp $index).lines -> $line + { + my ($entry, $files) = $line.split(":"); + %index{$entry} = $files; + } + + loop + { + my $word = prompt("Search for word: "); + + say %index{$word} + ?? "«$word» found in: { %index{$word} }" + !! "Not found."; + } +} + diff --git a/stats/pwc-current.json b/stats/pwc-current.json index 11546c5805..5f48e6ee53 100644 --- a/stats/pwc-current.json +++ b/stats/pwc-current.json @@ -2,6 +2,7 @@ "drilldown" : { "series" : [ { + "name" : "Adam Russell", "id" : "Adam Russell", "data" : [ [ @@ -12,18 +13,31 @@ "Blog", 2 ] - ], - "name" : "Adam Russell" + ] }, { + "id" : "Andrezgz", "name" : "Andrezgz", "data" : [ [ "Perl 5", 2 ] + ] + }, + { + "data" : [ + [ + "Perl 6", + 2 + ], + [ + "Blog", + 1 + ] ], - "id" : "Andrezgz" + "id" : "Arne Sommer", + "name" : "Arne Sommer" }, { "data" : [ @@ -40,28 +54,26 @@ "name" : "Athanasius" }, { - "id" : "Dave Cross", "data" : [ [ "Perl 5", 1 ] ], - "name" : "Dave Cross" + "name" : "Dave Cross", + "id" : "Dave Cross" }, { - "name" : "Duane Powell", "data" : [ [ "Perl 5", 2 ] ], + "name" : "Duane Powell", "id" : "Duane Powell" }, { - "name" : "E. Choroba", - "id" : "E. Choroba", "data" : [ [ "Perl 5", @@ -71,16 +83,18 @@ "Blog", 1 ] - ] + ], + "id" : "E. Choroba", + "name" : "E. Choroba" }, { - "name" : "Guillermo Ramos", "data" : [ [ "Perl 5", 2 ] ], + "name" : "Guillermo Ramos", "id" : "Guillermo Ramos" }, { @@ -98,8 +112,8 @@ 1 ] ], - "id" : "Joelle Maslak", - "name" : "Joelle Maslak" + "name" : "Joelle Maslak", + "id" : "Joelle Maslak" }, { "name" : "Kevin Colyer", @@ -112,17 +126,18 @@ ] }, { - "name" : "Kian-Meng Ang", - "id" : "Kian-Meng Ang", "data" : [ [ "Perl 5", 1 ] - ] + ], + "id" : "Kian-Meng Ang", + "name" : "Kian-Meng Ang" }, { "name" : "Laurent Rosenfeld", + "id" : "Laurent Rosenfeld", "data" : [ [ "Perl 5", @@ -136,22 +151,21 @@ "Blog", 1 ] - ], - "id" : "Laurent Rosenfeld" + ] }, { - "id" : "Lubos Kolouch", "data" : [ [ "Perl 5", 2 ] ], + "id" : "Lubos Kolouch", "name" : "Lubos Kolouch" }, { - "name" : "Noud", "id" : "Noud", + "name" : "Noud", "data" : [ [ "Perl 6", @@ -161,6 +175,7 @@ }, { "name" : "Randy Lauen", + "id" : "Randy Lauen", "data" : [ [ "Perl 5", @@ -170,11 +185,9 @@ "Perl 6", 2 ] - ], - "id" : "Randy Lauen" + ] }, { - "name" : "Roger Bell West", "data" : [ [ "Perl 5", @@ -189,6 +202,7 @@ 1 ] ], + "name" : "Roger Bell West", "id" : "Roger Bell West" }, { @@ -206,7 +220,6 @@ ] }, { - "id" : "Simon Proctor", "data" : [ [ "Perl 5", @@ -217,19 +230,21 @@ 2 ] ], + "id" : "Simon Proctor", "name" : "Simon Proctor" }, { - "name" : "Steven Wilson", "data" : [ [ "Perl 5", 1 ] ], - "id" : "Steven Wilson" + "id" : "Steven Wilson", + "name" : "Steven Wilson" }, { + "name" : "Yet Ebreo", "id" : "Yet Ebreo", "data" : [ [ @@ -244,70 +259,84 @@ "Blog", 1 ] - ], - "name" : "Yet Ebreo" + ] } ] }, - "chart" : { - "type" : "column" + "subtitle" : { + "text" : "[Champions: 20] Last updated at 2019-09-08 23:02:21 GMT" + }, + "yAxis" : { + "title" : { + "text" : "Total Solutions" + } + }, + "tooltip" : { + "pointFormat" : "<span style='color:{point.color}'>{point.name}</span>: <b>{point.y:f}</b><br/>", + "headerFormat" : "<span style='font-size:11px'>{series.name}</span><br/>", + "followPointer" : 1 }, "series" : [ { "data" : [ { + "y" : 4, "name" : "Adam Russell", - "drilldown" : "Adam Russell", - "y" : 4 + "drilldown" : "Adam Russell" }, { + "y" : 2, "name" : "Andrezgz", - "drilldown" : "Andrezgz", - "y" : 2 + "drilldown" : "Andrezgz" + }, + { + "drilldown" : "Arne Sommer", + "name" : "Arne Sommer", + "y" : 3 }, { - "drilldown" : "Athanasius", + "name" : "Athanasius", "y" : 2, - "name" : "Athanasius" + "drilldown" : "Athanasius" }, { + "y" : 1, "name" : "Dave Cross", - "drilldown" : "Dave Cross", - "y" : 1 + "drilldown" : "Dave Cross" }, { - "y" : 2, "drilldown" : "Duane Powell", - "name" : "Duane Powell" + "name" : "Duane Powell", + "y" : 2 }, { - "name" : "E. Choroba", "y" : 3, + "name" : "E. Choroba", "drilldown" : "E. Choroba" }, { "name" : "Guillermo Ramos", - "drilldown" : "Guillermo Ramos", - "y" : 2 + "y" : 2, + "drilldown" : "Guillermo Ramos" }, { + "drilldown" : "Joelle Maslak", "name" : "Joelle Maslak", - "y" : 5, - "drilldown" : "Joelle Maslak" + "y" : 5 }, { "name" : "Kevin Colyer", - "drilldown" : "Kevin Colyer", - "y" : 2 + "y" : 2, + "drilldown" : "Kevin Colyer" }, { - "drilldown" : "Kian-Meng Ang", "y" : 1, - "name" : "Kian-Meng Ang" + "name" : "Kian-Meng Ang", + "drilldown" : "Kian-Meng Ang" }, { - "y" : 5, "drilldown" : "Laurent Rosenfeld", + "y" : 5, "name" : "Laurent Rosenfeld" }, { @@ -316,74 +345,64 @@ "drilldown" : "Lubos Kolouch" }, { - "y" : 2, "drilldown" : "Noud", - "name" : "Noud" + "name" : "Noud", + "y" : 2 }, { + "drilldown" : "Randy Lauen", "name" : "Randy Lauen", - "y" : 4, - "drilldown" : "Randy Lauen" + "y" : 4 }, { - "name" : "Roger Bell West", + "drilldown" : "Roger Bell West", "y" : 4, - "drilldown" : "Roger Bell West" + "name" : "Roger Bell West" }, { + "drilldown" : "Ruben Westerberg", "name" : "Ruben Westerberg", - "y" : 4, - "drilldown" : "Ruben Westerberg" + "y" : 4 }, { - "drilldown" : "Simon Proctor", "y" : 3, - "name" : "Simon Proctor" + "name" : "Simon Proctor", + "drilldown" : "Simon Proctor" }, { - "name" : "Steven Wilson", "drilldown" : "Steven Wilson", + "name" : "Steven Wilson", "y" : 1 }, { - "name" : "Yet Ebreo", "y" : 5, + "name" : "Yet Ebreo", "drilldown" : "Yet Ebreo" } ], - "name" : "Perl Weekly Challenge - 024", - "colorByPoint" : 1 + "colorByPoint" : 1, + "name" : "Perl Weekly Challenge - 024" } ], - "legend" : { - "enabled" : 0 - }, - "subtitle" : { - "text" : "[Champions: 19] Last updated at 2019-09-08 22:01:16 GMT" - }, - "xAxis" : { - "type" : "category" - }, "title" : { "text" : "Perl Weekly Challenge - 024" }, - "tooltip" : { - "followPointer" : 1, - "pointFormat" : "<span style='color:{point.color}'>{point.name}</span>: <b>{point.y:f}</b><br/>", - "headerFormat" : "<span style='font-size:11px'>{series.name}</span><br/>" - }, - "yAxis" : { - "title" : { - "text" : "Total Solutions" - } + "chart" : { + "type" : "column" }, "plotOptions" : { "series" : { - "borderWidth" : 0, "dataLabels" : { "enabled" : 1, "format" : "{point.y}" - } + }, + "borderWidth" : 0 } + }, + "xAxis" : { + "type" : "category" + }, + "legend" : { + "enabled" : 0 } } diff --git a/stats/pwc-language-breakdown-summary.json b/stats/pwc-language-breakdown-summary.json index f700d9b554..495035285d 100644 --- a/stats/pwc-language-breakdown-summary.json +++ b/stats/pwc-language-breakdown-summary.json @@ -1,13 +1,19 @@ { - "subtitle" : { - "text" : "Last updated at 2019-09-08 22:01:27 GMT" + "legend" : { + "enabled" : "false" }, - "title" : { - "text" : "Perl Weekly Challenge Contributions - 2019" + "yAxis" : { + "title" : { + "text" : null + }, + "min" : 0 }, "chart" : { "type" : "column" }, + "subtitle" : { + "text" : "Last updated at 2019-09-08 23:02:39 GMT" + }, "xAxis" : { "labels" : { "style" : { @@ -17,31 +23,18 @@ }, "type" : "category" }, - "legend" : { - "enabled" : "false" - }, "tooltip" : { "pointFormat" : "<b>{point.y:.0f}</b>" }, + "title" : { + "text" : "Perl Weekly Challenge Contributions - 2019" + }, "series" : [ { - "name" : "Contributions", - "dataLabels" : { - "format" : "{point.y:.0f}", - "style" : { - "fontSize" : "13px", - "fontFamily" : "Verdana, sans-serif" - }, - "rotation" : -90, - "align" : "right", - "color" : "#FFFFFF", - "enabled" : "true", - "y" : 10 - }, "data" : [ [ "Blog", - 261 + 262 ], [ "Perl 5", @@ -49,15 +42,22 @@ ], [ "Perl 6", - 600 + 602 ] - ] - } - ], - "yAxis" : { - "min" : 0, - "title" : { - "text" : null + ], + "name" : "Contributions", + "dataLabels" : { + "color" : "#FFFFFF", + "format" : "{point.y:.0f}", + "y" : 10, + "enabled" : "true", + "style" : { + "fontSize" : "13px", + "fontFamily" : "Verdana, sans-serif" + }, + "rotation" : -90, + "align" : "right" + } } - } + ] } diff --git a/stats/pwc-language-breakdown.json b/stats/pwc-language-breakdown.json index 2aec023e0f..7cc7399036 100644 --- a/stats/pwc-language-breakdown.json +++ b/stats/pwc-language-breakdown.json @@ -1,30 +1,167 @@ { + "yAxis" : { + "title" : { + "text" : "Total Solutions" + } + }, + "subtitle" : { + "text" : "Click the columns to drilldown the language breakdown. Last updated at 2019-09-08 23:02:39 GMT" + }, + "chart" : { + "type" : "column" + }, + "series" : [ + { + "data" : [ + { + "y" : 132, + "name" : "#001", + "drilldown" : "001" + }, + { + "y" : 104, + "drilldown" : "002", + "name" : "#002" + }, + { + "drilldown" : "003", + "name" : "#003", + "y" : 66 + }, + { + "y" : 86, + "drilldown" : "004", + "name" : "#004" + }, + { + "drilldown" : "005", + "name" : "#005", + "y" : 66 + }, + { + "name" : "#006", + "drilldown" : "006", + "y" : 47 + }, + { + "y" : 55, + "drilldown" : "007", + "name" : "#007" + }, + { + "y" : 68, + "name" : "#008", + "drilldown" : "008" + }, + { + "name" : "#009", + "drilldown" : "009", + "y" : 66 + }, + { + "name" : "#010", + "drilldown" : "010", + "y" : 60 + }, + { + "y" : 78, + "name" : "#011", + "drilldown" : "011" + }, + { + "y" : 83, + "drilldown" : "012", + "name" : "#012" + }, + { + "y" : 76, + "name" : "#013", + "drilldown" : "013" + }, + { + "y" : 95, + "name" : "#014", + "drilldown" : "014" + }, + { + "y" : 93, + "drilldown" : "015", + "name" : "#015" |
