public CharacterCountMap Subtract(string word) { var that = new CharacterCountMap(this); foreach (var c in word) { if (!that.ContainsKey(c) || that[c] == 0) { return(null); } that[c]--; } return(that); }
public bool AreEqual(CharacterCountMap that) { if (this.Keys.Count != that.Keys.Count) { return(false); } foreach (var k in this.Keys) { if (!that.ContainsKey(k)) { return(false); } if (this[k] != that[k]) { return(false); } } return(true); }
public static IEnumerable <string> Find(IEnumerable <string> wordlist, CharacterCountMap map, int maxWordCount) { foreach (var word in wordlist) { var wordmap = map.Subtract(word); if (wordmap != null) { if (wordmap.IsEmpty()) { yield return(word); } else if (maxWordCount > 0) { var nextWordlist = wordlist.Where(x => x != word); foreach (var s in Find(nextWordlist, wordmap, maxWordCount - 1)) { yield return(word + " " + s); } } } } }
public CharacterCountMap(CharacterCountMap that) : base(that) { }