Ejemplo n.º 1
0
        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;
        }
Ejemplo n.º 5
0
 public PhoneNumber Clone()
 {
     var clone = new PhoneNumber();
     clone.digitsThatMakeUpThisPhoneNumber.AddRange(digitsThatMakeUpThisPhoneNumber);
     return clone;
 }