示例#1
0
        static List <NumberModel> BuildFormulaNumbers(Func <int, NumberModel> func)
        {
            List <NumberModel> result = new List <NumberModel>();
            // Triangle
            NumberModel rlt = new NumberModel()
            {
                NumberValue = 0, NextNumber = new Dictionary <string, List <NumberModel> >()
            };
            int i = 1;

            while (rlt.NumberValue < 10000)
            {
                rlt = func(i);
                i++;
                if (rlt.NumberValue < 1000)
                {
                    continue;
                }
                if (rlt.NumberValue >= 10000)
                {
                    break;
                }
                if (result.Count(x => x.NumberValue.Equals(rlt.NumberValue)) == 0)
                {
                    result.Add(rlt);
                }
            }
            return(result);
        }
示例#2
0
 static bool CheckNext(NumberModel firstNum, NumberModel secondNumber)
 {
     if ((firstNum.NumberValue % 100).Equals(secondNumber.NumberValue / 100))
     {
         return(true);
     }
     return(false);
 }
示例#3
0
 static List<NumberModel> BuildFormulaNumbers(Func<int, NumberModel> func)
 {
     List<NumberModel> result = new List<NumberModel>();
     // Triangle
     NumberModel rlt = new NumberModel() { NumberValue = 0, NextNumber = new Dictionary<string, List<NumberModel>>() };
     int i = 1;
     while (rlt.NumberValue < 10000)
     {
         rlt = func(i);
         i++;
         if (rlt.NumberValue < 1000)
             continue;
         if (rlt.NumberValue >= 10000)
             break;
         if (result.Count(x=>x.NumberValue.Equals(rlt.NumberValue)) == 0)
             result.Add(rlt);
     }
     return result;
 }
示例#4
0
        static void CheckNextNumber()
        {
            if (foundResult)
            {
                return;
            }
            NumberModel currNum = resultQueue.Values.Last();

            string[] nextNumKeys = currNum.NextNumber.Keys.ToArray();
            foreach (string currKey in nextNumKeys)
            {
                if (resultQueue.ContainsKey(currKey))
                {
                    continue;
                }
                if (currNum.NextNumber[currKey] == null)
                {
                    continue;
                }
                if (currNum.NextNumber[currKey].Count == 0)
                {
                    continue;
                }
                for (int i = 0; i < currNum.NextNumber[currKey].Count; i++)
                {
                    if (currKey.Equals("Square") && currNum.NextNumber[currKey][i].NumberValue == 2882)
                    {
                    }
                    if (currKey.Equals("Pentagonal") && currNum.NextNumber[currKey][i].NumberValue == 8281)
                    {
                    }
                    NumberModel nextNumber = currNum.NextNumber[currKey][i];
                    if (!CheckNext(currNum, nextNumber))
                    {
                        continue;
                    }
                    resultQueue.Add(currKey, nextNumber);
                    if (resultQueue.Count != TARGET_LENGTH)
                    {
                        CheckNextNumber();
                        resultQueue.Remove(currKey);
                        continue;
                    }

                    if (!CheckNext(nextNumber, resultQueue["Triangle"]))
                    {
                        CheckNextNumber();
                        resultQueue.Remove(currKey);
                        continue;
                    }

                    foundResult = true;
                    int result = 0;
                    foreach (var n in resultQueue.Values)
                    {
                        result += n.NumberValue;
                    }
                    Console.WriteLine("result is {0}", result);
                }
            }
        }
示例#5
0
 static bool CheckNext(NumberModel firstNum, NumberModel secondNumber)
 {
     if ((firstNum.NumberValue%100).Equals(secondNumber.NumberValue/100))
         return true;
     return false;
 }