Advertisement
Guest User

Untitled

a guest
Jan 24th, 2020
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.05 KB | None | 0 0
  1. import re
  2. from functools import reduce
  3.  
  4. subs = {
  5.     "ac": "ca",
  6.     "ad": "da",
  7.     "bc": "cb",
  8.     "bd": "db",
  9.     "ce": "eca",
  10.     "de": "edb",
  11.     "cca": "ccae"
  12. }
  13.  
  14. rev_subs = {v: k for k, v in subs.items()}
  15. subs = {**subs, **rev_subs}
  16.  
  17. print(len(subs))
  18.  
  19. keys = list(subs.keys())
  20. all_keys = reduce(lambda x, y: x + "|" + y, keys[1:], keys[0])
  21.  
  22. visited = set()
  23.  
  24.  
  25. def equivalent(curr, goal):
  26.     if curr == goal:
  27.         return True
  28.  
  29.     if curr in visited:
  30.         # print("already visited: ", curr)
  31.         return False
  32.  
  33.     visited.add(curr)
  34.  
  35.     matches = [(m.start(), m.end()) for m in re.finditer(all_keys, curr)]
  36.  
  37.     for s, e in matches:
  38.         if equivalent(curr[:s] + subs[curr[s:e]] + curr[e:], goal):
  39.             print("replacing: ", curr[s:e], "->",
  40.                   subs[curr[s:e]], " in ", curr)
  41.             return True
  42.  
  43.     return False
  44.  
  45.  
  46. print(equivalent("bccdbc", "cbabd"))
  47. print("\n\n")
  48.  
  49.  
  50. print(equivalent("cadbcedb", "caccaebd"))
  51. print("\n\n")
  52.  
  53. print(equivalent("aecdab", "cade"))
  54. print("aecdab")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement