Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
BFS solution in Clear category for Digits Doublets by amandel
from collections import deque
def checkio(numbers):
adj = lambda u,v: sum(x!=y for x,y in zip(str(u),str(v)))==1
start, end = numbers[-1], numbers[0]
left = set(numbers)
found = {start:start}
q = deque()
left.remove(start)
x = start
while x != end:
nb = {w for w in left if adj(w,x)}
found.update({w:x for w in nb})
q.extend(nb)
left.difference_update(nb)
x = q.popleft()
res = [end]
x = end
while x != (x:=found[x]):
res.append(x)
return res
#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"
Feb. 18, 2025