aboutsummaryrefslogtreecommitdiff
path: root/challenge-033
diff options
context:
space:
mode:
authorConor Hoekstra <codereport@outlook.com>2021-12-24 22:16:15 -0500
committerConor Hoekstra <codereport@outlook.com>2021-12-24 22:16:15 -0500
commitc804b128cf740d95b244cd3fe15e86d0820ab51e (patch)
treeb9db7c3a5f93e6a83640f56bfd5decb9bbe8dbfe /challenge-033
parent116add27d0d74360c7d4ad26b12d972657e51afa (diff)
parent6f518c687f743b68d3eeddedcf3d831aca20d4ec (diff)
downloadperlweeklychallenge-club-c804b128cf740d95b244cd3fe15e86d0820ab51e.tar.gz
perlweeklychallenge-club-c804b128cf740d95b244cd3fe15e86d0820ab51e.tar.bz2
perlweeklychallenge-club-c804b128cf740d95b244cd3fe15e86d0820ab51e.zip
Merge branch 'master' of https://github.com/manwar/perlweeklychallenge-club
Diffstat (limited to 'challenge-033')
-rw-r--r--challenge-033/paulo-custodio/Makefile2
-rw-r--r--challenge-033/paulo-custodio/README1
-rw-r--r--challenge-033/paulo-custodio/perl/ch-1.pl57
-rw-r--r--challenge-033/paulo-custodio/perl/ch-2.pl37
-rw-r--r--challenge-033/paulo-custodio/python/ch-1.py55
-rw-r--r--challenge-033/paulo-custodio/python/ch-2.py36
-rw-r--r--challenge-033/paulo-custodio/sample.txt1
-rw-r--r--challenge-033/paulo-custodio/t/test-1.yaml31
-rw-r--r--challenge-033/paulo-custodio/t/test-2.yaml18
9 files changed, 238 insertions, 0 deletions
diff --git a/challenge-033/paulo-custodio/Makefile b/challenge-033/paulo-custodio/Makefile
new file mode 100644
index 0000000000..c3c762d746
--- /dev/null
+++ b/challenge-033/paulo-custodio/Makefile
@@ -0,0 +1,2 @@
+all:
+ perl ../../challenge-001/paulo-custodio/test.pl
diff --git a/challenge-033/paulo-custodio/README b/challenge-033/paulo-custodio/README
new file mode 100644
index 0000000000..87dc0b2fbd
--- /dev/null
+++ b/challenge-033/paulo-custodio/README
@@ -0,0 +1 @@
+Solution by Paulo Custodio
diff --git a/challenge-033/paulo-custodio/perl/ch-1.pl b/challenge-033/paulo-custodio/perl/ch-1.pl
new file mode 100644
index 0000000000..8346b97cbf
--- /dev/null
+++ b/challenge-033/paulo-custodio/perl/ch-1.pl
@@ -0,0 +1,57 @@
+#!/usr/bin/perl
+
+# Challenge 033
+#
+# Task #1
+# Count Letters (A..Z)
+# Create a script that accepts one or more files specified on the command-line
+# and count the number of times letters appeared in the files.
+#
+# So with the following input file sample.txt
+#
+# The quick brown fox jumps over the lazy dog.
+# the script would display something like:
+#
+# a: 1
+# b: 1
+# c: 1
+# d: 1
+# e: 3
+# f: 1
+# g: 1
+# h: 2
+# i: 1
+# j: 1
+# k: 1
+# l: 1
+# m: 1
+# n: 1
+# o: 4
+# p: 1
+# q: 1
+# r: 2
+# s: 1
+# t: 2
+# u: 2
+# v: 1
+# w: 1
+# x: 1
+# y: 1
+# z: 1
+
+use Modern::Perl;
+
+# collect
+my %count;
+while (<>) {
+ for (split //, lc($_)) {
+ if (/[a-z]/) {
+ $count{$_}++;
+ }
+ }
+}
+
+# output
+for (sort keys %count) {
+ say "$_: $count{$_}";
+}
diff --git a/challenge-033/paulo-custodio/perl/ch-2.pl b/challenge-033/paulo-custodio/perl/ch-2.pl
new file mode 100644
index 0000000000..761f07455c
--- /dev/null
+++ b/challenge-033/paulo-custodio/perl/ch-2.pl
@@ -0,0 +1,37 @@
+#!/usr/bin/perl
+
+# Challenge 033
+#
+# Task #2
+# Formatted Multiplication Table
+# Write a script to print 11x11 multiplication table, only the top half triangle.
+#
+# x| 1 2 3 4 5 6 7 8 9 10 11
+# ---+--------------------------------------------
+# 1| 1 2 3 4 5 6 7 8 9 10 11
+# 2| 4 6 8 10 12 14 16 18 20 22
+# 3| 9 12 15 18 21 24 27 30 33
+# 4| 16 20 24 28 32 36 40 44
+# 5| 25 30 35 40 45 50 55
+# 6| 36 42 48 54 60 66
+# 7| 49 56 63 70 77
+# 8| 64 72 80 88
+# 9| 81 90 99
+# 10| 100 110
+# 11| 121
+
+use Modern::Perl;
+
+# header
+print " x|";
+printf "%4d", $_ for 1..11;
+print "\n";
+print "---+", "-"x(11*4), "\n";
+
+# print table
+for my $row (1..11) {
+ printf "%3d|", $row;
+ print " "x(4*($row-1));
+ printf "%4d", $row*$_ for $row..11;
+ print "\n";
+}
diff --git a/challenge-033/paulo-custodio/python/ch-1.py b/challenge-033/paulo-custodio/python/ch-1.py
new file mode 100644
index 0000000000..bee81c7d25
--- /dev/null
+++ b/challenge-033/paulo-custodio/python/ch-1.py
@@ -0,0 +1,55 @@
+#!/usr/bin/python3
+
+# Challenge 033
+#
+# Task #1
+# Count Letters (A..Z)
+# Create a script that accepts one or more files specified on the command-line
+# and count the number of times letters appeared in the files.
+#
+# So with the following input file sample.txt
+#
+# The quick brown fox jumps over the lazy dog.
+# the script would display something like:
+#
+# a: 1
+# b: 1
+# c: 1
+# d: 1
+# e: 3
+# f: 1
+# g: 1
+# h: 2
+# i: 1
+# j: 1
+# k: 1
+# l: 1
+# m: 1
+# n: 1
+# o: 4
+# p: 1
+# q: 1
+# r: 2
+# s: 1
+# t: 2
+# u: 2
+# v: 1
+# w: 1
+# x: 1
+# y: 1
+# z: 1
+
+import fileinput
+import sys
+from collections import defaultdict
+
+# collect
+count = defaultdict(lambda: 0)
+for line in fileinput.input():
+ for c in line:
+ if c.isalpha():
+ count[c.lower()] += 1
+
+# output
+for key in sorted(count):
+ print(f"{key}: {count[key]}")
diff --git a/challenge-033/paulo-custodio/python/ch-2.py b/challenge-033/paulo-custodio/python/ch-2.py
new file mode 100644
index 0000000000..c7ebd913b5
--- /dev/null
+++ b/challenge-033/paulo-custodio/python/ch-2.py
@@ -0,0 +1,36 @@
+#!/usr/bin/python3
+
+# Challenge 033
+#
+# Task #2
+# Formatted Multiplication Table
+# Write a script to print 11x11 multiplication table, only the top half triangle.
+#
+# x| 1 2 3 4 5 6 7 8 9 10 11
+# ---+--------------------------------------------
+# 1| 1 2 3 4 5 6 7 8 9 10 11
+# 2| 4 6 8 10 12 14 16 18 20 22
+# 3| 9 12 15 18 21 24 27 30 33
+# 4| 16 20 24 28 32 36 40 44
+# 5| 25 30 35 40 45 50 55
+# 6| 36 42 48 54 60 66
+# 7| 49 56 63 70 77
+# 8| 64 72 80 88
+# 9| 81 90 99
+# 10| 100 110
+# 11| 121
+
+# print header
+print(" x|", end="")
+for col in range(1, 12):
+ print(f"{col:4d}", end="")
+print("")
+print("---+", "-"*(11*4), sep="")
+
+# print table
+for row in range(1, 12):
+ print(f"{row:3d}|", end="")
+ print(" "*(4*(row-1)), end="")
+ for col in range(row, 12):
+ print(f"{row*col:4d}", end="")
+ print("")
diff --git a/challenge-033/paulo-custodio/sample.txt b/challenge-033/paulo-custodio/sample.txt
new file mode 100644
index 0000000000..2fe6575e76
--- /dev/null
+++ b/challenge-033/paulo-custodio/sample.txt
@@ -0,0 +1 @@
+The quick brown fox jumps over the lazy dog.
diff --git a/challenge-033/paulo-custodio/t/test-1.yaml b/challenge-033/paulo-custodio/t/test-1.yaml
new file mode 100644
index 0000000000..894d074083
--- /dev/null
+++ b/challenge-033/paulo-custodio/t/test-1.yaml
@@ -0,0 +1,31 @@
+- setup:
+ cleanup:
+ args: sample.txt
+ input:
+ output: |
+ |a: 1
+ |b: 1
+ |c: 1
+ |d: 1
+ |e: 3
+ |f: 1
+ |g: 1
+ |h: 2
+ |i: 1
+ |j: 1
+ |k: 1
+ |l: 1
+ |m: 1
+ |n: 1
+ |o: 4
+ |p: 1
+ |q: 1
+ |r: 2
+ |s: 1
+ |t: 2
+ |u: 2
+ |v: 1
+ |w: 1
+ |x: 1
+ |y: 1
+ |z: 1
diff --git a/challenge-033/paulo-custodio/t/test-2.yaml b/challenge-033/paulo-custodio/t/test-2.yaml
new file mode 100644
index 0000000000..6188568fb4
--- /dev/null
+++ b/challenge-033/paulo-custodio/t/test-2.yaml
@@ -0,0 +1,18 @@
+- setup:
+ cleanup:
+ args:
+ input:
+ output: |
+ | x| 1 2 3 4 5 6 7 8 9 10 11
+ |---+--------------------------------------------
+ | 1| 1 2 3 4 5 6 7 8 9 10 11
+ | 2| 4 6 8 10 12 14 16 18 20 22
+ | 3| 9 12 15 18 21 24 27 30 33
+ | 4| 16 20 24 28 32 36 40 44
+ | 5| 25 30 35 40 45 50 55
+ | 6| 36 42 48 54 60 66
+ | 7| 49 56 63 70 77
+ | 8| 64 72 80 88
+ | 9| 81 90 99
+ | 10| 100 110
+ | 11| 121