private static long RunDroneProgram(long[] program, int x, int y) { long result = 0; IntcodeMachine.RunProgram( program, v => { result = v; }, x, y ); return(result); }
static void Main(string[] args) { var code = File.ReadLines("input.txt").FirstOrDefault(); var program = IntcodeMachine.ParseCode(code); long affectedPointCount = RunPart1(program); Console.WriteLine($"Part 1 Result = {affectedPointCount}"); var firstPoint = RunPart2(program, 100); Console.WriteLine($"Part 2 Result = {firstPoint.x * 10000 + firstPoint.y} [{firstPoint}]"); }
public static bool RunProgram(long[] program, Action <long> write, Queue <long> input = default) { var machine = new IntcodeMachine(program); while (true) { var result = machine.StepMany(input); switch (result.State) { case ExecuteState.HaveOutput: write?.Invoke(result.Output.Value); break; case ExecuteState.NeedInput: return(false); case ExecuteState.Halted: return(true); } } }