Treasure.Trove.GetSolution C# (CSharp) Method

GetSolution() public method

public GetSolution ( IEnumerable opened, IList toopen, KeySet keyset ) : IEnumerable
opened IEnumerable
toopen IList
keyset KeySet
return IEnumerable
        public IEnumerable<int> GetSolution(IEnumerable<int> opened, IList<Chest> toopen, KeySet keyset)
        {
            if (toopen.Count() == 0)
                return opened;

            foreach (var chest in toopen.Where(ch => !this.keys.Keys.Contains(ch.Key)))
            {
                var newset = keyset.Remove(chest.Keys);
                if (!newset.Keys.Contains(chest.Key))
                    return null;
            }

            foreach (var chest in toopen.Where(ch => ch.Opener == -1 && this.keys.Keys.Contains(ch.Key)))
            {
                int key = chest.Key;

                var result = new List<int>(opened);
                result.Add(this.chests.IndexOf(chest));
                chest.Open();
                chest.Opener = 0;

                var oldkeys = this.keys;

                this.keys = this.keys.Remove(key);
                this.keys = this.keys.Add(chest.Keys);

                var newtoopen = new List<Chest>(toopen);
                newtoopen.Remove(chest);
                var newkeyset = keyset.Remove(chest.Keys);

                var newresult = this.GetSolution(result, newtoopen, newkeyset);

                if (newresult != null)
                    return newresult;

                chest.Close();
                this.keys = oldkeys;
            }

            return null;
        }

Same methods

Trove::GetSolution ( ) : IList
Trove::GetSolution ( int count, int pos, int result ) : bool

Usage Example

示例#1
0
        public void CannotOpenChestWithoutKeys()
        {
            Trove trove = new Trove();
            trove.AddChest(new Chest(1, new int[] { 2, 3 }));

            var result = trove.GetSolution();

            Assert.IsNull(result);
        }
All Usage Examples Of Treasure.Trove::GetSolution