예제 #1
0
        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));
        }
예제 #2
0
        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)));
        }