aboutsummaryrefslogtreecommitdiff
path: root/challenge-068/paulo-custodio/python
diff options
context:
space:
mode:
Diffstat (limited to 'challenge-068/paulo-custodio/python')
-rw-r--r--challenge-068/paulo-custodio/python/ch-1.py56
-rw-r--r--challenge-068/paulo-custodio/python/ch-2.py39
2 files changed, 95 insertions, 0 deletions
diff --git a/challenge-068/paulo-custodio/python/ch-1.py b/challenge-068/paulo-custodio/python/ch-1.py
new file mode 100644
index 0000000000..6171b18125
--- /dev/null
+++ b/challenge-068/paulo-custodio/python/ch-1.py
@@ -0,0 +1,56 @@
+#!/usr/bin/env python3
+
+# Challenge 068
+#
+# TASK #1 > Zero Matrix
+# Submitted by: Mohammad S Anwar
+# You are given a matrix of size M x N having only 0s and 1s.
+#
+# Write a script to set the entire row and column to 0 if an element is 0.
+#
+# Example 1
+# Input: [1, 0, 1]
+# [1, 1, 1]
+# [1, 1, 1]
+#
+# Output: [0, 0, 0]
+# [1, 0, 1]
+# [1, 0, 1]
+# Example 2
+# Input: [1, 0, 1]
+# [1, 1, 1]
+# [1, 0, 1]
+#
+# Output: [0, 0, 0]
+# [1, 0, 1]
+# [0, 0, 0]
+
+from copy import deepcopy
+import unittest
+
+def zero_matrix(m):
+ orig = deepcopy(m)
+ for r in range(len(m)):
+ for c in range(len(m[0])):
+ if not orig[r][c]:
+ m = zero_row(r, m)
+ m = zero_col(c, m)
+ return m
+
+def zero_row(r, m):
+ for c in range(len(m[0])):
+ m[r][c] = 0
+ return m
+
+def zero_col(c, m):
+ for r in range(len(m)):
+ m[r][c] = 0
+ return m
+
+class TestZeroMatrix(unittest.TestCase):
+ def test_zero_matrix(self):
+ self.assertEqual(zero_matrix([[1, 0, 1], [1, 1, 1], [1, 1, 1]]), [[0, 0, 0], [1, 0, 1], [1, 0, 1]])
+ self.assertEqual(zero_matrix([[1, 0, 1], [1, 1, 1], [1, 0, 1]]), [[0, 0, 0], [1, 0, 1], [0, 0, 0]])
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/challenge-068/paulo-custodio/python/ch-2.py b/challenge-068/paulo-custodio/python/ch-2.py
new file mode 100644
index 0000000000..55e0db5737
--- /dev/null
+++ b/challenge-068/paulo-custodio/python/ch-2.py
@@ -0,0 +1,39 @@
+#!/usr/bin/env python3
+
+# Challenge 068
+#
+# TASK #2 > Reorder List
+# Submitted by: Mohammad S Anwar
+# You are given a singly linked list $L as below:
+#
+# L0 ? L1 ? ... ? Ln-1 ? Ln
+# Write a script to reorder list as below:
+#
+# L0 ? Ln ? L1 ? Ln-1 ? L2 ? Ln-2 ?
+# You are ONLY allowed to do this in-place without altering the nodes' values.
+#
+# Example
+# Input: 1 ? 2 ? 3 ? 4
+# Output: 1 ? 4 ? 2 ? 3
+
+import unittest
+
+def reorder_list(l):
+ # get second element
+ tail = l[1]
+ # get and remove last element
+ p = tail
+ last = None
+ while len(p) > 1:
+ last = p
+ p = p[1]
+ eln = last.pop()
+
+ return [l[0], [eln[0], tail]]
+
+class TestReorderList(unittest.TestCase):
+ def test_reorder_list(self):
+ self.assertEqual(reorder_list([1, [2, [3, [4]]]]), [1, [4, [2, [3]]]])
+
+if __name__ == '__main__':
+ unittest.main()