| import sys | |||||
| def op(a, trans=str.maketrans('01', '10')): | |||||
| return a + '0' + a[::-1].translate(trans) | |||||
| def checksum(string): | |||||
| return ''.join('01'[a == b] for a, b in zip(string[::2], string[1::2])) | |||||
| def expand(string, lim): | |||||
| while len(string) < lim: | |||||
| string = op(string) | |||||
| string = string[:lim] | |||||
| chk = checksum(string) | |||||
| while len(chk) % 2 == 0: | |||||
| chk = checksum(chk) | |||||
| return chk | |||||
| text = sys.stdin.read().strip() | |||||
| print(expand(text, 272)) | |||||
| print(expand(text, 35651584)) |
| 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])) |
| import sys | |||||
| def march(text): | |||||
| base = '.' + text + '.' | |||||
| for i in range(len(text)): | |||||
| yield '.^'[base[i:i + 3] in {'^^.', '.^^', '^..', '..^'}] | |||||
| text = sys.stdin.read().strip() | |||||
| seen = [text] | |||||
| for i in range(400_000): | |||||
| seen.append(''.join(march(seen[-1]))) | |||||
| print(''.join(seen[:40]).count('.')) | |||||
| print(''.join(seen[:400_000]).count('.')) |