aboutsummaryrefslogtreecommitdiff
path: root/challenge-166
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2022-05-29 02:04:20 +0100
committerGitHub <noreply@github.com>2022-05-29 02:04:20 +0100
commit77de8a071fbba8d81e53ce9d22061454849e8de3 (patch)
tree57b8d515d6c6d930a2af83c1dfa637ca9a22e14c /challenge-166
parentc87454dbedc94cc532103c89c49f47bad94551e2 (diff)
parent2f74a086037783c1cd1dea857af45d9c8f7e4fe3 (diff)
downloadperlweeklychallenge-club-77de8a071fbba8d81e53ce9d22061454849e8de3.tar.gz
perlweeklychallenge-club-77de8a071fbba8d81e53ce9d22061454849e8de3.tar.bz2
perlweeklychallenge-club-77de8a071fbba8d81e53ce9d22061454849e8de3.zip
Merge pull request #6168 from arnesom/branch-for-challenge-166
Arne Sommer
Diffstat (limited to 'challenge-166')
-rw-r--r--challenge-166/arne-sommer/blog.txt1
-rwxr-xr-xchallenge-166/arne-sommer/raku/ch-1.raku13
-rwxr-xr-xchallenge-166/arne-sommer/raku/ch-2.raku41
-rwxr-xr-xchallenge-166/arne-sommer/raku/hexawords13
-rwxr-xr-xchallenge-166/arne-sommer/raku/hexawords-olist7
-rwxr-xr-xchallenge-166/arne-sommer/raku/k-dir-diff27
-rwxr-xr-xchallenge-166/arne-sommer/raku/k-dir-diff-multi41
-rwxr-xr-xchallenge-166/arne-sommer/setup.sh11
-rwxr-xr-xchallenge-166/arne-sommer/setup2.sh8
9 files changed, 162 insertions, 0 deletions
diff --git a/challenge-166/arne-sommer/blog.txt b/challenge-166/arne-sommer/blog.txt
new file mode 100644
index 0000000000..e9728fa0b4
--- /dev/null
+++ b/challenge-166/arne-sommer/blog.txt
@@ -0,0 +1 @@
+https://raku-musings.com/hexa-diff.html
diff --git a/challenge-166/arne-sommer/raku/ch-1.raku b/challenge-166/arne-sommer/raku/ch-1.raku
new file mode 100755
index 0000000000..c0f45e36ee
--- /dev/null
+++ b/challenge-166/arne-sommer/raku/ch-1.raku
@@ -0,0 +1,13 @@
+#! /usr/bin/env raku
+
+unit sub MAIN
+(
+ :d(:$dictionary) where $dictionary.IO.r = 'dictionary.txt',
+ :p(:$pure),
+);
+
+my @dict = $pure
+ ?? $dictionary.IO.lines.grep( 1 < *.chars <= 8 ).grep( * ~~ /^<[abcdeflo]>+$/)
+ !! $dictionary.IO.lines.grep( 1 < *.chars <= 8 ).grep( * ~~ /^<[abcdefilost]>+$/);
+
+@dict.map({ say "0x" ~ TR/olist/01157/ });
diff --git a/challenge-166/arne-sommer/raku/ch-2.raku b/challenge-166/arne-sommer/raku/ch-2.raku
new file mode 100755
index 0000000000..959b066aad
--- /dev/null
+++ b/challenge-166/arne-sommer/raku/ch-2.raku
@@ -0,0 +1,41 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@dirs where @dirs.elems >= 3 && all(@dirs) ~~ .IO.d && all(@dirs) ~~ .IO.r);
+
+my $dir-count = @dirs.elems;
+
+my %dir;
+
+for @dirs -> $dir
+{
+ %dir{$dir} = $dir.IO.dir.map({ .d ?? .basename ~ '/' !! .basename }).Set;
+}
+
+my %all = %dir.values>>.List.flat.Bag;
+
+my $max-length = (%all.keys>>.chars.max, @dirs>>.chars.max).max;
+
+my @head;
+
+for @dirs -> $dir
+{
+ @head.push: $dir.fmt("%-{$max-length}s");
+}
+
+say @head.join(" | ");
+
+say "-" x (3 + $max-length) * $dir-count;
+
+for sort keys %all -> $file
+{
+ next if %all{$file} == $dir-count;
+
+ my @row;
+
+ for @dirs -> $dir
+ {
+ @row.push: "{ (%dir{$dir}{$file} ?? $file !! '').fmt("%-{$max-length}s") }";
+ }
+
+ say @row.join(" | ");
+}
diff --git a/challenge-166/arne-sommer/raku/hexawords b/challenge-166/arne-sommer/raku/hexawords
new file mode 100755
index 0000000000..c0f45e36ee
--- /dev/null
+++ b/challenge-166/arne-sommer/raku/hexawords
@@ -0,0 +1,13 @@
+#! /usr/bin/env raku
+
+unit sub MAIN
+(
+ :d(:$dictionary) where $dictionary.IO.r = 'dictionary.txt',
+ :p(:$pure),
+);
+
+my @dict = $pure
+ ?? $dictionary.IO.lines.grep( 1 < *.chars <= 8 ).grep( * ~~ /^<[abcdeflo]>+$/)
+ !! $dictionary.IO.lines.grep( 1 < *.chars <= 8 ).grep( * ~~ /^<[abcdefilost]>+$/);
+
+@dict.map({ say "0x" ~ TR/olist/01157/ });
diff --git a/challenge-166/arne-sommer/raku/hexawords-olist b/challenge-166/arne-sommer/raku/hexawords-olist
new file mode 100755
index 0000000000..cf4c1d8d62
--- /dev/null
+++ b/challenge-166/arne-sommer/raku/hexawords-olist
@@ -0,0 +1,7 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (:d(:$dictionary) where $dictionary.IO.r = 'dictionary.txt');
+
+my @dict = $dictionary.IO.lines.grep( 1 < *.chars <= 8 ).grep( * ~~ /^<[abcdefolist]>+$/);
+
+@dict.map({ say "0x" ~ TR/olist/01157/ });
diff --git a/challenge-166/arne-sommer/raku/k-dir-diff b/challenge-166/arne-sommer/raku/k-dir-diff
new file mode 100755
index 0000000000..97a068c61f
--- /dev/null
+++ b/challenge-166/arne-sommer/raku/k-dir-diff
@@ -0,0 +1,27 @@
+#! /usr/bin/env raku
+
+unit sub MAIN ($dir1 where $dir1.IO.d && $dir1.IO.r = 'dir_a',
+ $dir2 where $dir2.IO.d && $dir2.IO.r = 'dir_b',
+ $dir3 where $dir3.IO.d && $dir3.IO.r = 'dir_c',
+);
+
+my %dir1 = $dir1.IO.dir.map({ .d ?? .basename ~ '/' !! .basename }).Set;
+my %dir2 = $dir2.IO.dir.map({ .d ?? .basename ~ '/' !! .basename }).Set;
+my %dir3 = $dir3.IO.dir.map({ .d ?? .basename ~ '/' !! .basename }).Set;
+
+my %all = %dir1 (|) %dir2 (|) %dir3;
+
+my $max-length = (%all.keys>>.chars.max, $dir1.chars, $dir2.chars, $dir3.chars).max;
+
+say "{ $dir1.fmt("%-{$max-length}s") } | { $dir2.fmt("%-{$max-length}s") } | { $dir3.fmt("%-{$max-length}s") }";
+
+say "-" x $max-length * 3 + 6;
+
+for sort keys %all -> $file
+{
+ next if %dir1{$file} && %dir2{$file} && %dir3{$file};
+
+ say "{ (%dir1{$file} ?? $file !! '').fmt("%-{$max-length}s") } | "
+ ~ "{ (%dir2{$file} ?? $file !! '').fmt("%-{$max-length}s") } | "
+ ~ "{ (%dir3{$file} ?? $file !! '').fmt("%-{$max-length}s") }";
+}
diff --git a/challenge-166/arne-sommer/raku/k-dir-diff-multi b/challenge-166/arne-sommer/raku/k-dir-diff-multi
new file mode 100755
index 0000000000..959b066aad
--- /dev/null
+++ b/challenge-166/arne-sommer/raku/k-dir-diff-multi
@@ -0,0 +1,41 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (*@dirs where @dirs.elems >= 3 && all(@dirs) ~~ .IO.d && all(@dirs) ~~ .IO.r);
+
+my $dir-count = @dirs.elems;
+
+my %dir;
+
+for @dirs -> $dir
+{
+ %dir{$dir} = $dir.IO.dir.map({ .d ?? .basename ~ '/' !! .basename }).Set;
+}
+
+my %all = %dir.values>>.List.flat.Bag;
+
+my $max-length = (%all.keys>>.chars.max, @dirs>>.chars.max).max;
+
+my @head;
+
+for @dirs -> $dir
+{
+ @head.push: $dir.fmt("%-{$max-length}s");
+}
+
+say @head.join(" | ");
+
+say "-" x (3 + $max-length) * $dir-count;
+
+for sort keys %all -> $file
+{
+ next if %all{$file} == $dir-count;
+
+ my @row;
+
+ for @dirs -> $dir
+ {
+ @row.push: "{ (%dir{$dir}{$file} ?? $file !! '').fmt("%-{$max-length}s") }";
+ }
+
+ say @row.join(" | ");
+}
diff --git a/challenge-166/arne-sommer/setup.sh b/challenge-166/arne-sommer/setup.sh
new file mode 100755
index 0000000000..fd117208a7
--- /dev/null
+++ b/challenge-166/arne-sommer/setup.sh
@@ -0,0 +1,11 @@
+#! /bin/sh
+
+mkdir dir_a dir_a/Old_Fonts/ dir_b dir_c
+cd dir_a
+touch Arial.ttf Comic_Sans.ttf Georgia.ttf Helvetica.ttf Impact.otf Verdana.ttf
+
+cd ../dir_b
+touch Arial.ttf Comic_Sans.ttf Courier_New.ttf Helvetica.ttf Impact.otf Tahoma.ttf Verdana.ttf
+
+cd ../dir_c
+touch Arial.ttf Courier_New.ttf Helvetica.ttf Impact.otf Monaco.ttf Verdana.ttf
diff --git a/challenge-166/arne-sommer/setup2.sh b/challenge-166/arne-sommer/setup2.sh
new file mode 100755
index 0000000000..5b33df3537
--- /dev/null
+++ b/challenge-166/arne-sommer/setup2.sh
@@ -0,0 +1,8 @@
+#! /bin/sh
+
+mkdir dir_d dir_e
+cd dir_d
+touch Arial.ttf FrutigerBold.ttf
+
+cd ../dir_e
+touch Arial.ttf Impact.otf HelveticaModern.ttf