Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
First solution in Uncategorized category for Digits Doublets by Kurush
# migrated from python 2.7
from collections import deque
import copy
def checkio(numbers):
network_dict = dict()
visited_dict = dict()
for number1 in numbers:
for number2 in numbers:
if (number1 not in network_dict):
network_dict[number1] = set()
visited_dict[number1] = 0
if (number2 not in network_dict):
network_dict[number2] = set()
visited_dict[number2] = 0
if number_of_differs(str(number1), str(number2)) == 1:
network_dict[number1].add(number2)
network_dict[number2].add(number1)
path = [numbers[0]]
current = numbers[0]
target = numbers[-1]
search_queue = deque()
search_queue.append([current, path]);
while True:
if not search_queue: break
current, path = search_queue.popleft()
visited_dict[current] = 1
for elem in network_dict[current]:
if elem == target:
path.append(elem)
return path
else:
if visited_dict[elem] == 0:
new_path = copy.deepcopy(path)
new_path.append(elem)
search_queue.append([elem, new_path])
def number_of_differs(str1, str2):
count = 0
for i in range(len(str1)):
if str1[i] != str2[i]:
count += 1
return count
#These "asserts" using only for self-checking and not necessary for auto-testing
if __name__ == '__main__':
assert checkio([123, 991, 323, 321, 329, 121, 921, 125, 999]) == [123, 121, 921, 991, 999], "First"
assert checkio([111, 222, 333, 444, 555, 666, 121, 727, 127, 777]) == [111, 121, 127, 727, 777], "Second"
assert checkio([456, 455, 454, 356, 656, 654]) == [456, 454, 654], "Third, [456, 656, 654] is correct too"
June 22, 2014