コード例 #1
0
        private static string BruteForceDoor(ScanningDroid droid, IOutput output)
        {
            var allItems   = droid.GetInventory();
            var allSubsets = allItems.Subsets();

            droid.Drop(allItems);

            foreach (var subset in allSubsets)
            {
                if (subset.Count == 0)
                {
                    continue;
                }

                droid.Take(subset);
                var result = droid.Go(Direction.South);

                if (result is not null && result.Contains("you are ejected back to the checkpoint.") is false)
                {
                    output.WriteProperty("Items Used", string.Join(", ", subset));
                    return(result);
                }
                droid.Drop(subset);
            }

            throw new InvalidOperationException("We can't get to the right weight!");
        }
コード例 #2
0
        public override void PartOne(IInput input, IOutput output)
        {
            var program = input.Parse();
            var droid   = new ScanningDroid(program);

            droid.SeekToAirlock();
            var result   = BruteForceDoor(droid, output);
            var passcode = Regex.Match(result, "typing ([0-9]*) on the keypad at the main airlock.").Groups[1].Value;

            output.WriteProperty("Passcode", passcode);
        }