public void DoSomething_WhenSomething2(int problemId) { var repo = new ProblemsRepo(); var problemSpec = repo.Get(problemId); var sourcePoints = new List <Vector>(); var destPoints = new List <Vector>(); var facets = new List <Facet>(); for (int iX = 0; iX <= 31; iX++) { for (int iY = 0; iY <= 6; iY++) { sourcePoints.Add(new Vector(iX / (Rational)31, iY / (Rational)6)); if (iY % 2 == 0) { if (iX % 2 == 0) { destPoints.Add("0,0"); } else { destPoints.Add("1/31,0"); } } else if (iX % 2 == 0) { destPoints.Add("0,1/6"); } else { destPoints.Add("1/31,1/6"); } } } for (int iX = 0; iX < 31; iX++) { for (int iY = 0; iY < 6; iY++) { facets.Add(new Facet(iX * 7 + iY, iX * 7 + 1 + iY, (iX + 1) * 7 + iY + 1, (iX + 1) * 7 + iY)); } } var solution = new SolutionSpec(sourcePoints.ToArray(), facets.ToArray(), destPoints.ToArray()); 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); }
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"); }