aboutsummaryrefslogtreecommitdiff
path: root/challenge-266/sgreen/python
diff options
context:
space:
mode:
Diffstat (limited to 'challenge-266/sgreen/python')
-rwxr-xr-xchallenge-266/sgreen/python/ch-1.py38
-rwxr-xr-xchallenge-266/sgreen/python/ch-2.py45
-rwxr-xr-xchallenge-266/sgreen/python/test.py43
3 files changed, 126 insertions, 0 deletions
diff --git a/challenge-266/sgreen/python/ch-1.py b/challenge-266/sgreen/python/ch-1.py
new file mode 100755
index 0000000000..bc0372dc4c
--- /dev/null
+++ b/challenge-266/sgreen/python/ch-1.py
@@ -0,0 +1,38 @@
+#!/usr/bin/env python3
+
+from collections import defaultdict
+import sys
+
+
+def uncommon_words(*strings) -> list:
+ """Find words that only occur once in one string, and don't appear in others
+
+ Params:
+ strings: One or more strings
+
+ Returns:
+ list: Words that meat the criteria
+ """
+ freq = defaultdict(int)
+
+ # Compute the frequency of each word
+ for string in strings:
+ for word in string.split(' '):
+ freq[word] += 1
+
+ # Return the word(s) that appear only once
+ return [w for w in freq if freq[w] == 1]
+
+
+def main():
+ result = uncommon_words(*sys.argv[1:])
+
+ if len(result) == 0:
+ # If there is no result, show an empty string
+ print("('')")
+ else:
+ print("('" + "', '".join(result) + "')")
+
+
+if __name__ == '__main__':
+ main()
diff --git a/challenge-266/sgreen/python/ch-2.py b/challenge-266/sgreen/python/ch-2.py
new file mode 100755
index 0000000000..d0df7257ee
--- /dev/null
+++ b/challenge-266/sgreen/python/ch-2.py
@@ -0,0 +1,45 @@
+#!/usr/bin/env python3
+
+import json
+import sys
+
+
+def x_matrix(matrix: list) -> bool:
+ """Determine if the matrix is a X Matrix
+
+ Args:
+ matrix (list): The supplied matrix
+
+ Returns:
+ bool: Wether the matrix as a X Matrix or not
+ """
+ rows = len(matrix)
+
+ # Check we have a square
+ for row in range(rows):
+ if len(matrix[row]) != rows:
+ raise ValueError("Please specify a square matrix")
+
+ # Check that all the values are correct
+ for row in range(rows):
+ for col in range(rows):
+ if col == row or col == rows - 1 - row:
+ # We are expecting a non-zero value
+ if matrix[row][col] == 0:
+ return False
+ elif matrix[row][col] != 0:
+ # We are expecting a zero value
+ return False
+
+ return True
+
+
+def main():
+ # Parse the matrix from the input
+ matrix = json.loads(sys.argv[1])
+ result = x_matrix(matrix)
+ print('true' if result else 'false')
+
+
+if __name__ == '__main__':
+ main()
diff --git a/challenge-266/sgreen/python/test.py b/challenge-266/sgreen/python/test.py
new file mode 100755
index 0000000000..22886bc8d7
--- /dev/null
+++ b/challenge-266/sgreen/python/test.py
@@ -0,0 +1,43 @@
+#!/usr/bin/env python3
+
+import unittest
+ch_1 = __import__('ch-1')
+ch_2 = __import__('ch-2')
+
+
+class TestClass(unittest.TestCase):
+ def test_ch_1(self):
+ self.assertEqual(
+ ch_1.uncommon_words('Mango is sweet', 'Mango is sour'),
+ ['sweet', 'sour']
+ )
+ self.assertEqual(
+ ch_1.uncommon_words('Mango Mango', 'Orange'),
+ ['Orange']
+ )
+ self.assertEqual(
+ ch_1.uncommon_words('Mango is Mango', 'Orange is Orange'),
+ []
+ )
+
+ def test_ch_2(self):
+ self.assertTrue(ch_2.x_matrix([
+ [1, 0, 0, 2],
+ [0, 3, 4, 0],
+ [0, 5, 6, 0],
+ [7, 0, 0, 1],
+ ]))
+ self.assertFalse(ch_2.x_matrix([
+ [1, 2, 3],
+ [4, 5, 6],
+ [7, 8, 9],
+ ]))
+ self.assertTrue(ch_2.x_matrix([
+ [1, 0, 2],
+ [0, 3, 0],
+ [4, 0, 5],
+ ]))
+
+
+if __name__ == '__main__':
+ unittest.main()