Advertisement
Guest User

Untitled

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