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); }
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); }