public void CallAllRules() { Rule1 rule1 = new Rule1(); Rule2 rule2 = new Rule2(); Rule3 rule3 = new Rule3(); Rule4 rule4 = new Rule4(); Rule5 rule5 = new Rule5(); Rule6 rule6 = new Rule6(); Rule7 rule7 = new Rule7(); Rule8 rule8 = new Rule8(); Rule9 rule9 = new Rule9(); Rule10 rule10 = new Rule10(); Rule11 rule11 = new Rule11(); Rule12 rule12 = new Rule12(); Rule13 rule13 = new Rule13(); ReadExcelData readData = new ReadExcelData(); readData.ReadFromExcelFile(""); //calls all rules int total; foreach (var row in Records.records) { total = 0; total += rule1.Evaluate(row).Score; total += rule2.Evaluate(row).Score; total += rule3.Evaluate(row).Score; total += rule4.Evaluate(row).Score; total += rule5.Evaluate(row).Score; total += rule6.Evaluate(row).Score; total += rule7.Evaluate(row).Score; total += rule8.Evaluate(row).Score; total += rule9.Evaluate(row).Score; total += rule10.Evaluate(row).Score; total += rule11.Evaluate(row).Score; total += rule12.Evaluate(row).Score; total += rule13.Evaluate(row).Score; /* call all rules here */ Console.WriteLine("Total score: " + total); } }
protected void RunScenario(string title, string input) { RunScenario(title, () => { var lines = input.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries); var reSimpleRule = new Regex(@"^(\d+): ""(.*)""$"); var reSingleRule = new Regex(@"^(\d+): (\d+)$"); var rePairRule = new Regex(@"^(\d+): (\d+) (\d+)$"); var reTripleRule = new Regex(@"^(\d+): (\d+) (\d+) (\d+)$"); var reOrPairRule = new Regex(@"^(\d+): (\d+) (\d+) \| (\d+) (\d+)$"); var reOrSingleRule = new Regex(@"^(\d+): (\d+) \| (\d+)$"); var reOrSingleLeftRule = new Regex(@"^(\d+): (\d+) \| (\d+) (\d+)$"); var reOrSingleRightRule = new Regex(@"^(\d+): (\d+) (\d+) \| (\d+)$"); var rules = new Dictionary <string, Rule>(); var matchingRules = true; var toCheck = new List <string>(); foreach (var line in lines) { if (line.Trim() == "X") { matchingRules = false; continue; } if (matchingRules) { var simple = reSimpleRule.Match(line); if (simple.Success) { rules.Add(simple.Groups[1].Value, new SimpleRule(rules, simple.Groups[2].Value)); } else { var pair = rePairRule.Match(line); if (pair.Success) { rules.Add(pair.Groups[1].Value, new PairRule(rules, pair.Groups[2].Value, pair.Groups[3].Value)); } else { var orPair = reOrPairRule.Match(line); if (orPair.Success) { rules.Add(orPair.Groups[1].Value, new OrPairRule(rules, orPair.Groups[2].Value, orPair.Groups[3].Value, orPair.Groups[4].Value, orPair.Groups[5].Value)); } else { var orSinglePair = reOrSingleRule.Match(line); if (orSinglePair.Success) { rules.Add(orSinglePair.Groups[1].Value, new OrSingleRule(rules, orSinglePair.Groups[2].Value, orSinglePair.Groups[3].Value)); } else { var orSingleLeft = reOrSingleLeftRule.Match(line); if (orSingleLeft.Success) { rules.Add(orSingleLeft.Groups[1].Value, new OrSingleLeftRule(rules, orSingleLeft.Groups[2].Value, orSingleLeft.Groups[3].Value, orSingleLeft.Groups[4].Value)); } else { var orSingleRight = reOrSingleRightRule.Match(line); if (orSingleRight.Success) { rules.Add(orSingleRight.Groups[1].Value, new OrSingleRightRule(rules, orSingleRight.Groups[2].Value, orSingleRight.Groups[3].Value, orSingleRight.Groups[4].Value)); } else { var orSingle = reSingleRule.Match(line); if (orSingle.Success) { rules.Add(orSingle.Groups[1].Value, new SingleRule(rules, orSingle.Groups[2].Value)); } else { var triple = reTripleRule.Match(line); if (triple.Success) { rules.Add(triple.Groups[1].Value, new TripleRule(rules, triple.Groups[2].Value, triple.Groups[3].Value, triple.Groups[4].Value)); } else { throw new FormatException(line); } } } } } } } } } else { toCheck.Add(line); } } //Console.WriteLine($"42: {BuildPattern(rules["42"])}"); //Console.WriteLine($"31: {BuildPattern(rules["31"])}"); rules["8"] = new Rule8(rules); var lastCount = 0; for (var i = 1; ; i += 1) { rules["11"] = new Rule11(rules, i); var pattern = BuildPattern(rules["0"]); //Console.WriteLine(pattern.ToString()); var count = toCheck.Count(i => pattern.IsMatch(i)); Console.WriteLine($"With {i} iterations, got: {count}"); if (count == lastCount) { break; } lastCount = count; } // 323 is wrong ////var keys = rules.Keys.Select(i => int.Parse(i)).OrderBy(i => i).ToList(); //var pattern = BuildPattern(rules["0"]); //Console.WriteLine(pattern.ToString()); //var count = toCheck.Count(i => pattern.IsMatch(i)); //Console.WriteLine(count); }); }