Exemple #1
0
        public override int Main_Int32()
        {
            var path = @".\Days\Day08\input.txt";

            var str = System.IO.File.ReadAllLines(path);

            // Part 1
            //var baseCp = new ConsolePlayer(str);
            //baseCp.StartExecution();
            //return baseCp.Accumulator;

            // Part 2
            var cpList     = new List <ConsolePlayer>();
            var threadList = new List <Thread>();

            for (int i = 0; i < str.Length; i++)
            {
                var player = new ConsolePlayer(str);
                cpList.Add(player);

                var thread = new Thread(() =>
                {
                    Thread.CurrentThread.IsBackground = true;
                    player.ReplaceSingleJmpNopAndExecute(i);
                });
                thread.Start();
            }

            while (!threadList.All(a => a.IsAlive))
            {
                Thread.Sleep(10);
            }

            return(cpList.FirstOrDefault(a => !a.IsInfinite)?.Accumulator ?? 0);
        }
Exemple #2
0
 public override void Do(ConsolePlayer player)
 {
     player.ExecuteNext(Value);
 }
Exemple #3
0
 public override void Do(ConsolePlayer player)
 {
     player.Accumulator += Value;
     player.ExecuteNext();
 }
Exemple #4
0
 public abstract void Do(ConsolePlayer player);