diff options
| author | Niels van Dijke <perlboy@cpan.org> | 2022-05-28 19:53:06 +0000 |
|---|---|---|
| committer | Niels van Dijke <perlboy@cpan.org> | 2022-05-28 19:53:06 +0000 |
| commit | c2a40bd4ab0837995e00840836cfcab38f15b42f (patch) | |
| tree | 82fbea962fcee3bbfcd896886c3c487e2e53f214 /challenge-166 | |
| parent | 6e43062f0244390ce55de00fc4a640895cf2f157 (diff) | |
| download | perlweeklychallenge-club-c2a40bd4ab0837995e00840836cfcab38f15b42f.tar.gz perlweeklychallenge-club-c2a40bd4ab0837995e00840836cfcab38f15b42f.tar.bz2 perlweeklychallenge-club-c2a40bd4ab0837995e00840836cfcab38f15b42f.zip | |
w166 - Task 1 & 2
Diffstat (limited to 'challenge-166')
| -rwxr-xr-x | challenge-166/perlboy1967/perl/ch-1.pl | 86 | ||||
| -rwxr-xr-x | challenge-166/perlboy1967/perl/ch-2.pl | 57 | ||||
| -rw-r--r-- | challenge-166/perlboy1967/perl/dir_a/a | 0 | ||||
| -rw-r--r-- | challenge-166/perlboy1967/perl/dir_a/all | 0 | ||||
| -rw-r--r-- | challenge-166/perlboy1967/perl/dir_a/b | 0 | ||||
| -rw-r--r-- | challenge-166/perlboy1967/perl/dir_a/c | 0 | ||||
| -rw-r--r-- | challenge-166/perlboy1967/perl/dir_b/a | 0 | ||||
| -rw-r--r-- | challenge-166/perlboy1967/perl/dir_b/all | 0 | ||||
| -rw-r--r-- | challenge-166/perlboy1967/perl/dir_b/c | 0 | ||||
| -rw-r--r-- | challenge-166/perlboy1967/perl/dir_b/d | 0 | ||||
| -rw-r--r-- | challenge-166/perlboy1967/perl/dir_c/all | 0 | ||||
| -rw-r--r-- | challenge-166/perlboy1967/perl/dir_c/b | 0 | ||||
| -rw-r--r-- | challenge-166/perlboy1967/perl/dir_c/c | 0 | ||||
| -rw-r--r-- | challenge-166/perlboy1967/perl/dir_c/d | 0 | ||||
| -rw-r--r-- | challenge-166/perlboy1967/perl/dir_d/all | 0 | ||||
| -rw-r--r-- | challenge-166/perlboy1967/perl/dir_d/c | 0 |
16 files changed, 143 insertions, 0 deletions
diff --git a/challenge-166/perlboy1967/perl/ch-1.pl b/challenge-166/perlboy1967/perl/ch-1.pl new file mode 100755 index 0000000000..8de1a2949b --- /dev/null +++ b/challenge-166/perlboy1967/perl/ch-1.pl @@ -0,0 +1,86 @@ +#!/bin/perl + +=pod + +The Weekly Challenge - 164 + - https://theweeklychallenge.org/blog/perl-weekly-challenge-166/#TASK1 + +Author: Niels 'PerlBoy' van Dijke + +Task 1: Hexadecimal Words +Submitted by: Ryan J Thompson + +As an old systems programmer, whenever I needed to come up with a 32-bit number, +I would reach for the tired old examples like 0xDeadBeef and 0xC0dedBad. I want more! + +Write a program that will read from a dictionary and find 2- to 8-letter words that +can be “spelled” in hexadecimal, with the addition of the following letter substitutions: + + o -> 0 (e.g., 0xf00d = “food”) + l -> 1 + i -> 1 + s -> 5 + t -> 7 + +=cut + +use v5.16; + +use File::Slurp; +use List::Util qw(sum); +use List::MoreUtils qw(uniq); + +my $dictFile = shift // '../../../data/dictionary.txt'; + +# Challenge +printf "Challenge: %-8s => %s\n", $_, tr/olist/01157/r for(hexWords($dictFile)); + +# Optional 1 +printf "Optional 1: %-8s => %s\n", $_, tr/ost/057/r for(hexWords2($dictFile)); + +# Optional 2 +printf "Optional 2: %-8s => %s\n", $_, tr/ost/057/r for(hexPhrase($dictFile)); + + +sub hexWords ($) { + my ($dictFile) = @_; + + return grep{chomp && /^[a-folist]{2,8}$/} + read_file $dictFile; +} + + +sub hexWords2 ($) { + my ($dictFile) = @_; + + return grep{chomp && /^[a-fost]{2,8}$/} + read_file $dictFile; +} + + +sub hexPhrase ($) { + my ($dictFile) = @_; + + my @res; + my %hwl; + + my @hw = grep {/^[^ost][[a-fost]{1,5}$/} hexWords2($dictFile); + map { push(@{$hwl{length($_)}},$_) } @hw; + + my @l = ( + [2,2,2,2], [2,2,4], [2,3,3], [2,4,2], [2,6], + [3,2,3], [3,3,2], [3,5], + [4,2,2], [4,4], + [5,3], + [6,2] + ); + foreach my $ar (@l) { + foreach my $w (glob '{'.join('}:{', map { join(',', @{$hwl{$_}}) } @$ar).'}') { + my @w = map { ucfirst } split(/:/,$w); + $w = join('', @w); + push(@res, $w) if (length(join('',uniq(@w))) == 8); + } + } + + return @res; +} diff --git a/challenge-166/perlboy1967/perl/ch-2.pl b/challenge-166/perlboy1967/perl/ch-2.pl new file mode 100755 index 0000000000..9c92e13834 --- /dev/null +++ b/challenge-166/perlboy1967/perl/ch-2.pl @@ -0,0 +1,57 @@ +#!/bin/perl + +=pod + +The Weekly Challenge - 166 + - https://theweeklychallenge.org/blog/perl-weekly-challenge-166/#TASK2 + +Author: Niels 'PerlBoy' van Dijke + +Task 2: K-Directory Diff +Submitted by: Ryan J Thompson + +Given a few (three or more) directories (non-recursively), display a side-by-side +difference of files that are missing from at least one of the directories. Do not +display files that exist in every directory. + +Since the task is non-recursive, if you encounter a subdirectory, append a /, but +otherwise treat it the same as a regular file. + +=cut + +use v5.16; + +use List::Util qw(max); +use Data::Printer; + +@ARGV = (grep {-d } glob('*')) unless @ARGV; + +kDirDiff(@ARGV); + +sub kDirDiff (@) { + my (@dirs) = sort @_; + + my %dirEntries; + my %maxLength; + + # Build filelist presence map + for my $dir (@dirs) { + $maxLength{$dir} = length($dir); + opendir(D, $dir); + map { + $_ .= '/' if (-d "$dir/$_"); + $dirEntries{$_}{$dir}++; + $maxLength{$dir} = max($maxLength{$dir}, length($_)); + } readdir(D); + } + + # Create report + my $fmt = join(' | ', map { "%-$maxLength{$_}s" } sort keys(%maxLength))."\n"; + + printf($fmt, @dirs); + printf($fmt =~ tr/ /-/r, map { '-' x $maxLength{$_} } @dirs); + foreach my $f (sort keys %dirEntries) { + printf($fmt, map { exists $dirEntries{$f}{$_} ? $f : '' } @dirs) + unless (scalar @dirs == scalar keys %{$dirEntries{$f}}); + } +} diff --git a/challenge-166/perlboy1967/perl/dir_a/a b/challenge-166/perlboy1967/perl/dir_a/a new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/challenge-166/perlboy1967/perl/dir_a/a diff --git a/challenge-166/perlboy1967/perl/dir_a/all b/challenge-166/perlboy1967/perl/dir_a/all new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/challenge-166/perlboy1967/perl/dir_a/all diff --git a/challenge-166/perlboy1967/perl/dir_a/b b/challenge-166/perlboy1967/perl/dir_a/b new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/challenge-166/perlboy1967/perl/dir_a/b diff --git a/challenge-166/perlboy1967/perl/dir_a/c b/challenge-166/perlboy1967/perl/dir_a/c new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/challenge-166/perlboy1967/perl/dir_a/c diff --git a/challenge-166/perlboy1967/perl/dir_b/a b/challenge-166/perlboy1967/perl/dir_b/a new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/challenge-166/perlboy1967/perl/dir_b/a diff --git a/challenge-166/perlboy1967/perl/dir_b/all b/challenge-166/perlboy1967/perl/dir_b/all new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/challenge-166/perlboy1967/perl/dir_b/all diff --git a/challenge-166/perlboy1967/perl/dir_b/c b/challenge-166/perlboy1967/perl/dir_b/c new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/challenge-166/perlboy1967/perl/dir_b/c diff --git a/challenge-166/perlboy1967/perl/dir_b/d b/challenge-166/perlboy1967/perl/dir_b/d new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/challenge-166/perlboy1967/perl/dir_b/d diff --git a/challenge-166/perlboy1967/perl/dir_c/all b/challenge-166/perlboy1967/perl/dir_c/all new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/challenge-166/perlboy1967/perl/dir_c/all diff --git a/challenge-166/perlboy1967/perl/dir_c/b b/challenge-166/perlboy1967/perl/dir_c/b new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/challenge-166/perlboy1967/perl/dir_c/b diff --git a/challenge-166/perlboy1967/perl/dir_c/c b/challenge-166/perlboy1967/perl/dir_c/c new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/challenge-166/perlboy1967/perl/dir_c/c diff --git a/challenge-166/perlboy1967/perl/dir_c/d b/challenge-166/perlboy1967/perl/dir_c/d new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/challenge-166/perlboy1967/perl/dir_c/d diff --git a/challenge-166/perlboy1967/perl/dir_d/all b/challenge-166/perlboy1967/perl/dir_d/all new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/challenge-166/perlboy1967/perl/dir_d/all diff --git a/challenge-166/perlboy1967/perl/dir_d/c b/challenge-166/perlboy1967/perl/dir_d/c new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/challenge-166/perlboy1967/perl/dir_d/c |
