part1.py 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import argparse
  2. import functools
  3. from typing import List
  4. parser = argparse.ArgumentParser()
  5. parser.add_argument("ifile", type=argparse.FileType('r'))
  6. args = parser.parse_args()
  7. board = [[int(char) for char in line.strip()] for line in args.ifile.readlines()]
  8. max_x_pos = len(board[0]) - 1
  9. max_y_pos = len(board) - 1
  10. CURR_BEST = 10000000000000000000
  11. @functools.lru_cache(pow(2, 20))
  12. def search(posX, posY, currScore):
  13. global CURR_BEST
  14. global board
  15. global max_y_pos
  16. global max_x_pos
  17. if currScore > CURR_BEST:
  18. return CURR_BEST
  19. if posX == max_x_pos and posY == max_y_pos:
  20. if currScore < CURR_BEST:
  21. CURR_BEST = currScore
  22. return currScore
  23. possibilities = []
  24. if posX < max_x_pos:
  25. possibilities.append(search(posX + 1, posY, currScore + board[posY][posX + 1]))
  26. if posY < max_y_pos:
  27. possibilities.append(search(posX, posY + 1, currScore + board[posY + 1][posX]))
  28. return min(possibilities)
  29. if __name__ == "__main__":
  30. print(search(0, 0, 0))