public static Dictionary <int, List <Tuple <int, int, int> > > FindValidVelocityYs(Target target)
        {
            Dictionary <int, List <Tuple <int, int, int> > > dictVoT = new Dictionary <int, List <Tuple <int, int, int> > >();

            foreach (var velY in Enumerable.Range(-130, 1000))
            {
                var sut  = new TrickShotProbe(0, velY);
                int sec  = 0;
                int maxY = int.MinValue;
                do
                {
                    sec++;
                    sut.DoSecondY();
                    if (sut.Y > maxY)
                    {
                        maxY = sut.Y;
                    }
                    if (target.InsideY(sut.Y))
                    {
                        Debug.WriteLine($"velY: {velY}, t: {sec}, Y: {sut.Y},  maxY: {maxY}");
                        if (!dictVoT.ContainsKey(velY))
                        {
                            dictVoT.Add(velY, new List <Tuple <int, int, int> >());
                        }

                        dictVoT[velY].Add(new Tuple <int, int, int>(velY, sec, maxY));
                    }
                } while (sut.Y >= target.Y1);
            }
            return(dictVoT);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="target"></param>
        /// <returns></returns>
        public static Dictionary <int, List <Tuple <int, int, int> > > FindValidVelocityXs(Target target)
        {
            Dictionary <int, List <Tuple <int, int, int> > > dictVoT = new Dictionary <int, List <Tuple <int, int, int> > >();

            foreach (var velX in Enumerable.Range(10, target.X2))
            {
                var sut = new TrickShotProbe(velX, 0);
                int sec = 0;
                do
                {
                    sec++;
                    sut.DoSecondX();
                    if (target.InsideX(sut.X))
                    {
                        Debug.WriteLine($"velX: {velX}, t: {sec}, X: {sut.X}");
                        if (!dictVoT.ContainsKey(velX))
                        {
                            dictVoT.Add(velX, new List <Tuple <int, int, int> >());
                        }

                        dictVoT[velX].Add(new Tuple <int, int, int>(velX, sec, sut.X));
                    }
                } while (sut.X <= target.X2 && sut.Velx > 0);
            }
            return(dictVoT);
        }