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