diff options
| author | drclaw1394 <drclaw@mac.com> | 2019-09-11 20:47:21 +1000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-09-11 20:47:21 +1000 |
| commit | 827b069f70bd9bab954fc8c01b697c3e6503cf2f (patch) | |
| tree | 65bc47c24b628826825646fe6c87f4f626ce6591 /challenge-024/arne-sommer | |
| parent | 1e534120e5bcd7cae116d2090dd8e8d0c3080c6c (diff) | |
| parent | e8b7dc6335e9a5cfb89d3a32090f8ba167124ea4 (diff) | |
| download | perlweeklychallenge-club-827b069f70bd9bab954fc8c01b697c3e6503cf2f.tar.gz perlweeklychallenge-club-827b069f70bd9bab954fc8c01b697c3e6503cf2f.tar.bz2 perlweeklychallenge-club-827b069f70bd9bab954fc8c01b697c3e6503cf2f.zip | |
Merge pull request #24 from manwar/master
Update to w25
Diffstat (limited to 'challenge-024/arne-sommer')
| -rw-r--r-- | challenge-024/arne-sommer/blog.txt | 1 | ||||
| -rw-r--r-- | challenge-024/arne-sommer/perl6/0 | 0 | ||||
| -rw-r--r-- | challenge-024/arne-sommer/perl6/1 | 1 | ||||
| -rw-r--r-- | challenge-024/arne-sommer/perl6/1-one | 1 | ||||
| -rw-r--r-- | challenge-024/arne-sommer/perl6/1-semi | 1 | ||||
| -rw-r--r-- | challenge-024/arne-sommer/perl6/2 | 1 | ||||
| -rw-r--r-- | challenge-024/arne-sommer/perl6/2-quote | 1 | ||||
| -rw-r--r-- | challenge-024/arne-sommer/perl6/3 | 1 | ||||
| -rw-r--r-- | challenge-024/arne-sommer/perl6/5 | 1 | ||||
| -rw-r--r-- | challenge-024/arne-sommer/perl6/6 | 1 | ||||
| -rw-r--r-- | challenge-024/arne-sommer/perl6/ch-1.sh | 1 | ||||
| -rwxr-xr-x | challenge-024/arne-sommer/perl6/ch-2.p6 | 17 | ||||
| -rwxr-xr-x | challenge-024/arne-sommer/perl6/cro-index | 36 | ||||
| -rwxr-xr-x | challenge-024/arne-sommer/perl6/hex-dump | 51 | ||||
| -rwxr-xr-x | challenge-024/arne-sommer/perl6/make-inverted-index | 20 | ||||
| -rwxr-xr-x | challenge-024/arne-sommer/perl6/make-inverted-index-fixed | 20 | ||||
| -rwxr-xr-x | challenge-024/arne-sommer/perl6/search-inverted-index | 17 | ||||
| -rwxr-xr-x | challenge-024/arne-sommer/perl6/search-inverted-index-loop | 36 |
18 files changed, 207 insertions, 0 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."; + } +} + |
