diff options
Diffstat (limited to 'challenge-064/paulo-custodio/python')
| -rw-r--r-- | challenge-064/paulo-custodio/python/ch-1.py | 60 | ||||
| -rw-r--r-- | challenge-064/paulo-custodio/python/ch-2.py | 52 |
2 files changed, 112 insertions, 0 deletions
diff --git a/challenge-064/paulo-custodio/python/ch-1.py b/challenge-064/paulo-custodio/python/ch-1.py new file mode 100644 index 0000000000..54982caa27 --- /dev/null +++ b/challenge-064/paulo-custodio/python/ch-1.py @@ -0,0 +1,60 @@ +#!/usr/bin/env python3 + +# Challenge 064 +# +# TASK #1 > Minimum Sum Path +# Submitted by: Mohammad S Anwar +# Reviewed by: Ryan Thompson +# +# Given an m x n matrix with non-negative integers, write a script to find a +# path from top left to bottom right which minimizes the sum of all numbers +# along its path. You can only move either down or right at any point in time. +# +# Example +# Input: +# +# [ 1 2 3 ] +# [ 4 5 6 ] +# [ 7 8 9 ] +# The minimum sum path looks like this: +# +# 1?2?3 +# ? +# 6 +# ? +# 9 +# Thus, your script could output: 21 ( 1 ? 2 ? 3 ? 6 ? 9 ) + +import unittest +import sys + +def min_sum(m): + min_sum = [sys.maxsize] # Using a list to simulate a global variable + + def min_sum1(sum, r, c, m): + rows = len(m) + cols = len(m[0]) + sum += m[r][c] + if r == rows - 1 and c == cols - 1: # reached end + if sum < min_sum[0]: + min_sum[0] = sum + else: + if r + 1 < rows: + min_sum1(sum, r + 1, c, m) + if c + 1 < cols: + min_sum1(sum, r, c + 1, m) + + min_sum1(0, 0, 0, m) + return min_sum[0] + +class TestMinSum(unittest.TestCase): + def test_min_sum(self): + m = [ + [1, 2, 3], + [4, 5, 6], + [7, 8, 9] + ] + self.assertEqual(min_sum(m), 21) + +if __name__ == '__main__': + unittest.main() diff --git a/challenge-064/paulo-custodio/python/ch-2.py b/challenge-064/paulo-custodio/python/ch-2.py new file mode 100644 index 0000000000..12034bea57 --- /dev/null +++ b/challenge-064/paulo-custodio/python/ch-2.py @@ -0,0 +1,52 @@ +#!/usr/bin/env perl + +# Challenge 064 +# +# TASK #2 > Word Break +# Submitted by: Mohammad S Anwar +# +# You are given a string $S and an array of words @W. +# +# Write a script to find out if $S can be split into sequence of one or more +# words as in the given @W. +# +# Print the all the words if found otherwise print 0. +# +# Example 1: +# Input: +# +# $S = "perlweeklychallenge" +# @W = ("weekly", "challenge", "perl") +# +# Output: +# +# "perl", "weekly", "challenge" +# Example 2: +# Input: +# +# $S = "perlandraku" +# @W = ("python", "ruby", "haskell") +# +# Output: +# +# 0 as none matching word found. + +import itertools +import unittest + +def word_break(S, *W): + k = len(W) + for words in itertools.permutations(W): + if ''.join(words) == S: + return ' '.join(W) + return "0" + +class TestWordBreak(unittest.TestCase): + def test_word_break(self): + self.assertEqual(word_break("perlweeklychallenge", "weekly", "challenge", "perl"), + "weekly challenge perl") + self.assertEqual(word_break("perlandraku", "python", "ruby", "haskell"), + "0") + +if __name__ == '__main__': + unittest.main() |
