Exemple #1
0
        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);
        }
Exemple #2
0
        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");
        }