Advertisement
faubiguy

unbracket.py

Nov 3rd, 2014
311
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.65 KB | None | 0 0
  1. #!/usr/bin/python3
  2. import sys, itertools, re
  3.  
  4. def prime(n):
  5.     primes = []
  6.    
  7.     for number in itertools.count(2):
  8.         if all(number%prime for prime in primes):
  9.             primes.append(number)
  10.             if len(primes) == n:
  11.                 break
  12.    
  13.     return primes[-1]
  14.  
  15. def unbracket(brackets):
  16.     result = 1
  17.     counter = 0
  18.     substring = ''
  19.     for char in brackets:
  20.         if char == '<':
  21.             counter += 1
  22.         elif char == '>':
  23.             counter -= 1
  24.         else:
  25.             sys.exit('Invalid character')
  26.         if counter < 0:
  27.             sys.exit('Unmatched brackets')
  28.         substring += char
  29.         if counter == 0:
  30.             result *= prime(unbracket(substring[1:-1]))
  31.             substring = ''
  32.     if counter > 0:
  33.         sys.exit('Unmatched brackets')
  34.     return result
  35.  
  36. brackets = ''.join(sys.argv[1:]) if len(sys.argv) > 1 else sys.stdin.read()
  37. #brackets = brackets.translate(str.maketrans('', '', string.whitespace))
  38. brackets = re.sub(r'\s', '', brackets)
  39. brackets = re.sub(r'[oO0\.◇☐□◯〇۝•]', '<>', brackets)
  40. brackets = re.sub(r'[{[(^1◠⸦⎴]', '<', brackets)
  41. brackets = re.sub(r'[}\])vV0◡⸧⎵]', '>', brackets)
  42. brackets = re.sub(r'[⟪⟦⦃«]', '<<', brackets)
  43. brackets = re.sub(r'[⟫⟧⦄»]', '>>', brackets)
  44. brackets = re.sub(r'[⊙۞]', '<<>>', brackets)
  45. brackets = re.sub(r'[⚇]', '<<><>>', brackets)
  46. brackets = re.sub(r'[:∞]', '<><>', brackets)
  47. brackets = re.sub(r'[xX]', '><', brackets)
  48. brackets = re.sub(r'[⚀⚁⚂⚃⚄⚅]', lambda x:'<'+(ord(x.group(0))-9855)*'<>'+'>', brackets)
  49. #brackets = re.sub(r'\(\.+\)', lambda x:x.group(0)[1:-1].replace('.', '<>'), brackets)
  50. brackets = re.sub(r'[a-z]', lambda x:(ord(x.group(0))-96)*'<'+(ord(x.group(0))-96)*'>', brackets)
  51.  
  52. print(brackets)
  53. print(unbracket(brackets))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement