private static object crs(List <IdOffs> busses) { var N = busses.Select(f => (long)f.ID).Aggregate((a, b) => a * b); N.Debug("N"); foreach (var bus in busses) { bus.N = N / (long)bus.ID; } foreach (var bus in busses) { (_, var z1, var z2) = AocMath.Euklid(bus.N, bus.ID); bus.A = z1; } var sum = busses.Select(b => b.Offset * b.N * b.A).Sum(); sum = Math.Abs(sum); (sum % N).Debug("most likly the solution, if not try the result below xD"); return(N - (sum % N)); }
static void Main(string[] args) { var earliestts = 1000052; //earliestts = 939; earliestts.Debug("ts"); var foos = LoadFoos("input.txt"); //foos = LoadFoos("sample.txt"); Foo foo = foos.Select(id => new Foo() { Deperature = ((earliestts / id) + 1) * id, Id = id }) .Select(x => { x.Minutes = x.Deperature - earliestts; return(x); }) .OrderBy(s => s.Minutes).First(); foo.Debug(); var x = foo.Id * foo.Minutes; // x.AsResult1(); AocMath.GgT(156, 66).Debug("ggt"); crs(LoadFoos2("sample.txt")).Assert(1068781L); crs(LoadFoos2("sample2.txt")).Assert(3417L); crs(LoadFoos2("sample3.txt")).Assert(754018L); crs(LoadFoos2("sample4.txt")).Assert(779210L); crs(LoadFoos2("sample5.txt")).Assert(1261476L); crs(LoadFoos2("sample6.txt")).Assert(1202161486L); crs(LoadFoos2("input.txt")).Debug("crs (input)").AsResult2(); return; /* * * * * var f2Sorted = foos2.Skip(1).OrderByDescending(f => f.ID).ToList().Debug("sorted"); * * foos2.Select(f => $"(x + {f.Offset}) % {f.ID}").ToCommaString(" + ").Debug("0 = "); * * var max = foos2.Max(f => f.ID).Debug("max"); * var maxFoo = foos2.First(f => f.ID == max); * * var first = foos2.First().ID; * GenerateDeparturesFor(first, maxFoo) * .AsParallel() * .Where(d => f2Sorted.Skip(1).All(f => (d + f.Offset) % f.ID == 0)) * .First() * .AsResult2(); * * //var field = new Field<Foo>(f => f.Pos); * //field.Add(foos.Where(f => f.A != ".")); * * * //field.ToConsole(f => f.A); */ Report.End(); }