Beispiel #1
0
 public void AddKey(int key)
 {
     this.keys = this.keys.Add(key);
     this.availablekeys = this.availablekeys.Add(key);
 }
Beispiel #2
0
        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;
        }
Beispiel #3
0
 public void AddChest(Chest chest)
 {
     this.chests.Add(chest);
     chest.Opener = -1;
     this.availablekeys = this.availablekeys.Add(chest.Keys);
 }