public void GetTriangles() { /* * 5987 * 5988 * 5990 * 6100 * * 16/9709 по X и по Y * 1077/9709 Ч ширина и высота треугольника * точка 1,1 Ч это вершина с пр¤мым углом * */ var repo = new ProblemsRepo(); var snapshotJson = repo.GetSnapshot(new ApiClient()); var ps = snapshotJson.Problems.Where(p => p.Owner == "149"); foreach (var problem in ps) { var pr = repo.Get(problem.Id); var points = pr.Points.Distinct().ToList(); if (points.Count == 7) { var w = points.Max(p => p.X); var h = points.Max(p => p.Y); var minW1 = points.Select(p => p.X).Where(ww => ww > 0).Min(); var minW2 = points.Select(p => w - p.X).Where(ww => ww > 0).Min(); var minH1 = points.Select(p => p.Y).Where(hh => hh > 0).Min(); var minH2 = points.Select(p => h - p.Y).Where(hh => hh > 0).Min(); var minW = minW1 > minW2 ? minW2 : minW1; var minH = minH1 > minH2 ? minH2 : minH1; Console.WriteLine($"{problem.Id}, \"{w}\", \"{h}\", \"{minW}\", \"{minH}\", {minW1 < minW2}"); } } }
public void DoSomething_WhenSomething(int problemId, string s887, string s112, bool toCorner) { var repo = new ProblemsRepo(); var problemSpec = repo.Get(problemId); var v887 = (Rational)s887; var v112 = (Rational)s112; var vRate = (1 - v112) / v887; vRate.Denomerator.Should().Be(1, $"rate={vRate.Numerator}/{vRate.Denomerator}"); var rate = (int)vRate.Numerator; var rateOddity = 1 - rate % 2; var sourcePoints = new List <Vector>(); var destPoints = new List <Vector>(); var facets = new List <Facet>(); for (int iX = 0; iX <= rate; iX++) { for (int iY = 0; iY <= rate; iY++) { sourcePoints.Add(new Vector(iX * v887, iY * v887)); if ((iX + iY) % 2 == 0) { destPoints.Add(new Vector(v887, v887)); } else if (iX % 2 == rateOddity) { destPoints.Add(new Vector(0, v887)); } else { destPoints.Add(new Vector(v887, 0)); } } } for (int iX = 0; iX < rate; iX++) { for (int iY = 0; iY < rate; iY++) { if ((iX + iY) % 2 == 0) { facets.Add(new Facet(iX * (rate + 1) + iY, iX * (rate + 1) + iY + 1, iX * (rate + 1) + iY + rate + 1)); facets.Add(new Facet(iX * (rate + 1) + iY + 1, iX * (rate + 1) + iY + rate + 1, iX * (rate + 1) + iY + rate + 2)); } else { facets.Add(new Facet(iX * (rate + 1) + iY, iX * (rate + 1) + iY + 1, iX * (rate + 1) + iY + rate + 2)); facets.Add(new Facet(iX * (rate + 1) + iY, iX * (rate + 1) + iY + rate + 2, iX * (rate + 1) + iY + rate + 1)); } } } for (int iX = 0; iX <= rate; iX++) { sourcePoints.Add(new Vector(iX * v887, 1)); destPoints.Add(new Vector(iX % 2 == rateOddity ? 0 : v887, v887 - v112)); } for (int iY = 0; iY <= rate; iY++) { sourcePoints.Add(new Vector(1, iY * v887)); destPoints.Add(new Vector(v887 - v112, iY % 2 == rateOddity ? 0 : v887)); } for (int iX = 0; iX < rate; iX++) { var start = (rate + 1) * (rate + 1); facets.Add(new Facet(start + iX, start + iX + 1, (iX + 2) * (rate + 1) - 1, (iX + 1) * (rate + 1) - 1)); } for (int iY = 0; iY < rate; iY++) { var start = (rate + 1) * (rate + 2); var start2 = (rate + 1) * rate; facets.Add(new Facet(start + iY, start + iY + 1, start2 + iY + 1, start2 + iY)); } sourcePoints.Add(new Vector(1, 1)); destPoints.Add(new Vector(v887 - v112, v887 - v112)); facets.Add(new Facet((rate + 1) * (rate + 1) - 1, (rate + 1) * (rate + 2) - 1, sourcePoints.Count - 1, sourcePoints.Count - 2)); var solution = new SolutionSpec(sourcePoints.ToArray(), facets.ToArray(), destPoints.ToArray()); if (toCorner) { solution = solution.Reflect(new Segment(new Vector(v887, 0), new Vector(0, v887))); } Console.Out.WriteLine($"size: {solution.Size()}; packed: {solution.Pack().Size()}"); Console.Out.WriteLine($"facets: {solution.Facets.Length}; sourcePoints: {solution.SourcePoints.Length}; destPoints: {solution.DestPoints.Length}"); //solution.CreateVisualizerForm().ShowDialog(); var post = ProblemsSender.Post(solution, problemSpec.id); Console.Out.WriteLine(post); // var v775 = (Rational)"479887358674775"; // var rational = v887*5 + 112; // var rational = (denominator - numerator)/112; // var rational = v775/112; // rational.Reduce(); // Console.Out.WriteLine($"{rational.Numerator}/{rational.Denomerator}"); // Console.Out.WriteLine(2399436793374547); //Console.Out.WriteLine((double)(Rational)"479887358674775/2399436793374547"); }