12_navigation.py 922 B

123456789101112131415161718192021222324252627282930313233
  1. #!/usr/bin/env python3
  2. import sys
  3. WIND_DIRS = {'N': (0, 1), 'S': (0, -1), 'E': (1, 0), 'W': (-1, 0)}
  4. def navigate(instructions, waypoint):
  5. x = y = 0
  6. dx, dy = (10, 1) if waypoint else WIND_DIRS['E']
  7. for inst, param in instructions:
  8. if inst == 'L':
  9. for i in range(param // 90):
  10. dx, dy = -dy, dx
  11. elif inst == 'R':
  12. for i in range(param // 90):
  13. dx, dy = dy, -dx
  14. elif inst == 'F':
  15. x += dx * param
  16. y += dy * param
  17. else:
  18. wdx, wdy = WIND_DIRS[inst]
  19. if waypoint:
  20. dx += wdx * param
  21. dy += wdy * param
  22. else:
  23. x += wdx * param
  24. y += wdy * param
  25. return abs(x) + abs(y)
  26. instructions = [(line[0], int(line[1:])) for line in sys.stdin]
  27. print(navigate(instructions, False))
  28. print(navigate(instructions, True))