# Day 17 - Advent of Code 2016

Working solution for the day 17 puzzles.

### Parts One and Two

``````""" day_17_01_02.py """

# usage: python3 day_17_01_02.py udskfozm

import sys
from hashlib import md5

def status(secret, salt):
""" what's the door status """
digest = md5()
digest.update((secret + salt).encode())
return [i not in 'bcdef' for i in digest.hexdigest()[:4]]

def move(pos, goal, secret, steps=''):
""" move to goal """
global solution

if pos == goal:
return pos, steps

deltas = [(-1, 0), (1, 0), (0, -1), (0, 1)]
symbols = ['U', 'D', 'L', 'R']

for i, locked in enumerate(status(secret, steps)):
if locked:
continue
row = pos[0] + deltas[i][0]
col = pos[1] + deltas[i][1]
if 0 <= row <= 3 and 0 <= col <= 3:
next_pos = row, col
next_steps = steps + symbols[i]
end_pos, end_steps = move(next_pos, goal, secret, next_steps)
if end_pos == goal:
if solution[0] == '' or len(end_steps) < len(solution[0]):
solution[0] = end_steps
if solution[1] == '' or len(end_steps) > len(solution[1]):
solution[1] = end_steps

return pos, steps

passcode = sys.argv[1]
start = 0, 0
end = 3, 3
solution = ['', '']

move(start, end, passcode)
print(solution[0])
print(len(solution[1]))
``````