Guest User

Untitled

a guest
May 28th, 2016
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.06 KB | None | 0 0
  1. answer = ''
  2.  
  3. def checkio(teleports_string):
  4.     path = []
  5.     done = []
  6.     graph(path, done, teleports_string.split(','), first='1')
  7.     return answer
  8.    
  9.  
  10. def graph(path, done, teleports, first):
  11.     global answer
  12.     path.append(first)
  13.     if set(path) == {'1', '2', '3', '4', '5', '6', '7', '8'} and path[0] == '1' and path[-1] == '1':
  14.         answer = ''.join([x for x in path])
  15.     for i in range(len(teleports)):
  16.         if first in teleports[i] and teleports[i] not in done:
  17.             old_first = first
  18.             pathdone = [len(path), len(done)]
  19.             done.append(teleports[i])
  20.             first = [x for x in teleports[i] if x != first][0]
  21.             graph(path, done, teleports, first)
  22.             done = done[:pathdone[1]]
  23.             path = path[:pathdone[0]]
  24.             first = old_first
  25.  
  26.  
  27. #This part is using only for self-testing
  28. if __name__ == "__main__":
  29.     def check_solution(func, teleports_str):
  30.         route = func(teleports_str)
  31.         teleports_map = [tuple(sorted([int(x), int(y)])) for x, y in teleports_str.split(",")]
  32.         if route[0] != '1' or route[-1] != '1':
  33.             print("The path must start and end at 1")
  34.             return False
  35.         ch_route = route[0]
  36.         for i in range(len(route) - 1):
  37.             teleport = tuple(sorted([int(route[i]), int(route[i + 1])]))
  38.             if not teleport in teleports_map:
  39.                 print("No way from {0} to {1}".format(route[i], route[i + 1]))
  40.                 return False
  41.             teleports_map.remove(teleport)
  42.             ch_route += route[i + 1]
  43.         for s in range(1, 9):
  44.             if not str(s) in ch_route:
  45.                 print("You forgot about {0}".format(s))
  46.                 return False
  47.         return True
  48.  
  49.     assert check_solution(checkio, "12,23,34,45,56,67,78,81"), "First"
  50.     assert check_solution(checkio, "12,28,87,71,13,14,34,35,45,46,63,65"), "Second"
  51.     assert check_solution(checkio, "12,15,16,23,24,28,83,85,86,87,71,74,56"), "Third"
  52.     assert check_solution(checkio, "13,14,23,25,34,35,47,56,58,76,68"), "Fourth"
Advertisement
Add Comment
Please, Sign In to add comment