Advertisement
Guest User

Untitled

a guest
Mar 30th, 2020
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.87 KB | None | 0 0
  1. import os
  2.  
  3.  
  4. class Node:
  5. def __init__(self, value):
  6. self.children = {}
  7. self.value = value
  8. self.terminates = False
  9.  
  10. def __str__(self):
  11. return str(self.children)
  12.  
  13. def __repr__(self):
  14. return str(self.children)
  15.  
  16.  
  17. def build_trie(words_list):
  18. trie = {}
  19. for word in words_list:
  20. items = trie
  21. for i, letter in enumerate(word):
  22. if letter not in items:
  23. items[letter] = Node(letter)
  24. if i == len(word)-1:
  25. items[letter].terminates = True
  26. items = items[letter].children
  27. return trie
  28.  
  29.  
  30. def shift(letter, k):
  31. new_ord = ord(letter) + k
  32. if new_ord > ord('z'):
  33. new_ord -= k_range + 1
  34. return chr(new_ord)
  35.  
  36.  
  37. def search(word, k_range):
  38. for k in range(k_range+1):
  39. i = 0
  40. shifted_word = []
  41. items = trie
  42. while True:
  43. shifted_l = shift(word[i], k)
  44. try:
  45. node = items[shifted_l]
  46. items = node.children
  47. shifted_word.append(shifted_l)
  48. i += 1
  49. if i == len(word):
  50. if node.terminates:
  51. return ''.join(shifted_word)
  52. break
  53. except KeyError:
  54. break
  55. return ''
  56.  
  57.  
  58. if __name__ == "__main__":
  59. # text = 'a abb bab abc abc'
  60. # words = ['q', 'bcc', 'aza', 'abc', 'z', 'def']
  61.  
  62. text = input()
  63. n = int(input())
  64. words = []
  65. for i in range(n):
  66. words.append(input().strip('\n'))
  67.  
  68. ordz = ord('z')
  69. orda = ord('a')
  70. k_range = ordz - orda
  71.  
  72. trie = build_trie(text.split(' '))
  73. if trie:
  74. res = []
  75. for word in words:
  76. if word:
  77. res.append(search(word, k_range))
  78. os.write(1, str.encode("\n".join(res)))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement