Example #1
0
        private SparseMap <char> GenerateMap(IntCodeMachine icm)
        {
            var map = new SparseMap <char>(true);

            (int x, int y)cur = (0, 0);


            while (icm.Step())
            {
                while (icm.Output.CanRead)
                {
                    var tile = icm.Output.Read();
                    //Console.Write((char)tile);
                    if (tile == 10)
                    {
                        cur.x = 0;
                        cur.y++;
                    }
                    else
                    {
                        map.Set(cur, (char)tile);
                        cur.x++;
                    }
                }
                if (icm.WantInput)
                {
                }
            }
            return(map);
        }
Example #2
0
        public override void Second()
        {
            var icm = new IntCodeMachine();

            icm.Init("Day17/cameras.ic");
            icm.mem[0] = 2; // Override movement control
            var map = new SparseMap <char>(true);
            var y0  = Console.CursorTop;

            (int x, int y)cur = (0, 0);
            int cmd = 0, cIdx = 0;
            var dust = 0L;

            while (icm.Step())
            {
                while (icm.Output.CanRead)
                {
                    var tile = icm.Output.Read();
                    if (tile == 10)
                    {
                        cur.x = 0;
                        cur.y++;
                    }
                    else if (tile < 256)
                    {
                        map.Set(cur, (char)tile);
                        cur.x++;
                    }
                    else
                    {
                        dust = tile;
                    }
                }
                if (icm.WantInput)
                {
                    if (cmd < movements.Length && cIdx < movements[cmd].Length)
                    {
                        icm.Input.Write((long)movements[cmd][cIdx]);
                        cIdx++;
                    }
                    else
                    {
                        cmd++;
                        cIdx = 0;
                    }
                }
            }
            map.Render();
            Echo($"Dust collected: {dust}");
            ValidateAnswer(dust, 742673);
        }