02_intcode.py 708 B

123456789101112131415161718192021222324252627282930
  1. #!/usr/bin/env python3
  2. import sys
  3. from operator import add, mul
  4. def run(p):
  5. pc = 0
  6. while p[pc] != 99:
  7. opcode, in1, in2, out = p[pc:pc + 4]
  8. op = add if opcode == 1 else mul
  9. p[out] = op(p[in1], p[in2])
  10. pc += 4
  11. def initrun(p, noun, verb):
  12. p = list(p)
  13. p[1:3] = noun, verb
  14. run(p)
  15. return p[0]
  16. def find_params(p, desired_result):
  17. noun = verb = 0
  18. while initrun(p, noun, verb) <= desired_result:
  19. noun += 1
  20. noun -= 1
  21. while initrun(p, noun, verb) < desired_result:
  22. verb += 1
  23. return 100 * noun + verb
  24. program = list(map(int, sys.stdin.read().split(',')))
  25. print(initrun(program, 12, 2))
  26. print(find_params(program, 19690720))