#!/usr/bin/env python # coding: utf-8 # This notebook was prepared by [Donne Martin](https://github.com/donnemartin). Source and license info is on [GitHub](https://github.com/donnemartin/interactive-coding-challenges). # # Challenge Notebook # ## Problem: Find how many times a sentence can fit on a screen. # # See the [LeetCode](https://leetcode.com/problems/sentence-screen-fitting/) problem page. # #
# Given a rows x cols screen and a sentence represented by a list of non-empty words, find how many times the given sentence can be fitted on the screen. # # Note: # # A word cannot be split into two lines. # The order of words in the sentence must remain unchanged. # Two consecutive words in a line must be separated by a single space. # Total words in the sentence won't exceed 100. # Length of each word is greater than 0 and won't exceed 10. # 1 ≤ rows, cols ≤ 20,000. # Example 1: # # Input: # rows = 2, cols = 8, sentence = ["hello", "world"] # # Output: # 1 # # Explanation: # hello--- # world--- # # The character '-' signifies an empty space on the screen. # Example 2: # # Input: # rows = 3, cols = 6, sentence = ["a", "bcd", "e"] # # Output: # 2 # # Explanation: # a-bcd- # e-a--- # bcd-e- # # The character '-' signifies an empty space on the screen. # Example 3: # # Input: # rows = 4, cols = 5, sentence = ["I", "had", "apple", "pie"] # # Output: # 1 # # Explanation: # I-had # apple # pie-I # had-- # # The character '-' signifies an empty space on the screen. ## # * [Constraints](#Constraints) # * [Test Cases](#Test-Cases) # * [Algorithm](#Algorithm) # * [Code](#Code) # * [Unit Test](#Unit-Test) # * [Solution Notebook](#Solution-Notebook) # ## Constraints # # * Can we assume sentence is ASCII? # * Yes # * Can we assume the inputs are valid? # * No # * Is the output an integer? # * Yes # * Can we assume this fits memory? # * Yes # ## Test Cases # # * None -> TypeError # * rows < 0 or cols < 0 -> ValueError # * cols = 0 -> 0 # * sentence = '' -> 0 # * rows = 2, cols = 8, sentence = ["hello", "world"] -> 1 # * rows = 3, cols = 6, sentence = ["a", "bcd", "e"] -> 2 # * rows = 4, cols = 5, sentence = ["I", "had", "apple", "pie"] -> 1 # ## Algorithm # # Refer to the [Solution Notebook](). If you are stuck and need a hint, the solution notebook's algorithm discussion might be a good place to start. # ## Code # In[ ]: class Solution(object): def count_sentence_fit(self, sentence, rows, cols): # TODO: Implement me pass # ## Unit Test # **The following unit test is expected to fail until you solve the challenge.** # In[ ]: # %load test_count_sentence_fit.py import unittest class TestSolution(unittest.TestCase): def test_count_sentence_fit(self): solution = Solution() self.assertRaises(TypeError, solution.count_sentence_fit, None, None, None) self.assertRaises(ValueError, solution.count_sentence_fit, 'abc', rows=-1, cols=-1) sentence = ["hello", "world"] expected = 1 self.assertEqual(solution.count_sentence_fit(sentence, rows=2, cols=8), expected) sentence = ["a", "bcd", "e"] expected = 2 self.assertEqual(solution.count_sentence_fit(sentence, rows=3, cols=6), expected) sentence = ["I", "had", "apple", "pie"] expected = 1 self.assertEqual(solution.count_sentence_fit(sentence, rows=4, cols=5), expected) print('Success: test_count_sentence_fit') def main(): test = TestSolution() test.test_count_sentence_fit() if __name__ == '__main__': main() # ## Solution Notebook # # Review the [Solution Notebook]() for a discussion on algorithms and code solutions.