Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
First solution in Clear category for Digits Doublets by LexCavalera
# migrated from python 2.7
class Number(object):
def __init__(self, number):
self.number = str(number)
self.parent = None
def set_parent(self, parent):
self.parent = parent
def is_neighbour(self, other):
differents = 0
for i in range(len(self.number)):
if self.number[i] != other.number[i]:
differents += 1
return differents == 1
def checkio(numbers):
doublets_numbers = list(map(Number, numbers))
last_number = doublets_numbers[-1]
to_search = [doublets_numbers.pop(0)]
while to_search:
current_number = to_search.pop(0)
for number in doublets_numbers[:]:
if current_number.is_neighbour(number):
number.set_parent(current_number)
if number == last_number:
result = [int(number.number)]
while number.parent:
number = number.parent
result.insert(0, int(number.number))
return result
doublets_numbers.remove(number)
to_search.append(number)
#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]) in ([456, 454, 654], [456, 656, 654]), "Third, [456, 656, 654] is correct too"
Feb. 17, 2014