#################################################################
##  CS 3600 (Winter 2025), Assignment #2                       ##
##  Program File Name: myMSRClasses.py                         ##
##       Student Name: Todd Wareham                            ##
##         Login Name: harold                                  ##
##              MUN #: 8008765                                 ##
#################################################################

## Provided classes for Assigment #2.
##
##      *** DO NOT CHANGE THE CODE IN THIS FILE ***
##


## MSR class; this class contains both a specification of the given instance of
##  the MSR problem (namely, lower-case alphabetical strings s1 and s2) and the
##   value and backpointer matrices ((|s1| + 1) x (|s2| + 1) integer matrix M
##   and |s1| x |s2| integer matrix B) associated with the solution of this 
##   instance by dynamic propgramming.

## Attributes:
##   char[]   s1, s2
##   int[][]  M, B


class MSR:

   def __init__(self, filename):
      f = open(filename, "r+")
      self.s1 = (f.readline().split("=")[1]).strip()
      self.s2 = (f.readline().split("=")[1]).strip()
      f.close()
      self.M = []
      self.B = []
      for i in range(len(self.s1) + 1):
         temp = [0.0 for j in range(len(self.s2) + 1)]
         self.M.append(temp)
         temp = [0 for j in range(len(self.s2) + 1)]
         self.B.append(temp)

   def getS1(self):
      return(self.s1)
      
   def getS2(self):
      return(self.s2)
      
   def getMatrixM(self):
      return(self.M)
      
   def getMatrixB(self):
      return(self.B)
      
   def setMatrixM(self, M):
      self.M = M
      
   def setMatrixB(self, B):
      self.B = B
      
   def printMatrices(self):

      print("DP Value Matrix (M):\n\n        S2       ", end="")
      for j in range(len(self.s2)):
         print("  {0:1s}   ".format(self.s2[j]), end = "")
      print("\n\n         ", end="")
      for j in range(len(self.s2) + 1):
         print("  {0:3d} ".format(j), end = "")
      print("\n S1")
      for i in range(len(self.s1) + 1):
         if (i == 0):
            print("    {0:3d}: ".format(i), end="")
         else:
            print("  {0:1s} {1:3d}: ".format(self.s1[i-1], i), end="")
         for j in range(len(self.s2) + 1):
            print(" {0:5.2f}".format(self.M[i][j]), end="")
         print()

      print("\nDP Backpointer Matrix (B):\n\n        S2    ", end="")
      for j in range(len(self.s2)):
         print("  {0:1s} ".format(self.s2[j]), end = "")
      print("\n\n         ", end="")
      for j in range(len(self.s2) + 1):
         print(" {0:3d}".format(j), end = "")
      print("\n S1")
      for i in range(len(self.s1) + 1):
         if (i == 0):
            print("    {0:3d}: ".format(i), end="")
         else:
            print("  {0:1s} {1:3d}: ".format(self.s1[i-1], i), end="")
         for j in range(len(self.s2) + 1):
            print(" {0:3d}".format(self.B[i][j]), end="")
         print()

