private int BruteSolve() { var maxPerimeter = Sequences.PythagoreanTriplets() .TakeWhile(x => x.Item1 + x.Item2 + x.Item3 < 1000) .ToLookup(x => x.Item1 + x.Item2 + x.Item3) .Aggregate(Tuple.Create(0, 0), (maxes, perimeters) => perimeters.Count() > maxes.Item1 ? Tuple.Create(perimeters.Count(), perimeters.Key) : maxes); return(maxPerimeter.Item2); }
static Tuple <int, int, int> SolveAbcAddTo1000() { foreach (var triplet in Sequences.PythagoreanTriplets()) { var a = triplet.Item1; var b = triplet.Item2; var c = triplet.Item3; if (a + b + c == 1000) { return(new Tuple <int, int, int>(a, b, c)); } if (a + b + c > 2000) { break; } } return(null); }