aboutsummaryrefslogtreecommitdiff
path: root/challenge-264/jeanluc2020/python/ch-1.py
diff options
context:
space:
mode:
Diffstat (limited to 'challenge-264/jeanluc2020/python/ch-1.py')
-rwxr-xr-xchallenge-264/jeanluc2020/python/ch-1.py73
1 files changed, 73 insertions, 0 deletions
diff --git a/challenge-264/jeanluc2020/python/ch-1.py b/challenge-264/jeanluc2020/python/ch-1.py
new file mode 100755
index 0000000000..7b2d21c5d8
--- /dev/null
+++ b/challenge-264/jeanluc2020/python/ch-1.py
@@ -0,0 +1,73 @@
+#!/usr/bin/python3
+# https://theweeklychallenge.org/blog/perl-weekly-challenge-264/#TASK1
+#
+# Task 1: Greatest English Letter
+# ===============================
+#
+# You are given a string, $str, made up of only alphabetic characters [a..zA..Z].
+#
+# Write a script to return the greatest english letter in the given string.
+#
+### A letter is greatest if it occurs as lower and upper case. Also letter
+### ‘b’ is greater than ‘a’ if ‘b’ appears after ‘a’ in the English alphabet.
+#
+## Example 1
+##
+## Input: $str = 'PeRlwEeKLy'
+## Output: L
+##
+## There are two letters E and L that appears as lower and upper.
+## The letter L appears after E, so the L is the greatest english letter.
+#
+## Example 2
+##
+## Input: $str = 'ChaLlenge'
+## Output: L
+#
+## Example 3
+##
+## Input: $str = 'The'
+## Output: ''
+#
+############################################################
+##
+## discussion
+##
+############################################################
+#
+# First, we split the input string into its characters. We then
+# calculate the lowercase version of the character. We fill some
+# data into a hash of hashes:
+# - The key of the outermost hash is the lowercase version of the
+# character
+# - The key of the inner hash is the character in its original form
+# - The value of the inner hash is just a true value
+# This way, if both the upper- and lowercase form of a character are
+# in the input string, the corresponding inner hash for the character
+# will have two keys (the upper- and lowercase version).
+# Now we simply walk through the reverse sorted keys of the outer hash.
+# As soon as we find a character that has both upper- and lowercase
+# versions in its inner hash, we have found the Greatest English Letter
+# and can finish the loop.
+
+def greatest_english_letter(str: str) -> None:
+ all = {}
+ output = "''"
+ print(f"Input: {str}")
+ for c in list(str):
+ c_l = c.lower()
+ if c_l not in all:
+ all[c_l] = {c: 1}
+ else:
+ if c not in all[c_l]:
+ all[c_l][c] = 1
+ for c in reversed(sorted(list(all.keys()))):
+ if len(all[c].keys()) == 2:
+ output = c.upper()
+ break
+ print(f"Output: {output}")
+
+greatest_english_letter('PeRlwEeKLy');
+greatest_english_letter('ChaLlenge');
+greatest_english_letter('The');
+