Added 2017/05
This commit is contained in:
parent
cf139d7a9d
commit
e36ec10c6f
70
2017/05/5.md
Normal file
70
2017/05/5.md
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
## \-\-- Day 5: A Maze of Twisty Trampolines, All Alike \-\--
|
||||||
|
|
||||||
|
An urgent
|
||||||
|
interrupt arrives
|
||||||
|
from the CPU: it\'s trapped in a maze of jump instructions, and it would
|
||||||
|
like assistance from any programs with spare cycles to help find the
|
||||||
|
exit.
|
||||||
|
|
||||||
|
The message includes a list of the offsets for each jump. Jumps are
|
||||||
|
relative: `-1` moves to the previous instruction, and `2` skips the next
|
||||||
|
one. Start at the first instruction in the list. The goal is to follow
|
||||||
|
the jumps until one leads *outside* the list.
|
||||||
|
|
||||||
|
In addition, these instructions are a little strange; after each jump,
|
||||||
|
the offset of that instruction increases by `1`. So, if you come across
|
||||||
|
an offset of `3`, you would move three instructions forward, but change
|
||||||
|
it to a `4` for the next time it is encountered.
|
||||||
|
|
||||||
|
For example, consider the following list of jump offsets:
|
||||||
|
|
||||||
|
0
|
||||||
|
3
|
||||||
|
0
|
||||||
|
1
|
||||||
|
-3
|
||||||
|
|
||||||
|
Positive jumps (\"forward\") move downward; negative jumps move upward.
|
||||||
|
For legibility in this example, these offset values will be written all
|
||||||
|
on one line, with the current instruction marked in parentheses. The
|
||||||
|
following steps would be taken before an exit is found:
|
||||||
|
|
||||||
|
- `(0) 3 0 1 -3 ` - *before* we have taken any steps.
|
||||||
|
- `(1) 3 0 1 -3 ` - jump with offset `0` (that is, don\'t jump at
|
||||||
|
all). Fortunately, the instruction is then incremented to `1`.
|
||||||
|
- ` 2 (3) 0 1 -3 ` - step forward because of the instruction we just
|
||||||
|
modified. The first instruction is incremented again, now to `2`.
|
||||||
|
- ` 2 4 0 1 (-3)` - jump all the way to the end; leave a `4`
|
||||||
|
behind.
|
||||||
|
- ` 2 (4) 0 1 -2 ` - go back to where we just were; increment `-3`
|
||||||
|
to `-2`.
|
||||||
|
- ` 2 5 0 1 -2 ` - jump `4` steps forward, escaping the maze.
|
||||||
|
|
||||||
|
In this example, the exit is reached in `5` steps.
|
||||||
|
|
||||||
|
*How many steps* does it take to reach the exit?
|
||||||
|
|
||||||
|
Your puzzle answer was `381680`.
|
||||||
|
|
||||||
|
## \-\-- Part Two \-\-- {#part2}
|
||||||
|
|
||||||
|
Now, the jumps are even stranger: after each jump, if the offset was
|
||||||
|
*three or more*, instead *decrease* it by `1`. Otherwise, increase it by
|
||||||
|
`1` as before.
|
||||||
|
|
||||||
|
Using this rule with the above example, the process now takes `10`
|
||||||
|
steps, and the offset values after finding the exit are left as
|
||||||
|
`2 3 2 3 -1`.
|
||||||
|
|
||||||
|
*How many steps* does it now take to reach the exit?
|
||||||
|
|
||||||
|
Your puzzle answer was `29717847`.
|
||||||
|
|
||||||
|
Both parts of this puzzle are complete! They provide two gold stars:
|
||||||
|
\*\*
|
||||||
|
|
||||||
|
At this point, you should [return to your Advent calendar](/2017) and
|
||||||
|
try another puzzle.
|
||||||
|
|
||||||
|
If you still want to see it, you can [get your puzzle
|
||||||
|
input](5/input).
|
85
2017/05/solution.py
Normal file
85
2017/05/solution.py
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
#!/bin/python3
|
||||||
|
import sys
|
||||||
|
from pprint import pprint
|
||||||
|
|
||||||
|
input_f = sys.argv[1]
|
||||||
|
|
||||||
|
|
||||||
|
#########################################
|
||||||
|
# #
|
||||||
|
# Part 1 #
|
||||||
|
# #
|
||||||
|
#########################################
|
||||||
|
|
||||||
|
lines = []
|
||||||
|
|
||||||
|
with open(input_f) as file:
|
||||||
|
for line in file:
|
||||||
|
lines.append(int(line.rstrip()))
|
||||||
|
|
||||||
|
curr = 0
|
||||||
|
tmp = 0
|
||||||
|
prev = 0
|
||||||
|
steps=0
|
||||||
|
while curr <= len(lines)-1:
|
||||||
|
steps+=1
|
||||||
|
#print('Start:',lines)
|
||||||
|
#print('Starting at index',curr,'value',lines[curr])
|
||||||
|
prev = curr
|
||||||
|
if curr+lines[curr] > len(lines)-1:
|
||||||
|
break
|
||||||
|
#print('Jumps from [',curr,'] =',lines[curr],'to ',end='')
|
||||||
|
curr = lines[curr]+curr
|
||||||
|
#print('[',curr,'] =',lines[curr])
|
||||||
|
|
||||||
|
#print('Increment',lines[prev],end=' ')
|
||||||
|
lines[prev] += 1
|
||||||
|
#print('to',lines[prev])
|
||||||
|
|
||||||
|
#print('End:',lines,'curr=',curr)
|
||||||
|
#input()
|
||||||
|
print(steps)
|
||||||
|
#########################################
|
||||||
|
# #
|
||||||
|
# Part 2 #
|
||||||
|
# #
|
||||||
|
#########################################
|
||||||
|
|
||||||
|
lines = []
|
||||||
|
|
||||||
|
with open(input_f) as file:
|
||||||
|
for line in file:
|
||||||
|
lines.append(int(line.rstrip()))
|
||||||
|
|
||||||
|
|
||||||
|
curr = 0
|
||||||
|
tmp = 0
|
||||||
|
prev = 0
|
||||||
|
steps=0
|
||||||
|
|
||||||
|
while curr <= len(lines)-1:
|
||||||
|
steps+=1
|
||||||
|
#print('Start:',lines)
|
||||||
|
#print('Starting at index',curr,'value',lines[curr])
|
||||||
|
prev = curr
|
||||||
|
if curr+lines[curr] > len(lines)-1:
|
||||||
|
break
|
||||||
|
#print('Jumps from [',curr,'] =',lines[curr],'to ',end='')
|
||||||
|
curr = lines[curr]+curr
|
||||||
|
#print('[',curr,'] =',lines[curr])
|
||||||
|
|
||||||
|
offset = lines[prev] #abs((lines[prev])-(lines[curr]))
|
||||||
|
#print('Offset:',offset)
|
||||||
|
if offset >= 3:
|
||||||
|
#print('Decrease',lines[prev],end=' ')
|
||||||
|
lines[prev] -= 1
|
||||||
|
else:
|
||||||
|
#print('Increase',lines[prev],end=' ')
|
||||||
|
lines[prev] += 1
|
||||||
|
#print('to',lines[prev])
|
||||||
|
|
||||||
|
#print('End:',lines,'curr=',curr)
|
||||||
|
#input()
|
||||||
|
print(steps)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user