Beispiel #1
0
        public Trials(FreeStrategy strategy)
        {
            var logger = new NullLogger();

            for (var i = 0; i < TrialCount; i++)
            {
                var q = new Quest(strategy, 1, logger).FromRivendell();
                if (q.IsCorrupted())
                {
                    SARVs.Increment(q.Turns);
                }
                else if (q.IsRingDestroyed())
                {
                    FPRVs.Increment(q.Turns);
                }
                else
                {
                    Debug.Assert(false, "This game isn't finished. Why?");
                }
            }
        }
Beispiel #2
0
        public void Report()
        {
            Console.WriteLine($"{TrialCount} trials");
            Console.WriteLine($"FPRV median is {FPRVs.MedianIndex()} with {FPRVs.Fetch(FPRVs.MedianIndex())}");
            (int minTurn, int maxTurn)         = Turns();
            (int fpMaxHeight, int saMaxHeight) = Range();
            int trialsPerPixel = Max(fpMaxHeight, saMaxHeight) / ReportHeightPixels;
            var viewport       = new RectangleInt(
                minTurn - 1,
                fpMaxHeight / trialsPerPixel + 2,
                maxTurn + 1,
                -(saMaxHeight / trialsPerPixel + 1));
            var r = new Raster <string>(viewport, "");

            DrawAxisAndLabels(r, minTurn, maxTurn);
            // FPRV bars
            for (var turn = minTurn; turn <= maxTurn; turn++)
            {
                r.DrawRectangle(RectangleInt.XYWH(turn, 1, 1, FPRVs.Fetch(turn) / trialsPerPixel), " ###");
            }
            // SARV bars
            for (var turn = minTurn; turn <= maxTurn; turn++)
            {
                r.DrawRectangle(RectangleInt.XYWH(turn, 0, 1, -SARVs.Fetch(turn) / trialsPerPixel), " @@@");
            }
            for (var turn = minTurn; turn <= maxTurn; turn++)
            {
                int y = FPRVs.Fetch(turn);
                r.DrawPoint(turn, 1 + y / trialsPerPixel, y.ToString().PadLeft(ReportPixelWidth - 1));
            }
            for (var turn = minTurn; turn <= maxTurn; turn++)
            {
                int y = SARVs.Fetch(turn);
                r.DrawPoint(turn, -1 - y / trialsPerPixel, y.ToString().PadLeft(ReportPixelWidth - 1));
            }
            Console.WriteLine(r.ToAsciiArt(ReportPixelWidth));
        }