|
- import sys
-
- import toolkit
-
-
- def advance(path, pos):
- digest = toolkit.md5(text + path)
- for d in [d for d, c in zip('UDLR', digest) if c in 'bcdef']:
- path1 = path + d
- new1 = pos + mapping[d]
- if 0 <= new1.real <= 3 and 0 <= new1.imag <= 3:
- yield path1, new1
-
-
- text = sys.stdin.read().strip()
- mapping = {'U': -1j, 'D': 1j, 'L': -1, 'R': 1}
- edge = {('', 0)}
- valid = []
- while edge:
- edge = {new for old in edge for new in advance(*old)}
- valid += [new for new in edge if new[1] == 3 + 3j]
- edge -= set(valid)
- print(valid[0][0])
- print(len(valid[-1][0]))
|