186 lines
6.9 KiB
C#
186 lines
6.9 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text.RegularExpressions;
|
|
using NUnit.Framework;
|
|
|
|
namespace Core.Tests
|
|
{
|
|
[TestFixture]
|
|
public class DictionarySearcherTests
|
|
{
|
|
[Test]
|
|
public void FindWords()
|
|
{
|
|
var dictionarySearcher = new DictionarySearcher();
|
|
var results = dictionarySearcher.FindWords("ztuol");
|
|
Console.WriteLine(string.Join(" ", results));
|
|
}
|
|
|
|
[Test]
|
|
public void ScoreWords()
|
|
{
|
|
var strings = new[] {"oneword", "another", "onemores", "z"};
|
|
foreach (var s in strings)
|
|
{
|
|
var score = JangleWordScorer.Score(s);
|
|
Console.WriteLine(s + " " + score);
|
|
}
|
|
}
|
|
|
|
[Test]
|
|
public void GroupByScore()
|
|
{
|
|
var strings = new[] {"oneword", "another", "onemores", "z"};
|
|
var scored = JangleWordScorer.GroupByScore(strings);
|
|
foreach (var s in scored) Console.WriteLine(s.Key + " " + string.Join(" ", s.Value));
|
|
}
|
|
|
|
[Test]
|
|
public void MatchingWords()
|
|
{
|
|
var dictionarySearcher = new DictionarySearcher();
|
|
var matchingWords = dictionarySearcher.MatchingWords("b", "v");
|
|
foreach (var matchingWord in matchingWords)
|
|
{
|
|
Console.WriteLine($"{matchingWord.Item1}, {matchingWord.Item2}");
|
|
}
|
|
}
|
|
|
|
|
|
[Test]
|
|
public void FindWordsIncludeExclude()
|
|
{
|
|
//extrachisguby
|
|
var dictionarySearcher = new DictionarySearcher();
|
|
var results = dictionarySearcher.FindWords("lon", "extrachisguby", 5);
|
|
Console.WriteLine(string.Join(" ", results));
|
|
}
|
|
|
|
/*[Test]
|
|
public void GetLetterPositionFreqTest()
|
|
{
|
|
var dictionarySearcher = new DictionarySearcher();
|
|
var letterPositionFreq = dictionarySearcher.GetLetterPositionFreq(5);
|
|
var index = 1;
|
|
foreach (var f in letterPositionFreq)
|
|
{
|
|
Console.Write(index++);
|
|
|
|
Console.WriteLine(string.Join(", ", f));
|
|
}
|
|
}*/
|
|
|
|
[Test]
|
|
public void LetterPositionFrequencyTest1()
|
|
{
|
|
var dictionarySearcher = new DictionarySearcher();
|
|
var frequency = new LetterPositionFrequency(dictionarySearcher, 5);
|
|
var allWords = dictionarySearcher.FindWords("","",5);
|
|
|
|
var scoreWords = frequency.ScoreWords(allWords).OrderByDescending(f => f.Item2);
|
|
foreach (var sw in scoreWords)
|
|
{
|
|
Console.WriteLine(sw);
|
|
}
|
|
}
|
|
|
|
[Test]
|
|
public void LetterPositionFrequencyTest()
|
|
{
|
|
var dictionarySearcher = new DictionarySearcher();
|
|
var frequency = new LetterPositionFrequency(dictionarySearcher, 5);
|
|
|
|
var results = dictionarySearcher.FindWords("eyr", "nzmodlchwbf", 5);
|
|
results = results.Where(r => Regex.IsMatch(r, ".E..Y"));
|
|
var scoreWords = frequency.ScoreWords(results).OrderBy(f => f.Item2);
|
|
foreach (var sw in scoreWords.Take(5))
|
|
{
|
|
Console.WriteLine(sw);
|
|
}
|
|
}
|
|
|
|
[Test]
|
|
public void WordleTest()
|
|
{
|
|
var dictionarySearcher = new DictionarySearcher();
|
|
var frequency = new LetterPositionFrequency(dictionarySearcher, 5);
|
|
var crit = new WordleUtil.PositionCriteria[5];
|
|
crit[0] = new WordleUtil.PositionCriteria() { Correct = null, OtherPosition = "O" };
|
|
crit[1] = new WordleUtil.PositionCriteria() { Correct = null, OtherPosition = "C" };
|
|
crit[2] = new WordleUtil.PositionCriteria() { Correct = 'U'};
|
|
crit[3] = new WordleUtil.PositionCriteria() { Correct = null, OtherPosition = "OCD" };
|
|
crit[4] = new WordleUtil.PositionCriteria() { Correct = null, OtherPosition = "O" };
|
|
|
|
var results = dictionarySearcher.FindWords("CODU", "XBWINGEPHS", 5);
|
|
|
|
results = results.Where(r => Regex.IsMatch(r, WordleUtil.GetRegexRestrictions(crit)));
|
|
|
|
var scoreWords = frequency.ScoreWords(results).OrderBy(f => f.Item2);
|
|
foreach (var sw in scoreWords.Take(10))
|
|
{
|
|
Console.WriteLine(sw);
|
|
}
|
|
}
|
|
[Test]
|
|
public void WordleTest2()
|
|
{
|
|
var dictionarySearcher = new DictionarySearcher();
|
|
var frequency = new LetterPositionFrequency(dictionarySearcher, 5);
|
|
var wordleState = new WordleUtil.WordleState();
|
|
|
|
wordleState.Update("ABEAM", new[]
|
|
{
|
|
WordleUtil.CharacterResponse.NotInWord,
|
|
WordleUtil.CharacterResponse.NotInWord,
|
|
WordleUtil.CharacterResponse.NotInWord,
|
|
WordleUtil.CharacterResponse.NotInWord,
|
|
WordleUtil.CharacterResponse.NotInWord
|
|
});
|
|
wordleState.Update("SORUS", new[]
|
|
{
|
|
WordleUtil.CharacterResponse.NotInWord,
|
|
WordleUtil.CharacterResponse.NotInWord,
|
|
WordleUtil.CharacterResponse.NotInWord,
|
|
WordleUtil.CharacterResponse.NotInWord,
|
|
WordleUtil.CharacterResponse.NotInWord
|
|
});
|
|
wordleState.Update("PINKY", new[]
|
|
{
|
|
WordleUtil.CharacterResponse.NotInWord,
|
|
WordleUtil.CharacterResponse.Actual,
|
|
WordleUtil.CharacterResponse.NotInWord,
|
|
WordleUtil.CharacterResponse.NotInWord,
|
|
WordleUtil.CharacterResponse.NotInWord
|
|
});
|
|
wordleState.Update("DIGIT", new[]
|
|
{
|
|
WordleUtil.CharacterResponse.NotInWord,
|
|
WordleUtil.CharacterResponse.Actual,
|
|
WordleUtil.CharacterResponse.Actual,
|
|
WordleUtil.CharacterResponse.OtherPosition,
|
|
WordleUtil.CharacterResponse.Actual
|
|
});
|
|
|
|
wordleState.Update("FIGHT", new[]
|
|
{
|
|
WordleUtil.CharacterResponse.NotInWord,
|
|
WordleUtil.CharacterResponse.Actual,
|
|
WordleUtil.CharacterResponse.Actual,
|
|
WordleUtil.CharacterResponse.Actual,
|
|
WordleUtil.CharacterResponse.Actual
|
|
});
|
|
|
|
var results = dictionarySearcher.FindWords(wordleState.InWord, wordleState.NotInWord, 5);
|
|
|
|
results = results.Where(r => Regex.IsMatch(r, WordleUtil.GetRegexRestrictions(wordleState.Criteria)));
|
|
|
|
var scoreWords = frequency.ScoreWords(results).OrderByDescending(f => f.Item2);
|
|
foreach (var sw in scoreWords.Take(10))
|
|
{
|
|
Console.WriteLine(sw);
|
|
}
|
|
}
|
|
}
|
|
}
|