public StartsWith GetNextStartsWith(Random random, Maybe <Word> foundWord) { var next = _wordsByStartsWith.Keys .Select(k => new { Key = k, Board = CharBoard.ConstructBoard(_wordsByStartsWith[k].Select(x => new Word(x)), random), }) .Where(b => b.Board.CharCells.Count() >= 32) .OrderByDescending(_ => random.Next()) .Select(k => k.Key) .First(); return(new StartsWith(next[0], next[1])); }
public void Initialize() { var words = File.ReadAllLines(@".\Content\words.txt"); _wordsByStartsWith = words .Where(w => w.Length > 2) .Select(w => new { BeginsWith = w.Substring(0, 2), Word = w.ToLower() }) .GroupBy(w => w.BeginsWith) .Where(w => w.SelectMany(s => s.Word).Count() > 32) .Select(s => new { Set = s, Count = CharBoard.ConstructBoard(s.Select(r => new Word(r.Word)), null).PossibleWords.Count() }) .Where(s => s.Count > 3) .Select(s => s.Set) .ToDictionary( k => k.Key, v => v.Select(r => r.Word).ToList() ); Debug.WriteLine(_wordsByStartsWith.Keys.Count()); Debug.WriteLine(_wordsByStartsWith.Values.SelectMany(v => v).Count()); }