Esempio n. 1
0
        private static int FindCorrectMutation(Instruction[] code)
        {
            var visited     = new HashSet <InstructionPointer>();
            var gameConsole = new HandheldGameConsole(stopFunction: ip => !visited.Add(ip) ? Termination.InfiniteLoop : Termination.None);

            for (var i = 0; i < code.Length; ++i)
            {
                if (code[i].Operation == Operation.Acc)
                {
                    continue;
                }

                visited.Clear();
                var originalInstruction = code[i];
                code[i] = SwapInstruction(originalInstruction);

                var(result, termination) = gameConsole.Run(code);

                if (termination == Termination.RanToCompletion)
                {
                    return(result);
                }

                code[i] = originalInstruction;
            }

            throw new InvalidOperationException();
        }
Esempio n. 2
0
        public void Part1(string file, int expected)
        {
            var code    = File.ReadAllLines(file).Select(ParseInstruction).ToArray();
            var visited = new HashSet <InstructionPointer>();

            var gameConsole = new HandheldGameConsole(stopFunction: ip => !visited.Add(ip) ? Termination.InfiniteLoop : Termination.None);

            var(result, _) = gameConsole.Run(code);

            Assert.Equal(expected, result);
        }