private T General <T>(BreakCondition condition, PostRunner <T> postRunner) { var lines = FileLines; var moons = new Moon[lines.Length]; for (int i = 0; i < lines.Length; i++) { moons[i] = Moon.Parse(lines[i]); } long steps = 0; long xSteps = 0; long ySteps = 0; long zSteps = 0; for (; condition(steps, moons, ref xSteps, ref ySteps, ref zSteps); steps++) { for (int j = 0; j < moons.Length; j++) { for (int k = j + 1; k < moons.Length; k++) { moons[j].ApplyGravity(moons[k]); } } for (int j = 0; j < moons.Length; j++) { moons[j].ApplyVelocity(); } } return(postRunner(steps, moons, xSteps, ySteps, zSteps)); }
private int General(int[] numbersOriginal, int noun, int verb, PostRunner postRunner) { var numbers = new int[numbersOriginal.Length]; numbersOriginal.CopyTo(numbers, 0); numbers[1] = noun; numbers[2] = verb; var com = new IntcodeComputer(numbers); com.RunToHalt(); return(postRunner(noun, verb, (int)com.GetMemoryAt(0))); }