|
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- import itertools
- import sys
-
- from intcode import compute
-
-
- '''
- . . . . . . . . . . . . . . . . . .
-
- . . . . . . . . . . . . . . . . . .
-
- . . . . . . . . . . . . . . . . . .
-
- . . . . . . . # . . . . . . . . . .
- |
- . . . . . . @-@-#-# . . . . . . . .
- |
- . . . . . . . . C . . . . . . . . .
- |
- . . . . . . . @ @-@ . . . . . . . .
- | | |
- . . . . . . #-#-# #w@w@ . . . . . .
- | |
- . . . . . . . . Pn@e# # . . . . . .
- e
- . . . . . . . . . . . . . . . . . .
-
- . . . . . . . . . . . . . . . . . .
-
- '''
-
- text = sys.stdin.read()
-
- code = '''
- north
- west
- take mug
- west
- take easter egg
- east
- east
- south
- south
- take asterisk
- south
- west
- north
- take jam
- south
- east
- north
- east
- take klein bottle
- south
- west
- take tambourine
- west
- take cake
- east
- south
- east
- take polygon
- north
- '''
-
- bytes_ = list(code.lstrip().encode())
- items = {line for line in code.splitlines() if line.startswith('take')}
- combos = itertools.combinations(sorted(items), 4)
- last_line = ''
- history = ''
- for c in map(chr, compute(text, iter(bytes_))):
- history += c
- if history.endswith('== Security Checkpoint =='):
- take = next(combos)
- drop = items.difference(take)
- instructions = '\n'.join(
- [line for line in take] +
- [line.replace('take', 'drop') for line in drop] +
- ['east\n']
- )
- bytes_.extend(instructions.encode())
- print(history.splitlines()[-1])
|