private static double SequenceGuesses(Match match) { char firstChar = match.Token[0]; double baseGuesses = 0; if ((new HashSet <char> { 'a', 'A', 'z', 'Z', '0', '1', '9' }).Contains(firstChar)) { baseGuesses = 4; } else { if (Char.IsDigit(firstChar)) { baseGuesses = 10; } else { baseGuesses = 26; } } SequenceMatch sm = (SequenceMatch)match; if (!sm.Ascending) { baseGuesses *= 2; } return(baseGuesses * match.Token.Length); }
/// <summary> /// Estimates the attempts required to guess the password. /// </summary> /// <param name="match">The match.</param> /// <returns>The guesses estimate.</returns> public static double CalculateGuesses(SequenceMatch match) { double baseGuesses; if (ObviousStartCharacters.Contains(match.Token[0])) { baseGuesses = 4; } else { if (char.IsDigit(match.Token[0])) { baseGuesses = 10; } else { baseGuesses = 26; } } if (!match.Ascending) { baseGuesses *= 2; } return(baseGuesses * match.Token.Length); }
public void IsDelegatedToByEstimateGuesses() { var match = new SequenceMatch { Token = "ab", Ascending = true, i = 1, j = 2, SequenceName = "abc", SequenceSpace = 1, }; var actual = SequenceGuessesCalculator.CalculateGuesses(match); actual.Should().Be(8); }
public void CalculatesTheCorrectNumberOfGuesses(string token, bool ascending, int expected) { var match = new SequenceMatch { Token = token, Ascending = ascending, i = 1, j = 2, SequenceName = "abc", SequenceSpace = 1, }; var actual = SequenceGuessesCalculator.CalculateGuesses(match); actual.Should().Be(expected); }