internal void Run() { var digits = Enumerable.Range(0, 10).ToArray(); var cmb = new Combinatorics(); var maxSol = 0L; cmb.GeneratePermutations(digits, 10, arr => { var number = new string(arr.Select(c => (char)('0' + c)).ToArray()); var check = true; for (var i = 0; i < arr.Length - 1; i++) { var neighborSum = (arr[i] + arr[i + 1]).ToString(); if (!number.Contains(neighborSum)) { check = false; break; } } if (check) { var sol = Int64.Parse(number); if (sol > maxSol) { maxSol = sol; } } }, (candidate, countSoFar, partialSolution) => { return(countSoFar > 0 || candidate != 0); }); Console.WriteLine(maxSol); return; }
internal void Run() { List<int[]> combos = new List<int[]>(); var cmb = new Combinatorics(); var numbers = Enumerable.Range(1, 20).ToArray(); cmb.GenerateCombinations(numbers, 9, combo => { if (combo.Sum() == 51) { combos.Add(combo.ToArray()); } }, (itm, idx, partialCombo) => true); foreach (var combo in combos) { cmb.GeneratePermutations(combo, 9, result => { return; } , (candidate, position, partialSolution) => checkForSquareMagicSquare(candidate, position, partialSolution)); } return; }
internal void Run() { int counter = 0; var c = new Combinatorics(); int letterCount = 7; var letters = Enumerable.Range(0, letterCount).Select(offset => (char)(AChar + offset)).ToArray(); var envelopments = new List <string>(); c.GenerateAllTuples(letters, 3, tuple => { var x = new string(tuple); envelopments.Add(x); }, checkWrongEnvelope); //Console.WriteLine(String.Join("\r\n", envelopments)); c.GeneratePermutations(envelopments.ToArray(), letterCount, tuple => { var y = string.Join(",", tuple); //Console.WriteLine(y); counter++; Debug.Assert(counter <= 3437316); }, checkEnvelopePosition); Console.WriteLine(counter); }