aboutsummaryrefslogtreecommitdiff
path: root/challenge-024/arne-sommer/perl6
diff options
context:
space:
mode:
Diffstat (limited to 'challenge-024/arne-sommer/perl6')
-rw-r--r--challenge-024/arne-sommer/perl6/00
-rw-r--r--challenge-024/arne-sommer/perl6/11
-rw-r--r--challenge-024/arne-sommer/perl6/1-one1
-rw-r--r--challenge-024/arne-sommer/perl6/1-semi1
-rw-r--r--challenge-024/arne-sommer/perl6/21
-rw-r--r--challenge-024/arne-sommer/perl6/2-quote1
-rw-r--r--challenge-024/arne-sommer/perl6/31
-rw-r--r--challenge-024/arne-sommer/perl6/51
-rw-r--r--challenge-024/arne-sommer/perl6/61
-rw-r--r--challenge-024/arne-sommer/perl6/ch-1.sh1
-rwxr-xr-xchallenge-024/arne-sommer/perl6/ch-2.p617
-rwxr-xr-xchallenge-024/arne-sommer/perl6/cro-index36
-rwxr-xr-xchallenge-024/arne-sommer/perl6/hex-dump51
-rwxr-xr-xchallenge-024/arne-sommer/perl6/make-inverted-index20
-rwxr-xr-xchallenge-024/arne-sommer/perl6/make-inverted-index-fixed20
-rwxr-xr-xchallenge-024/arne-sommer/perl6/search-inverted-index17
-rwxr-xr-xchallenge-024/arne-sommer/perl6/search-inverted-index-loop36
17 files changed, 206 insertions, 0 deletions
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.";
+ }
+}
+