Skip to content

Instantly share code, notes, and snippets.

import Intcode (
Status,
Program
)
data Amps = Amps {
ampsOf::[Program],
activeAmp::Int
} deriving(Show)
runProgram :: Program -> Program
runProgram prog = case status prog of
Running -> runProg . runStep $ prog
AwaitInput -> if (length . input $ prog) > 0
then runProg . runStep $ prog
else prog
_ -> prog
runStep :: Program -> Program
runStep = ...
data Program = Program {
input::[Int],
intCode::[Int],
status::Status,
-- ip: Instruction Pointer
ip::Int,
-- rb: Relative Base
rb::Int,
output::[Int]
} deriving(Show, Eq)
runProgram :: State Program ()
runProgram = do
prog <- get
case programState prog of
Running -> do
runStep'
runProgram
_ -> return ()
runStep' :: State Program ()
runProgram :: Program -> Program
runProgram prog = case status prog of
Running -> runProgram . runStep $ prog
_ -> prog
runStep :: Program -> Program
runStep prog = ...
data Program = Program {
intCode::[Int],
status::Status,
-- Instruction Pointer: ip
ip::Int
} deriving(Show)
data Status = Running | Terminated | Crashed deriving(Show)