static void Main(string[] args) { var program = File.ReadAllLines("./input.txt") [0].Split(",").Select(i => long.Parse(i)).ToList(); var computer = new IntcodeComputer(program.ToList()); computer.Calculate(new Queue <long>()); var state = new Dictionary <(int x, int y), int>(); state = GetState(computer.ReturnValues); // Part 1 var answer = state.Count(s => s.Value == (int)Tiles.Block); Console.WriteLine(answer); var playableProgram = program.ToList(); playableProgram[0] = 2; computer = new IntcodeComputer(playableProgram); var input = new Queue <long>(); bool halted = false; while (!halted) { halted = computer.Calculate(input); var newState = GetState(computer.ReturnValues); foreach (var entry in newState) { state[entry.Key] = entry.Value; } var direction = state.Single(s => s.Value == (int)Tiles.Ball).Key.x - state.Single(s => s.Value == (int)Tiles.Paddle).Key.x; if (direction < 0) { input.Enqueue(-1); } else if (direction == 0) { input.Enqueue(0); } else { input.Enqueue(1); } // Uncomment/comment for interest/speed Console.Clear(); Draw(state); Thread.Sleep(50); Console.Clear(); } Console.WriteLine(state[(-1, 0)]);
public static int Calculate(int x, int y) { // inefficient var program = File.ReadAllLines("./input.txt") [0].Split(",").Select(i => long.Parse(i)).ToList(); var input = new Queue <long>(); input.Enqueue(x); input.Enqueue(y); var computer = new IntcodeComputer(program.ToList()); computer.Calculate(input); return((int)computer.ReturnValues.Dequeue()); }
static void Main(string[] args) { var program = File.ReadAllLines("./input.txt") [0].Split(",").Select(i => long.Parse(i)).ToList(); var computer = new IntcodeComputer(program.ToList()); computer.Calculate(new Queue <long> ()); string response = ""; while (computer.ReturnValues.Count() > 0) { response += (char)computer.ReturnValues.Dequeue(); } var validDirections = response.Split("Doors here lead:")[1].Split("Items here:")[0].Split("\n").Select(s => s.Split("- ")).Where(s => s.Count() > 1).Select(s => s[1]).ToList(); var directions = new [] { "north", "south", "east", "west" }; var map = new Dictionary <string, int> (); var items = new List <string>(); int attempt = 0; var itemsTried = new Dictionary <int, List <string> >(); Random random = new Random(); while (true) { string command = ""; if (map.ContainsKey(" Security Checkpoint ")) { while (itemsTried.Any(i => ListEquivalence(items, i.Value)) && items.Any()) { var itemToDrop = items[random.Next(items.Count)]; command = $"drop {itemToDrop}"; items.Remove(itemToDrop); computer.Calculate(StringToInput(command)); } command = "north"; } else { command = validDirections.ToList()[random.Next(validDirections.Count())]; } var input = StringToInput(command); computer.Calculate(input); response = ""; while (computer.ReturnValues.Count() > 0) { response += (char)computer.ReturnValues.Dequeue(); } Console.WriteLine(response); var room = response.Split("==")[1]; map.TryAdd(room, 0); map[room] = map[room] + 1; if (room.Contains("Pressure-Sensitive Floor")) { if (response.Contains("Alert!")) { computer = new IntcodeComputer(program.ToList()); computer.Calculate(new Queue <long>()); itemsTried.Add(attempt, items.ToList()); items = new List <string>(); attempt++; map = new Dictionary <string, int> (); response = ""; while (computer.ReturnValues.Count() > 0) { response += (char)computer.ReturnValues.Dequeue(); } } else { break; } } var itemsOnFloor = response.Contains("Items here:") ? response.Split("Items here:")[1].Split("\n").Select(s => s.Split("- ")).Where(s => s.Count() > 1).Select(s => s[1]).ToList() : new List <string>(); var badItems = new [] { "molten lava", "giant electromagnet", "infinite loop", "photons", "escape pod" }; foreach (var item in itemsOnFloor) { if (!badItems.Contains(item)) { command = $"take {item}"; computer.Calculate(StringToInput(command)); items.Add(item); } } validDirections = response.Split("Doors here lead:")[1].Split("Items here:")[0].Split("\n").Select(s => s.Split("- ")).Where(s => s.Count() > 1).Select(s => s[1]).ToList(); } // molten lava -- too hot // giant electromagnet -- can't move // infinite loop -- erm... // photons -- too dark }