Пример #1
0
        private static void RunTests()
        {
            var testPrograms = new[] {
                "109,1,204,-1,1001,100,1,100,1008,100,16,101,1006,101,0,99",
                "1102,34915192,34915192,7,4,7,99,0",
                "104,1125899906842624,99"
            };

            var count = 0;

            foreach (var code in testPrograms)
            {
                try
                {
                    Console.WriteLine($"Test #{++count}");

                    var program = IntcodeMachine.ParseCode(code);
                    IntcodeMachine.RunProgram(
                        program,
                        ReadConsoleInput,
                        WriteToConsole
                        );
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex);
                }
                finally
                {
                    Console.WriteLine();
                }
            }
        }
Пример #2
0
        static void Main(string[] args)
        {
            if (args.Any())
            {
                var program = IntcodeMachine.ParseCode(File.ReadLines(args.First()).First());

                // Part 1
                Console.WriteLine("Part 1:");
                IntcodeMachine.RunProgram(
                    program,
                    () => 1,
                    WriteToConsole
                    );

                Console.WriteLine();

                // Part 2
                Console.WriteLine("Part 2:");
                IntcodeMachine.RunProgram(
                    program,
                    () => 2,
                    WriteToConsole
                    );
            }
            else
            {
                RunTests();
            }
        }
Пример #3
0
        // public static async Task RunProgramAsync(
        //     long[] program, ChannelReader<long> input, ChannelWriter<long> output,
        //     CancellationToken cancellationToken = default, bool complete = true)
        // {
        //     try
        //     {
        //         await RunProgramAsync(program, input.ReadAsync, output.WriteAsync, cancellationToken);
        //     }
        //     catch (Exception ex)
        //     {
        //         if (complete)
        //             output.TryComplete(ex);
        //     }
        //     finally
        //     {
        //         if (complete)
        //             output.TryComplete();
        //     }
        // }

        public static async Task RunProgramAsync(
            long[] program,
            Func <CancellationToken, ValueTask <long> > read,
            Func <long, CancellationToken, ValueTask> write,
            CancellationToken cancellationToken = default)
        {
            var vm = new IntcodeMachine(program, read, write);
            await vm.StepUntilHalted(cancellationToken);
        }