Mr_HO1A

Sorted Spell Mockvita

Jun 8th, 2019
35
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.40 KB | None | 0 0
  1. # Mockvita Question 2 [Sorted Spell]
  2. # Author - Aman Vishwakarma [L1]
  3.  
  4. # Utility function to convert number to strings
  5. def num2words(num,join=True):
  6.     '''words = {} convert an integer number into words'''
  7.     units = ['', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']
  8.     teens = ['', 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', \
  9.              'seventeen', 'eighteen', 'nineteen']
  10.     tens = ['', 'ten', 'twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', \
  11.             'eighty', 'ninety']
  12.     thousands = ['', 'thousand', 'million', 'billion', 'trillion', 'quadrillion', \
  13.                  'quintillion', 'sextillion', 'septillion', 'octillion', \
  14.                  'nonillion', 'decillion', 'undecillion', 'duodecillion', \
  15.                  'tredecillion', 'quattuordecillion', 'sexdecillion', \
  16.                  'septendecillion', 'octodecillion', 'novemdecillion', \
  17.                  'vigintillion']
  18.     words = []
  19.     if num == 0:
  20.         words.append('zero')
  21.     else:
  22.         numStr = '%d' % num
  23.         numStrLen = len(numStr)
  24.         groups = (numStrLen + 2) // 3
  25.         numStr = numStr.zfill(groups * 3)
  26.         for i in range(0, groups * 3, 3):
  27.             h, t, u = int(numStr[i]), int(numStr[i + 1]), int(numStr[i + 2])
  28.             g = groups - (i / 3 + 1)
  29.             if h >= 1:
  30.                 words.append(units[h])
  31.                 words.append('hundred')
  32.             if t > 1:
  33.                 words.append(tens[t])
  34.                 if u >= 1: words.append(units[u])
  35.             elif t == 1:
  36.                 if u >= 1:
  37.                     words.append(teens[u])
  38.                 else:
  39.                     words.append(tens[t])
  40.             else:
  41.                 if u >= 1: words.append(units[u])
  42.             if (g >= 1) and ((h + t + u) > 0): words.append(thousands[g] + ',')
  43.     if join: return ' '.join(words)
  44.     return words
  45.  
  46. # Utility Function to give list of sorted spelling
  47. def sortedSpelling(numbers):
  48.     spellings = []
  49.     for number in numbers:
  50.         spellings.append(num2words(number))
  51.     spellings.sort()
  52.     return spellings
  53.  
  54. # Utility Function to give sorted spelling numbers
  55. def sortedSpellingNumbers(spellings,numbers):
  56.     sortedNumbers = [0,0]
  57.     for number in numbers:
  58.         sortedNumbers[spellings.index(num2words(number))] = number
  59.     return sortedNumbers
  60.  
  61. # Main Driver Function
  62. def Driver(M,N):
  63.     # Initial Sorting
  64.     numberSortedList = [int(M),int(N)]
  65.     numberSortedList.sort()
  66.     # Initial Spelling Sorting
  67.     spellingSortedList = sortedSpelling(numberSortedList)
  68.     numberSpellSorted = sortedSpellingNumbers(spellingSortedList,numberSortedList)
  69.     while numberSortedList[0] != numberSortedList[1] and numberSpellSorted[0] != numberSpellSorted[1]:
  70.         if numberSortedList[0] > 99999 or numberSortedList[1] > 99999:
  71.             print("Out of Bounds")
  72.             exit(0)
  73.         # Add numbers condition
  74.         numberSortedList[0] = numberSortedList[0] + numberSpellSorted[0]
  75.         numberSortedList[1] = numberSortedList[1] + numberSpellSorted[1]
  76.         # Now Sort Above Numbers
  77.         numberSpellSorted.sort()
  78.         # Now Spelling Sorted
  79.         spellingSortedList = sortedSpelling(numberSortedList)
  80.         numberSpellSorted = sortedSpellingNumbers(spellingSortedList, numberSortedList)
  81.     print(numberSortedList[0])
  82.  
  83.  
  84. # Take input from users
  85. N,M = input().split()
  86. Driver(M,N)
Add Comment
Please, Sign In to add comment