static void Main(string[] args) { PhoneNumber phoneNumber = new PhoneNumber(); int number = 9; while (phoneNumber.DigitCount < 7) { phoneNumber.TryAdd(new Key(number, null)); number--; } Console.WriteLine(phoneNumber); }
public void given_a_seven_digit_number() { before = () => phoneNumber = new PhoneNumber(); context["Start number can not be zero or one"] = () => { specify = () => phoneNumber.TryAdd(0).should_be_false(); specify = () => phoneNumber.TryAdd(1).should_be_false(); }; context["Try add returns false for invalid keys"] = () => { specify = () => phoneNumber.TryAdd(-1).should_be_false(); }; context["When Adding a second number"] = () => { before = () => phoneNumber.TryAdd(3).should_be_true(); specify = () => phoneNumber.TryAdd(-1).should_be_false(); specify = () => phoneNumber.TryAdd(0).should_be_true(); specify = () => phoneNumber.TryAdd(1).should_be_true(); }; context["Given a filled number"] = () => { before = () => { int number = 9; while (phoneNumber.DigitCount < 7) { phoneNumber.TryAdd(number); number--; } }; specify = () => phoneNumber.DigitCount.should_be(7); Console.WriteLine("Composed phone number: " + phoneNumber); context["Can not add an eigth number"] = () => { specify = () => phoneNumber.TryAdd(2).should_be_false(); }; }; }
public List<PhoneNumber> GetNumbersStartingFrom(int startDigit) { var accruedNumbers = new List<PhoneNumber>(); if (!PhoneNumber.IsValidStartDigit(startDigit)) return accruedNumbers.ToList(); var number = new PhoneNumber(); if (number.TryAdd(startDigit)) { AddToDigitSequence(accruedNumbers, number); } return accruedNumbers.Where(c => c.DigitCount == 7).ToList(); }
private void AddToDigitSequence(List<PhoneNumber> aggregate, PhoneNumber sourceNumber) { int lastDigit = sourceNumber.LastDigit; List<int> nextDigits = _moveMatrix.ReachableFrom(lastDigit); foreach (int nextDigit in nextDigits) { PhoneNumber newNumber = sourceNumber.Clone(); if (newNumber.TryAdd(nextDigit)) { aggregate.Add(newNumber); AddToDigitSequence(aggregate, newNumber); } } return; }
public PhoneNumber Clone() { var clone = new PhoneNumber(); clone.digitsThatMakeUpThisPhoneNumber.AddRange(digitsThatMakeUpThisPhoneNumber); return clone; }