Exemple #1
0
        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)]);
Exemple #2
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());
        }
Exemple #3
0
        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
        }