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?"); } } }
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)); }