diff options
| -rw-r--r-- | challenge-024/kevin-colyer/perl6/ch-1.p6 | 4 | ||||
| -rw-r--r-- | challenge-024/kevin-colyer/perl6/ch-2.p6 | 107 | ||||
| -rw-r--r-- | stats/pwc-current.json | 135 | ||||
| -rw-r--r-- | stats/pwc-language-breakdown-summary.json | 64 | ||||
| -rw-r--r-- | stats/pwc-language-breakdown.json | 416 | ||||
| -rw-r--r-- | stats/pwc-leaders.json | 908 | ||||
| -rw-r--r-- | stats/pwc-summary-1-30.json | 100 | ||||
| -rw-r--r-- | stats/pwc-summary-31-60.json | 36 | ||||
| -rw-r--r-- | stats/pwc-summary-61-90.json | 46 | ||||
| -rw-r--r-- | stats/pwc-summary-91-120.json | 58 | ||||
| -rw-r--r-- | stats/pwc-summary.json | 40 |
11 files changed, 1020 insertions, 894 deletions
diff --git a/challenge-024/kevin-colyer/perl6/ch-1.p6 b/challenge-024/kevin-colyer/perl6/ch-1.p6 new file mode 100644 index 0000000000..168741af0c --- /dev/null +++ b/challenge-024/kevin-colyer/perl6/ch-1.p6 @@ -0,0 +1,4 @@ +# PWC 24.1 : Create a smallest script in terms of size that on execution doesn’t throw any error. The script doesn’t have to do anything special. You could even come up with smallest one-liner. +# +# A simple tac command accepting multiple text files: 35 chars. +@*ARGS.map: *.IO.lines.reverse».say diff --git a/challenge-024/kevin-colyer/perl6/ch-2.p6 b/challenge-024/kevin-colyer/perl6/ch-2.p6 new file mode 100644 index 0000000000..78c32b0d0e --- /dev/null +++ b/challenge-024/kevin-colyer/perl6/ch-2.p6 @@ -0,0 +1,107 @@ +#!/usr/bin/perl6 +use v6; + +use Test; + +# 24.2 Create a script to implement full text search functionality using Inverted Index. According to wikipedia: + +# In computer science, an inverted index (also referred to as a postings file or inverted file) is a database index storing a mapping from content, such as words or numbers, to its locations in a table, or in a document or a set of documents (named in contrast to a forward index, which maps from documents to content). The purpose of an inverted index is to allow fast full-text searches, at a cost of increased processing when a document is added to the database. + +class DocumentStore { + + enum DocStoreStat <Nothing ENotInDatabase AddOK RemoveOK EAlreadyInDatabase ENoColonsInDocumentName>; + + has @!documents; + has %!documentNames; + has %!index; + + method addDocument ($name,$document) returns DocStoreStat { + return EAlreadyInDatabase if %!documentNames{$name}:exists; + return ENoColonsInDocumentName if $name ~~ / \: /; + @!documents.push: $document; + %!documentNames{$name}=@!documents.elems-1; + self!indexDocument($name); + return AddOK; + }; + + method removeDocument ($name) returns DocStoreStat { + return ENotInDatabase if %!documentNames{$name}:!exists; + + for %!index.keys -> $k { + %!index{$k} = %!index{$k}.grep({ if !/ ^ $name ":" / { $_ } }); + %!index{$k}:delete unless %!index{$k}.elems; + } + + @!documents[%!documentNames{$name}]=Nil; # remove by zeroing - don't splice or indexes will change! + %!documentNames{$name}:delete; + return RemoveOK; + }; + + method getDocument($name) { + return ENotInDatabase if %!documentNames{$name}:!exists; + return @!documents[%!documentNames{$name}]; + }; + + method search($needle){ + return Nothing if %!index{$needle}:!exists; + return %!index{$needle}; + }; + + method indexElems() returns Int { + %!index.elems; + } + + method elems() returns Int { + @!documents.elems; + } + + # private method + method !indexDocument($name){ + my Str $doc=@!documents[%!documentNames{$name}]; + my Int $i=0; + my Str $word; + while $i < $doc.chars { + #say "$i: "~$doc.substr($i); + $doc.substr($i) ~~ m/ (\W*) (\w+) /; + #say $/; + $i+=$/[0].chars if $/[0] ; + last unless $/[1]; + $word=$/[1].lc; + %!index{$word}.push: "$name:$i"; + $i+=$word.chars; + } + return; + }; +} + + +multi MAIN("test") { + my $doc1="This is a TEST!"; + my $doc1Name="test1"; + my $doc2="this: is also is a test"; + my $doc2Name="test2"; + my $ds = DocumentStore.new(); + is $ds.search("test"),DocumentStore::Nothing,"Not in database, returns <Nothing>"; + is $ds.removeDocument($doc1Name),DocumentStore::ENotInDatabase,"Can't remove a document that is not in store"; + is $ds.addDocument($doc1Name,$doc1),DocumentStore::AddOK,"Document added"; + is $ds.addDocument("bad:name",$doc1),DocumentStore::ENoColonsInDocumentName,"Bad file name - no colons allowed (for now!)"; + is $ds.indexElems,4,"4 words indexed"; + is $ds.elems,1,"1 document indexed"; + is $ds.addDocument($doc1Name,$doc1),DocumentStore::EAlreadyInDatabase,"Document previously added"; + is $ds.addDocument($doc2Name,$doc2),DocumentStore::AddOK,"Document added"; + is $ds.indexElems,5,"5 words indexed - checks normalisation too"; + is $ds.elems,2,"2 documents indexed"; + is $ds.getDocument("foo"),DocumentStore::ENotInDatabase,"getDocument not in index"; + is $ds.getDocument($doc2Name),$doc2,"getDocument return document stored"; + is $ds.removeDocument("test"),DocumentStore::ENotInDatabase,"Can't remove a document that is not in database"; + is $ds.search("test"),["$doc1Name:10","$doc2Name:19"],"Two items found"; + is $ds.search("is"),["$doc1Name:5","$doc2Name:6","$doc2Name:14"],"Three items found"; + is $ds.removeDocument($doc1Name),DocumentStore::RemoveOK,"Remove OK"; + is $ds.search("is"),["$doc2Name:6","$doc2Name:14"],"Two items found - index pruned after document removal"; + my @result=|$ds.search("is"); + for @result -> $item { + my ($n,$i)=|$item.split(":"); + is $ds.getDocument($n).substr($i,2),"is","[$n,$i] Correctly found search item at character pos"; + } + done-testing; +} diff --git a/stats/pwc-current.json b/stats/pwc-current.json index 8b13704526..68d9031df3 100644 --- a/stats/pwc-current.json +++ b/stats/pwc-current.json @@ -1,40 +1,47 @@ { "series" : [ { + "name" : "Perl Weekly Challenge - 024", + "colorByPoint" : 1, "data" : [ { - "name" : "Andrezgz", + "y" : 2, "drilldown" : "Andrezgz", - "y" : 2 + "name" : "Andrezgz" }, { + "drilldown" : "Dave Cross", "y" : 1, - "name" : "Dave Cross", - "drilldown" : "Dave Cross" + "name" : "Dave Cross" }, { - "name" : "Duane Powell", "drilldown" : "Duane Powell", - "y" : 2 + "y" : 2, + "name" : "Duane Powell" }, { - "name" : "Joelle Maslak", "drilldown" : "Joelle Maslak", - "y" : 4 + "y" : 4, + "name" : "Joelle Maslak" }, { + "y" : 2, + "drilldown" : "Kevin Colyer", + "name" : "Kevin Colyer" + }, + { + "drilldown" : "Laurent Rosenfeld", "y" : 5, - "name" : "Laurent Rosenfeld", - "drilldown" : "Laurent Rosenfeld" + "name" : "Laurent Rosenfeld" }, { - "y" : 4, "drilldown" : "Roger Bell West", - "name" : "Roger Bell West" + "name" : "Roger Bell West", + "y" : 4 }, { - "drilldown" : "Ruben Westerberg", "name" : "Ruben Westerberg", + "drilldown" : "Ruben Westerberg", "y" : 4 }, { @@ -43,81 +50,62 @@ "name" : "Simon Proctor" }, { - "name" : "Steven Wilson", "drilldown" : "Steven Wilson", - "y" : 1 + "y" : 1, + "name" : "Steven Wilson" }, { - "y" : 5, "drilldown" : "Yet Ebreo", + "y" : 5, "name" : "Yet Ebreo" } - ], - "colorByPoint" : 1, - "name" : "Perl Weekly Challenge - 024" + ] } ], + "subtitle" : { + "text" : "[Champions: 11] Last updated at 2019-09-06 18:14:51 GMT" + }, "chart" : { "type" : "column" }, - "legend" : { - "enabled" : 0 - }, - "xAxis" : { - "type" : "category" - }, - "plotOptions" : { - "series" : { - "borderWidth" : 0, - "dataLabels" : { - "format" : "{point.y}", - "enabled" : 1 - } + "yAxis" : { + "title" : { + "text" : "Total Solutions" } }, - "subtitle" : { - "text" : "[Champions: 10] Last updated at 2019-09-06 14:34:16 GMT" - }, - "tooltip" : { - "headerFormat" : "<span style='font-size:11px'>{series.name}</span><br/>", - "pointFormat" : "<span style='color:{point.color}'>{point.name}</span>: <b>{point.y:f}</b><br/>", - "followPointer" : 1 - }, "drilldown" : { "series" : [ { + "name" : "Andrezgz", + "id" : "Andrezgz", "data" : [ [ "Perl 5", 2 ] - ], - "id" : "Andrezgz", - "name" : "Andrezgz" + ] }, { + "id" : "Dave Cross", "data" : [ [ "Perl 5", 1 ] ], - "id" : "Dave Cross", "name" : "Dave Cross" }, { + "name" : "Duane Powell", "data" : [ [ "Perl 5", 2 ] ], - "name" : "Duane Powell", "id" : "Duane Powell" }, { - "id" : "Joelle Maslak", - "name" : "Joelle Maslak", "data" : [ [ "Perl 5", @@ -127,10 +115,21 @@ "Perl 6", 2 ] + ], + "id" : "Joelle Maslak", + "name" : "Joelle Maslak" + }, + { + "name" : "Kevin Colyer", + "id" : "Kevin Colyer", + "data" : [ + [ + "Perl 6", + 2 + ] ] }, { - "name" : "Laurent Rosenfeld", "id" : "Laurent Rosenfeld", "data" : [ [ @@ -145,9 +144,11 @@ "Blog", 1 ] - ] + ], + "name" : "Laurent Rosenfeld" }, { + "name" : "Roger Bell West", "data" : [ [ "Perl 5", @@ -162,12 +163,10 @@ 1 ] ], - "name" : "Roger Bell West", "id" : "Roger Bell West" }, { "name" : "Ruben Westerberg", - "id" : "Ruben Westerberg", "data" : [ [ "Perl 5", @@ -177,7 +176,8 @@ "Perl 6", 2 ] - ] + ], + "id" : "Ruben Westerberg" }, { "name" : "Simon Proctor", @@ -194,18 +194,16 @@ ] }, { - "name" : "Steven Wilson", "id" : "Steven Wilson", "data" : [ [ "Perl 5", 1 ] - ] + ], + "name" : "Steven Wilson" }, { - "id" : "Yet Ebreo", - "name" : "Yet Ebreo", "data" : [ [ "Perl 5", @@ -219,16 +217,33 @@ "Blog", 1 ] - ] + ], + "id" : "Yet Ebreo", + "name" : "Yet Ebreo" } ] }, "title" : { "text" : "Perl Weekly Challenge - 024" }, - "yAxis" : { - "title" : { - "text" : "Total Solutions" + "xAxis" : { + "type" : "category" + }, + "tooltip" : { + "followPointer" : 1, + "headerFormat" : "<span style='font-size:11px'>{series.name}</span><br/>", + "pointFormat" : "<span style='color:{point.color}'>{point.name}</span>: <b>{point.y:f}</b><br/>" + }, + "legend" : { + "enabled" : 0 + }, + "plotOptions" : { + "series" : { + "borderWidth" : 0, + "dataLabels" : { + "format" : "{point.y}", + "enabled" : 1 + } } } } diff --git a/stats/pwc-language-breakdown-summary.json b/stats/pwc-language-breakdown-summary.json index 27c5ee2581..b45395b20e 100644 --- a/stats/pwc-language-breakdown-summary.json +++ b/stats/pwc-language-breakdown-summary.json @@ -1,39 +1,23 @@ { - "chart" : { - "type" : "column" - }, - "subtitle" : { - "text" : "Last updated at 2019-09-06 14:34:32 GMT" - }, - "xAxis" : { - "type" : "category", - "labels" : { - "style" : { - "fontSize" : "13px", - "fontFamily" : "Verdana, sans-serif" - } - } - }, - "title" : { - "text" : "Perl Weekly Challenge Contributions - 2019" - }, - "legend" : { - "enabled" : "false" + "yAxis" : { + "title" : { + "text" : null + }, + "min" : 0 }, "series" : [ { - "name" : "Contributions", "dataLabels" : { - "enabled" : "true", "rotation" : -90, - "align" : "right", + "format" : "{point.y:.0f}", + "color" : "#FFFFFF", "style" : { "fontFamily" : "Verdana, sans-serif", "fontSize" : "13px" }, - "color" : "#FFFFFF", - "y" : 10, - "format" : "{point.y:.0f}" + "enabled" : "true", + "align" : "right", + "y" : 10 }, "data" : [ [ @@ -46,18 +30,34 @@ ], [ "Perl 6", - 593 + 595 ] - ] + ], + "name" : "Contributions" } ], - "yAxis" : { - "title" : { - "text" : null + "xAxis" : { + "labels" : { + "style" : { + "fontFamily" : "Verdana, sans-serif", + "fontSize" : "13px" + } }, - "min" : 0 + "type" : "category" + }, + "legend" : { + "enabled" : "false" + }, + "title" : { + "text" : "Perl Weekly Challenge Contributions - 2019" + }, + "chart" : { + "type" : "column" }, "tooltip" : { "pointFormat" : "<b>{point.y:.0f}</b>" + }, + "subtitle" : { + "text" : "Last updated at 2019-09-06 18:15:01 GMT" } } diff --git a/stats/pwc-language-breakdown.json b/stats/pwc-language-breakdown.json index f486f1e270..65648dd4cb 100644 --- a/stats/pwc-language-breakdown.json +++ b/stats/pwc-language-breakdown.json @@ -2,10 +2,168 @@ "xAxis" : { "type" : "category" }, + "series" : [ + { + "colorByPoint" : "true", + "data" : [ + { + "name" : "#001", + "y" : 132, + "drilldown" : "001" + }, + { + "y" : 104, + "name" : "#002", + "drilldown" : "002" + }, + { + "drilldown" : "003", + "y" : 66, + "name" : "#003" + }, + { + "drilldown" : "004", + "y" : 86, + "name" : "#004" + }, + { + "y" : 66, + "name" : "#005", + "drilldown" : "005" + }, + { + "y" : 47, + "name" : "#006", + "drilldown" : "006" + }, + { + "name" : "#007", + "y" : 55, + "drilldown" : "007" + }, + { + "y" : 68, + "name" : "#008", + "drilldown" : "008" + }, + { + "drilldown" : "009", + "y" : 66, + "name" : "#009" + }, + { + "drilldown" : "010", + "y" : 59, + "name" : "#010" + }, + { + "name" : "#011", + "y" : 78, + "drilldown" : "011" + }, + { + "y" : 82, + "name" : "#012", + "drilldown" : "012" + }, + { + "name" : "#013", + "y" : 75, + "drilldown" : "013" + }, + { + "drilldown" : "014", + "y" : 95, + "name" : "#014" + }, + { + "name" : "#015", + "y" : 93, + "drilldown" : "015" + }, + { + "y" : 66, + "name" : "#016", + "drilldown" : "016" + }, + { + "drilldown" : "017", + "y" : 79, + "name" : "#017" + }, + { + "drilldown" : "018", + "y" : 76, + "name" : "#018" + }, + { + "drilldown" : "019", + "y" : 95, + "name" : "#019" + }, + { + "drilldown" : "020", + "name" : "#020", + "y" : 95 + }, + { + "name" : "#021", + "y" : 66, + "drilldown" : "021" + }, + { + "drilldown" : "022", + "y" : 62, + "name" : "#022" + }, + { + "name" : "#023", + "y" : 88, + "drilldown" : "023" + }, + { + "name" : "#024", + "y" : 33, + "drilldown" : "024" + } + ], + "name" : "Perl Weekly Challenge Languages" + } + ], + "plotOptions" : { + "series" : { + "borderWidth" : 0, + "dataLabels" : { + "format" : "{point.y}", + "enabled" : 1 + } + } + }, + "yAxis" : { + "title" : { + "text" : "Total Solutions" + } + }, + "tooltip" : { + "pointFormat" : "<span style=\"color:{point.color}\">Challenge {point.name}</span>: <b>{point.y:f}</b><br/>", + "headerFormat" : "<span style=\"font-size:11px\"></span>", + "followPointer" : "true" + }, + "subtitle" : { + "text" : "Click the columns to drilldown the language breakdown. Last updated at 2019-09-06 18:15:01 GMT" + }, + "chart" : { + "type" : "column" + }, + "title" : { + "text" : "Perl Weekly Challenge Language" + }, + "legend" : { + "enabled" : "false" + }, "drilldown" : { "series" : [ { - "id" : "001", "data" : [ [ "Perl 5", @@ -20,10 +178,11 @@ 11 ] ], - "name" : "001" + "name" : "001", + "id" : "001" }, { - "id" : "002", + "name" : "002", "data" : [ [ "Perl 5", @@ -38,10 +197,9 @@ 9 ] ], - "name" : "002" + "id" : "002" }, { - "name" : "003", "id" : "003", "data" : [ [ @@ -56,11 +214,10 @@ "Blog", 8 ] - ] + ], + "name" : "003" }, { - "name" : "004", - "id" : "004", "data" : [ [ "Perl 5", @@ -74,11 +231,13 @@ "Blog", 9 ] - ] + ], + "name" : "004", + "id" : "004" }, { - "name" : "005", "id" : "005", + "name" : "005", "data" : [ [ "Perl 5", @@ -95,7 +254,6 @@ ] }, { - "id" : "006", "data" : [ [ "Perl 5", @@ -110,11 +268,10 @@ 6 ] ], - "name" : "006" + "name" : "006", + "id" : "006" }, { - "name" : "007", - "id" : "007", "data" : [ [ "Perl 5", @@ -128,9 +285,13 @@ "Blog", 9 ] - ] + ], + "name" : "007", + "id" : "007" }, { + "id" : "008", + "name" : "008", "data" : [ [ "Perl 5", @@ -144,11 +305,10 @@ "Blog", 10 ] - ], - "id" : "008", - "name" : "008" + ] }, { + "id" : "009", "data" : [ [ "Perl 5", @@ -163,11 +323,11 @@ 12 ] ], - "id" : "009", "name" : "009" }, { "id" : "010", + "name" : "010", "data" : [ [ "Perl 5", @@ -181,12 +341,9 @@ "Blog", 10 ] - ], - "name" : "010" + ] }, { - "name" : "011", - "id" : "011", "data" : [ [ "Perl 5", @@ -200,10 +357,12 @@ "Blog", 9 ] - ] + ], + "name" : "011", + "id" : "011" }, { - "name" : "012", + "id" : "012", "data" : [ [ "Perl 5", @@ -218,10 +377,9 @@ 10 ] ], - "id" : "012" + "name" : "012" }, { - "id" : "013", "data" : [ [ "Perl 5", @@ -236,9 +394,11 @@ 12 ] ], - "name" : "013" + "name" : "013", + "id" : "013" }, { + "id" : "014", "data" : [ [ "Perl 5", @@ -253,7 +413,6 @@ 14 ] ], - "id" : "014", "name" : "014" }, { @@ -275,6 +434,7 @@ "name" : "015" }, { + "id" : "016", "name" : "016", "data" : [ [ @@ -289,12 +449,10 @@ "Blog", 12 ] - ], - "id" : "016" + ] }, { "name" : "017", - "id" : "017", "data" : [ [ "Perl 5", @@ -308,7 +466,8 @@ "Blog", 12 ] - ] + ], + "id" : "017" }, { "data" : [ @@ -325,10 +484,11 @@ 14 ] ], - "id" : "018", - "name" : "018" + "name" : "018", + "id" : "018" }, { + "name" : "019", "data" : [ [ "Perl 5", @@ -343,8 +503,7 @@ 13 ] ], - "id" : "019", - "name" : "019" + "id" : "019" }, { "data" : [ @@ -361,12 +520,10 @@ 13 ] ], - "id" : "020", - "name" : "020" + "name" : "020", + "id" : "020" }, { - "name" : "021", - "id" : "021", "data" : [ [ "Perl 5", @@ -380,11 +537,13 @@ "Blog", 9 ] - ] + ], + "name" : "021", + "id" : "021" }, { - "name" : "022", "id" : "022", + "name" : "022", "data" : [ [ "Perl 5", @@ -402,6 +561,7 @@ }, { "id" : "023", + "name" : "023", "data" : [ [ "Perl 5", @@ -415,11 +575,9 @@ "Blog", 9 ] - ], - "name" : "023" + ] }, { - "name" : "024", "id" : "024", "data" : [ [ @@ -428,173 +586,15 @@ ], [ "Perl 6", - 11 + 13 ], [ "Blog", 3 ] - ] + ], + "name" : "024" } ] - }, - "legend" : { - "enabled" : "false" - }, - "title" : { - "text" : "Perl Weekly Challenge Language" - }, - "plotOptions" : { - "series" : { - "dataLabels" : { - "enabled" : 1, - "format" : "{point.y}" - }, - "borderWidth" : 0 - } - }, - "chart" : { - "type" : "column" - }, - "subtitle" : { - "text" : "Click the columns to drilldown the language breakdown. Last updated at 2019-09-06 14:34:32 GMT" - }, - "yAxis" : { - "title" : { - "text" : "Total Solutions" - } - }, - "tooltip" : { - "followPointer" : "true", - "pointFormat" : "<span style=\"color:{point.color}\">Challenge {point.name}</span>: <b>{point.y:f}</b><br/>", - "headerFormat" : "<span style=\"font-size:11px\"></span>" - }, - "series" : [ - { - "data" : [ - { - "drilldown" : "001", - "y" : 132, - "name" : "#001" - }, - { - "name" : "#002", - "y" : 104, - "drilldown" : "002" - }, - { - "name" : "#003", - "y" : 66, - "drilldown" : "003" - }, - { - "drilldown" : "004", - "y" : 86, - "name" : "#004" - }, - { - "drilldown" : "005", - "y" : 66, - "name" : "#005" - }, - { - "drilldown" : "006", - "name" : "#006", - "y" : 47 - }, - { - "name" : "#007", - "y" : 55, - "drilldown" : "007" - }, - { - "name" : "#008", - "y" : 68, - "drilldown" : "008" - }, - { - "drilldown" : "009", - "y" : 66, - "name" : "#009" - }, - { - "drilldown" : "010", - "y" : 59, - "name" : "#010" - }, - { - "drilldown" : "011", - "y" : 78, - "name" : "#011" - }, - { - "drilldown" : "012", - "y" : 82, - "name" : "#012" - }, - { - "drilldown" : "013", - "y" : 75, - "name" : "#013" - }, - { - "name" : "#014", - "y" : 95, - "drilldown" : "014" - }, - { - "y" : 93, - "name" : "#015", - "drilldown" : "015" - }, - { - "y" : 66, - "name" : "#016", - "drilldown" : "016" - }, - { - "y" : 79, - "name" : "#017", - "drilldown" : "017" - }, - { - "name" : "#018", - "y" : 76, - "drilldown" : "018" - }, - { - "name" : "#019", - "y" : 95, - "drilldown" : "019" - }, - { - "name" : "#020", - "y" : 95, - "drilldown" : "020" - }, - { - "drilldown" : "021", - "name" : "#021", - "y" : 66 - }, - { - "drilldown" : "022", - "name" : "#022", - "y" : 62 - }, - { - "name" : "#023", - "y" : 88, - "drilldown" : "023" - }, - { - "drilldown" : "024", - "y" : 31, - "name" : "#024" - } - ], - "colorByPoint" : "true", - "name" : "Perl Weekly Challenge Languages" - } - ] + } } diff --git a/stats/pwc-leaders.json b/stats/pwc-leaders.json index 70082b71eb..9265b05e18 100644 --- a/stats/pwc-leaders.json +++ b/stats/pwc-leaders.json @@ -1,40 +1,283 @@ |
