private bool CheckNumber(int number, List <Digit> actualDigits) { var workingLightIndex = 0; var actualDigitIndex = 0; var expectedDigits = _digitEngine.ToDigits(number); if (expectedDigits.Count != actualDigits.Count) { while (_digitEngine.CheckDigit(actualDigits[0], 0) && actualDigitIndex + expectedDigits.Count < actualDigits.Count) { actualDigitIndex++; } } if (actualDigitIndex + expectedDigits.Count != actualDigits.Count) { throw new ArgumentException(); } if (expectedDigits.Count != _digitWorkingLightMasks.Count) { workingLightIndex = _digitWorkingLightMasks.Count - expectedDigits.Count; } for (var i = 0; i < expectedDigits.Count; ++i) { if (!CheckDigit(expectedDigits[i].Mask, actualDigits[actualDigitIndex + i].Mask, _digitWorkingLightMasks[workingLightIndex + i])) { return(false); } } return(true); }
public List <List <Digit> > GenerateDigits(int number) { var result = new List <List <Digit> >(); for (var i = number; i >= 0; --i) { var digits = _digitEngine.ToDigits(i); result.Add(digits); } return(result); }