Day2 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. local inputString = require(script.Input)
  2. local inputStringArray = inputString:split(",")
  3. local ADD = 1
  4. local MULTIPLY = 2
  5. local opFunctions = {
  6. [ADD] = function(input1, input2)
  7. return input1 + input2
  8. end,
  9. [MULTIPLY] = function(input1, input2)
  10. return input1 * input2
  11. end,
  12. }
  13. function executeOp(array, opcode, input1Pointer, input2Pointer, returnPointer)
  14. local input1 = array[input1Pointer]
  15. local input2 = array[input2Pointer]
  16. array[returnPointer] = opFunctions[opcode](input1, input2)
  17. end
  18. function executeProgram(opArray)
  19. for i = 1, #opArray, 4 do
  20. local opcode = opArray[i]
  21. local input1Pointer = opArray[i+1] + 1
  22. local input2Pointer = opArray[i+2] + 1
  23. local returnPointer = opArray[i+3] + 1
  24. if opcode == 99 then
  25. return opArray[1]
  26. end
  27. executeOp(opArray, opcode, input1Pointer, input2Pointer, returnPointer)
  28. end
  29. end
  30. local function getInput(noun, verb)
  31. local inputArray = {}
  32. for k,v in ipairs(inputStringArray) do
  33. table.insert(inputArray, tonumber(v))
  34. end
  35. inputArray[2] = noun
  36. inputArray[3] = verb
  37. return inputArray
  38. end
  39. -- part 1 solution
  40. local inputArray = getInput(12, 2)
  41. local output = executeProgram(inputArray)
  42. print("Part 1 solution:", output)
  43. -- part 2 solution
  44. local desiredOutput = 19690720
  45. -- BRUTE FORCE
  46. for noun = 0, 99 do
  47. for verb = 0, 99 do
  48. local output = executeProgram(getInput(noun, verb))
  49. if output == desiredOutput then
  50. print("Noun and verb are:", noun, verb)
  51. local solution = 100 * noun + verb
  52. print("Part 2 solution:", solution)
  53. end
  54. end
  55. end