2 import qualified Data.Text.IO as TIO
6 import qualified Data.Map as M
11 text <- TIO.readFile "data/advent02.txt"
12 let mem = parseMachineMemory text
13 let machine = makeMachine mem
18 -- part1 machine = (_memory $ execState runAll machine1202)!0
19 -- where machine1202 = machine { _memory = M.insert 1 12 $ M.insert 2 2 $ _memory machine }
22 part1 = nounVerbResult 12 2
24 part2Target = 19690720
26 part2 machine = noun * 100 + verb
27 where (noun, verb) = head $ [(n, v) | n <- [0..99], v <- [0..99],
28 nounVerbResult n v machine == part2Target ]
31 nounVerbResult :: Integer -> Integer -> Machine -> Integer
32 nounVerbResult noun verb machine = machineOutput machine'
33 where (_, machine', _) = runMachine [] nvMachine
34 nvMachine = machineNounVerb machine noun verb
36 machineNounVerb :: Machine -> Integer -> Integer -> Machine
37 machineNounVerb machine noun verb = machine { _memory = M.insert 1 noun $ M.insert 2 verb $ _memory machine }
39 machineOutput :: Machine -> Integer
40 machineOutput machine = (_memory machine)!0