Esempio n. 1
0
        public static FracClass computeAnswer(bool[] gondalas)
        {
            FracClass sum = 0;
            WheelLargeSlow dp = new WheelLargeSlow(gondalas);

            for (int i = 0; i < gondalas.Length; ++i)
            {
                if (gondalas[i])
                    continue;

                int nextI = (i + 1) % gondalas.Length;
                FracClass probIFilledLast = dp.P(nextI, i);
                FracClass expValue = dp.E(nextI, i);
#if USE_DOUBLE
                expValue += (double) (gondalas.Length + 1) / 2d;
#else
                expValue += new FracClass(gondalas.Length + 1, 2);
#endif
                sum += probIFilledLast * expValue;

                Preconditions.checkState(sum >= 0);
            }


            return sum;
        }
Esempio n. 2
0
        public void TestP()
        {
            bool[] gondolas = new bool[] { false, false, true, false, true };

            WheelLargeSlow dp = new WheelLargeSlow(gondolas);
            Assert.AreEqual((double)new BigFraction(12, 64), (double)dp.P(0, 3));

            gondolas = new bool[] { false, true, false, true, false };
            dp = new WheelLargeSlow(gondolas);

            Assert.AreEqual((double)new BigFraction(12, 64), (double)dp.P(4, 2));
        }
Esempio n. 3
0
        public void TestCompare()
        {
            int trials = 100;
            Random r = new Random(3);

            for(int t = 0; t < trials; ++t)
            {
                bool[] gondolas = new bool[7];
 
                for(int i = 0; i < gondolas.Length; ++i)
                {
                    gondolas[i] = r.Next(2) == 1 ? true : false;
                }
                int start = r.Next(0, gondolas.Length);
                int stop = r.Next(0, gondolas.Length);

                gondolas[start] = false;
                gondolas[stop] = false;

                WheelLargeSlow dp = new WheelLargeSlow(gondolas);
                Logger.LogTrace("Gondolas {} start {} stop {}", gondolas.ToCommaString(), start, stop);
                Assert.AreEqual((double)WheelBruteForce.P_bruteForce(gondolas, start, stop), 
                	(double)dp.P(start, stop), 1e-9, gondolas.ToCommaString());
            }
        }