diff --git a/other/paragraphFormatting.py b/other/paragraphFormatting.py new file mode 100644 index 0000000..0e6b745 --- /dev/null +++ b/other/paragraphFormatting.py @@ -0,0 +1,98 @@ + +def extraSpace(S, M, i, j): + """ + Computes the number of extra characters at the end of + the line. + Between each word there is only once space. + + :param S: List of words + :param M: Max length of line + :param i: start word index + :param j: end word index + """ + extraSpaces = M - j + i + for x in range(i, j + 1): + extraSpaces -= len(S[x]) + return extraSpaces + + +def badnessLine(S, M, i, j): + """ + Computes Line badness. This is the number of + extra spaces or infinity if the length exceeds M + + :param S: List of words + :param M: Max length of line + :param i: start word index + :param j: end word index + """ + es = extraSpace(S, M, i, j) + if es < 0: + return float("infinity") + return es + + +def minBad(S, M, i): + """ + Computes the badness of a paragraph as the + badness of the worst line in the paragraph not + including the last line. + + *this is recursive + + :param S: List of words + :param M: Max length of line + :param i: start word index + """ + if len(S) == 0: + return 0 + + # Calculate the current line's badness + curBad = 0 + + k = i + while curBad > badnessLine(S, M, i, k): + curBad = badnessLine(S, M, i, k) + k = k + 1 + + return max(curBad, badnessLine(S, M, k)) + + + +def minBadDynamic(S, M): + """ + Write a procedure minBadDynamic that implements + the function mb' using dynamic program- + ming. It should take only two parameters: S and M + + :param S: List of words + :param M: Max length of line + """ + pass + + +def minBadDynamicChoice(S, M): + """ + Write a procedure minBadDynamicChoice that implements + the function mb 0 using dynamic + programming. In addition to returning mb(S, M ), it + should also return the choices made + + :param S: List of words + :param M: Max length of line + """ + pass + + +def printParagraph(S, M): + """ + which takes two parameters: S and M that displays the words in S on + the screen using the choices of minBadDynamicChoice. + + What is the asymptotic running time of your + algorithm? + + :param S: List of words + :param M: Max length of line + """ + pass