12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- local inputString = require(script.Input)
- local inputStringArray = inputString:split(",")
- local ADD = 1
- local MULTIPLY = 2
- local opFunctions = {
- [ADD] = function(input1, input2)
- return input1 + input2
- end,
- [MULTIPLY] = function(input1, input2)
- return input1 * input2
- end,
- }
- function executeOp(array, opcode, input1Pointer, input2Pointer, returnPointer)
- local input1 = array[input1Pointer]
- local input2 = array[input2Pointer]
- array[returnPointer] = opFunctions[opcode](input1, input2)
- end
- function executeProgram(opArray)
- for i = 1, #opArray, 4 do
- local opcode = opArray[i]
- local input1Pointer = opArray[i+1] + 1
- local input2Pointer = opArray[i+2] + 1
- local returnPointer = opArray[i+3] + 1
- if opcode == 99 then
- return opArray[1]
- end
- executeOp(opArray, opcode, input1Pointer, input2Pointer, returnPointer)
- end
- end
- local function getInput(noun, verb)
- local inputArray = {}
- for k,v in ipairs(inputStringArray) do
- table.insert(inputArray, tonumber(v))
- end
-
- inputArray[2] = noun
- inputArray[3] = verb
-
- return inputArray
- end
- -- part 1 solution
- local inputArray = getInput(12, 2)
- local output = executeProgram(inputArray)
- print("Part 1 solution:", output)
- -- part 2 solution
- local desiredOutput = 19690720
- -- BRUTE FORCE
- for noun = 0, 99 do
- for verb = 0, 99 do
- local output = executeProgram(getInput(noun, verb))
-
- if output == desiredOutput then
- print("Noun and verb are:", noun, verb)
- local solution = 100 * noun + verb
- print("Part 2 solution:", solution)
- end
- end
- end
|