Skip to content

Instantly share code, notes, and snippets.

@shoark7
Created June 21, 2019 04:16
Show Gist options
  • Select an option

  • Save shoark7/d71697db575368577fee569cb487786d to your computer and use it in GitHub Desktop.

Select an option

Save shoark7/d71697db575368577fee569cb487786d to your computer and use it in GitHub Desktop.
from collections import deque
import math
def reverse_ends(n):
log = int(math.log10(n))
s = n // (10 ** log)
e = n % 10
n = n - e + s
n = n + (e - s) * 10 ** log
return n
def strange_calculator(n):
queue = deque([(1, 1)])
ans = None
cache = set()
while queue:
tmp, tmp_route = queue.popleft()
if tmp == n:
ans = tmp_route
break
reversed = reverse_ends(tmp)
if (reversed != tmp or reversed & (reversed - 1) != 0) and reversed not in cache:
queue.append((reversed, (tmp_route << 1) | 0))
cache.add(reversed)
if tmp * 2 not in cache:
queue.append((tmp * 2, (tmp_route << 1) | 1))
cache.add(tmp * 2)
print(queue[0])
return ans
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment