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); }
static bool CheckNext(NumberModel firstNum, NumberModel secondNumber) { if ((firstNum.NumberValue % 100).Equals(secondNumber.NumberValue / 100)) { return(true); } return(false); }
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; }
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); } } }
static bool CheckNext(NumberModel firstNum, NumberModel secondNumber) { if ((firstNum.NumberValue%100).Equals(secondNumber.NumberValue/100)) return true; return false; }