From 616919fda715f93732e21a37030da15f82fe0394 Mon Sep 17 00:00:00 2001
From: rNLKJA <62606765+rNLKJA@users.noreply.github.com>
Date: Tue, 6 Oct 2026 00:58:18 +1030
Subject: [PATCH 01/18] feat(stats): add statistics helpers verified against
scipy and R
Wilson and Newcombe intervals, seeded percentile bootstrap (plain,
stratified, paired and vector-valued), Wilcoxon signed-rank (exact and
tie-corrected normal approximation) with rank-biserial effect size,
Bradley-Terry by MM with an Elo conversion, type-7 quantiles and
high-precision normal functions. Unit tests pin reference values from
scipy 1.17, statsmodels and R.
Co-Authored-By: Claude Opus 5.5
---
web/src/lib/stats/bootstrap.ts | 152 +++++++++++++++++
web/src/lib/stats/bradley-terry.ts | 107 ++++++++++++
web/src/lib/stats/descriptive.ts | 73 ++++++++
web/src/lib/stats/format.ts | 37 ++++
web/src/lib/stats/normal.ts | 116 +++++++++++++
web/src/lib/stats/proportion.ts | 71 ++++++++
web/src/lib/stats/stats.test.ts | 260 +++++++++++++++++++++++++++++
web/src/lib/stats/wilcoxon.ts | 108 ++++++++++++
8 files changed, 924 insertions(+)
create mode 100644 web/src/lib/stats/bootstrap.ts
create mode 100644 web/src/lib/stats/bradley-terry.ts
create mode 100644 web/src/lib/stats/descriptive.ts
create mode 100644 web/src/lib/stats/format.ts
create mode 100644 web/src/lib/stats/normal.ts
create mode 100644 web/src/lib/stats/proportion.ts
create mode 100644 web/src/lib/stats/stats.test.ts
create mode 100644 web/src/lib/stats/wilcoxon.ts
diff --git a/web/src/lib/stats/bootstrap.ts b/web/src/lib/stats/bootstrap.ts
new file mode 100644
index 0000000..d2982ed
--- /dev/null
+++ b/web/src/lib/stats/bootstrap.ts
@@ -0,0 +1,152 @@
+/**
+ * Seeded percentile bootstrap. Every interval records its seed and number of
+ * resamples so a result on the site can be reproduced exactly.
+ */
+import { createRng } from "@/lib/rng";
+import { mean, quantileSorted, sd } from "./descriptive";
+
+export interface BootstrapOptions {
+ /** Number of resamples (default 2000). */
+ reps?: number;
+ /** Confidence level (default 0.95). */
+ level?: number;
+ /** Seed for the resampling RNG. */
+ seed: number;
+}
+
+export interface BootstrapCI {
+ /** The statistic on the original sample. */
+ estimate: number;
+ lower: number;
+ upper: number;
+ level: number;
+ reps: number;
+ seed: number;
+}
+
+/** Percentile interval of a bootstrap distribution (type-7 quantiles). */
+export function percentileInterval(
+ replicates: readonly number[],
+ level: number,
+): { lower: number; upper: number } {
+ const finite = replicates.filter(Number.isFinite).sort((a, b) => a - b);
+ if (finite.length === 0) return { lower: NaN, upper: NaN };
+ const alpha = (1 - level) / 2;
+ return { lower: quantileSorted(finite, alpha), upper: quantileSorted(finite, 1 - alpha) };
+}
+
+/** Bootstrap a statistic of one sample by resampling its elements with replacement. */
+export function bootstrap(
+ data: readonly T[],
+ statistic: (sample: readonly T[]) => number,
+ { reps = 2000, level = 0.95, seed }: BootstrapOptions,
+): BootstrapCI {
+ const estimate = statistic(data);
+ const n = data.length;
+ if (n === 0) return { estimate, lower: NaN, upper: NaN, level, reps, seed };
+ const rng = createRng(seed);
+ const sample = new Array(n);
+ const replicates = new Array(reps);
+ for (let b = 0; b < reps; b++) {
+ for (let i = 0; i < n; i++) sample[i] = data[Math.floor(rng() * n)];
+ replicates[b] = statistic(sample);
+ }
+ return { estimate, ...percentileInterval(replicates, level), level, reps, seed };
+}
+
+/**
+ * Stratified bootstrap: resample within each stratum independently, keeping
+ * stratum sizes fixed (e.g. games within each pairing of a round robin).
+ */
+export function stratifiedBootstrap(
+ strata: readonly (readonly T[])[],
+ statistic: (strata: readonly (readonly T[])[]) => number,
+ { reps = 2000, level = 0.95, seed }: BootstrapOptions,
+): BootstrapCI {
+ const estimate = statistic(strata);
+ const rng = createRng(seed);
+ const samples = strata.map((s) => new Array(s.length));
+ const replicates = new Array(reps);
+ for (let b = 0; b < reps; b++) {
+ strata.forEach((s, k) => {
+ const out = samples[k];
+ for (let i = 0; i < s.length; i++) out[i] = s[Math.floor(rng() * s.length)];
+ });
+ replicates[b] = statistic(samples);
+ }
+ return { estimate, ...percentileInterval(replicates, level), level, reps, seed };
+}
+
+/** Bootstrap CI for a mean. */
+export const bootstrapMean = (xs: readonly number[], opts: BootstrapOptions) =>
+ bootstrap(xs, mean, opts);
+
+export interface PairedDifference {
+ n: number;
+ meanX: number;
+ meanY: number;
+ /** Mean of the paired differences x - y, with a paired bootstrap CI. */
+ meanDiff: BootstrapCI;
+ /** Cohen's d_z: mean difference / SD of the differences. */
+ dz: number;
+}
+
+/**
+ * Paired comparison of two measurements on the same units: resamples the
+ * units (pairs), never the two arms independently.
+ */
+export function pairedMeanDifference(
+ x: readonly number[],
+ y: readonly number[],
+ opts: BootstrapOptions,
+): PairedDifference {
+ if (x.length !== y.length) throw new RangeError("paired samples must have equal length");
+ const d = x.map((xi, i) => xi - y[i]);
+ const s = sd(d);
+ return {
+ n: d.length,
+ meanX: mean(x),
+ meanY: mean(y),
+ meanDiff: bootstrapMean(d, opts),
+ dz: s > 0 ? mean(d) / s : 0,
+ };
+}
+
+/**
+ * Stratified bootstrap of a vector-valued statistic (e.g. every player's
+ * strength from one refit), with a percentile interval per component.
+ */
+export function stratifiedBootstrapVector(
+ strata: readonly (readonly T[])[],
+ statistic: (strata: readonly (readonly T[])[]) => number[],
+ { reps = 2000, level = 0.95, seed }: BootstrapOptions,
+): {
+ estimate: number[];
+ lower: number[];
+ upper: number[];
+ level: number;
+ reps: number;
+ seed: number;
+} {
+ const estimate = statistic(strata);
+ const rng = createRng(seed);
+ const samples = strata.map((s) => new Array(s.length));
+ const replicates: number[][] = estimate.map(() => new Array(reps));
+ for (let b = 0; b < reps; b++) {
+ strata.forEach((s, k) => {
+ const out = samples[k];
+ for (let i = 0; i < s.length; i++) out[i] = s[Math.floor(rng() * s.length)];
+ });
+ const value = statistic(samples);
+ value.forEach((v, c) => (replicates[c][b] = v));
+ }
+ const intervals = replicates.map((r) => percentileInterval(r, level));
+ return {
+ estimate,
+ lower: intervals.map((i) => i.lower),
+ upper: intervals.map((i) => i.upper),
+ level,
+ reps,
+ seed,
+ };
+}
diff --git a/web/src/lib/stats/bradley-terry.ts b/web/src/lib/stats/bradley-terry.ts
new file mode 100644
index 0000000..3c853e3
--- /dev/null
+++ b/web/src/lib/stats/bradley-terry.ts
@@ -0,0 +1,107 @@
+/**
+ * Bradley-Terry strengths from pairwise results, fitted by the
+ * minorisation-maximisation (MM) algorithm of Hunter (2004).
+ *
+ * P(i beats j) = p_i / (p_i + p_j). Draws count as half a win to each side.
+ * Strengths are returned on the log scale (theta_i = ln p_i, mean zero) and on
+ * the Elo scale (400 · log10 p_i), optionally anchored to a reference player.
+ *
+ * `prior` adds that many virtual drawn games to every pairing that was played
+ * (a light shrinkage towards equal strength). Without it, an agent that wins
+ * or loses every game has an infinite maximum-likelihood strength.
+ */
+
+export interface PairOutcome {
+ /** Index of the first player. */
+ i: number;
+ /** Index of the second player. */
+ j: number;
+ /** Points scored by i against j (wins + draws / 2). */
+ scoreI: number;
+ /** Points scored by j against i. */
+ scoreJ: number;
+}
+
+export interface BradleyTerryOptions {
+ /** Virtual drawn games added to each played pairing (default 1, i.e. +0.5 points each side). */
+ prior?: number;
+ maxIter?: number;
+ tol?: number;
+}
+
+export interface BradleyTerryFit {
+ /** ln p_i, centred so the mean is zero. */
+ theta: number[];
+ iterations: number;
+ converged: boolean;
+}
+
+export function fitBradleyTerry(
+ k: number,
+ outcomes: readonly PairOutcome[],
+ { prior = 1, maxIter = 10_000, tol = 1e-10 }: BradleyTerryOptions = {},
+): BradleyTerryFit {
+ // Aggregate into a symmetric matrix of points and games.
+ const points = Array.from({ length: k }, () => new Float64Array(k));
+ const games = Array.from({ length: k }, () => new Float64Array(k));
+ for (const { i, j, scoreI, scoreJ } of outcomes) {
+ if (i === j) continue;
+ points[i][j] += scoreI;
+ points[j][i] += scoreJ;
+ games[i][j] += scoreI + scoreJ;
+ games[j][i] += scoreI + scoreJ;
+ }
+ if (prior > 0) {
+ for (let i = 0; i < k; i++) {
+ for (let j = 0; j < k; j++) {
+ if (i !== j && games[i][j] > 0) {
+ points[i][j] += prior / 2;
+ games[i][j] += prior;
+ }
+ }
+ }
+ }
+
+ const wins = points.map((row) => row.reduce((s, v) => s + v, 0));
+ let p = new Float64Array(k).fill(1);
+ let iterations = 0;
+ let converged = false;
+ for (; iterations < maxIter; iterations++) {
+ const next = new Float64Array(k);
+ for (let i = 0; i < k; i++) {
+ let denom = 0;
+ for (let j = 0; j < k; j++) {
+ if (i !== j && games[i][j] > 0) denom += games[i][j] / (p[i] + p[j]);
+ }
+ next[i] = denom > 0 ? wins[i] / denom : p[i];
+ }
+ // Normalise to geometric mean 1 so the fit is identifiable.
+ const logMean = next.reduce((s, v) => s + Math.log(v), 0) / k;
+ const scale = Math.exp(logMean);
+ let change = 0;
+ for (let i = 0; i < k; i++) {
+ next[i] /= scale;
+ change = Math.max(change, Math.abs(Math.log(next[i]) - Math.log(p[i])));
+ }
+ p = next;
+ if (change < tol) {
+ converged = true;
+ iterations++;
+ break;
+ }
+ }
+ const theta = Array.from(p, (v) => Math.log(v));
+ const centre = theta.reduce((s, v) => s + v, 0) / k;
+ return { theta: theta.map((t) => t - centre), iterations, converged };
+}
+
+/** Convert natural-log strengths to Elo points (400 per factor of 10 in odds). */
+export const ELO_PER_NAT = 400 / Math.LN10;
+
+export function toElo(theta: readonly number[], anchor?: number): number[] {
+ const offset = anchor === undefined ? 0 : theta[anchor];
+ return theta.map((t) => (t - offset) * ELO_PER_NAT);
+}
+
+/** Expected score of a player rated `a` against one rated `b` on the Elo scale. */
+export const eloExpected = (a: number, b: number) => 1 / (1 + 10 ** ((b - a) / 400));
diff --git a/web/src/lib/stats/descriptive.ts b/web/src/lib/stats/descriptive.ts
new file mode 100644
index 0000000..fb95825
--- /dev/null
+++ b/web/src/lib/stats/descriptive.ts
@@ -0,0 +1,73 @@
+/** Descriptive statistics. Every function treats its input as read-only. */
+
+export function sum(xs: readonly number[]): number {
+ let s = 0;
+ for (const x of xs) s += x;
+ return s;
+}
+
+export function mean(xs: readonly number[]): number {
+ if (xs.length === 0) return NaN;
+ return sum(xs) / xs.length;
+}
+
+/** Sample variance (ddof = 1 by default, like R's var and numpy's var(ddof=1)). */
+export function variance(xs: readonly number[], ddof = 1): number {
+ if (xs.length - ddof <= 0) return NaN;
+ const m = mean(xs);
+ let ss = 0;
+ for (const x of xs) ss += (x - m) ** 2;
+ return ss / (xs.length - ddof);
+}
+
+export const sd = (xs: readonly number[], ddof = 1) => Math.sqrt(variance(xs, ddof));
+
+/**
+ * Quantile with linear interpolation between order statistics: R's default
+ * type 7 and numpy's default "linear" method.
+ */
+export function quantile(xs: readonly number[], p: number): number {
+ if (xs.length === 0) return NaN;
+ const sorted = [...xs].sort((a, b) => a - b);
+ return quantileSorted(sorted, p);
+}
+
+/** As `quantile`, for input that is already sorted ascending. */
+export function quantileSorted(sorted: readonly number[], p: number): number {
+ const n = sorted.length;
+ if (n === 0) return NaN;
+ if (p <= 0) return sorted[0];
+ if (p >= 1) return sorted[n - 1];
+ const h = (n - 1) * p;
+ const lo = Math.floor(h);
+ const hi = Math.min(lo + 1, n - 1);
+ return sorted[lo] + (h - lo) * (sorted[hi] - sorted[lo]);
+}
+
+export const median = (xs: readonly number[]) => quantile(xs, 0.5);
+
+/** Geometric mean of strictly positive values. */
+export function geometricMean(xs: readonly number[]): number {
+ if (xs.length === 0) return NaN;
+ return Math.exp(mean(xs.map(Math.log)));
+}
+
+/**
+ * Average ranks (1-based) with ties sharing the mean of the ranks they span,
+ * plus the sizes of each tie group (used for variance corrections).
+ */
+export function rankWithTies(xs: readonly number[]): { ranks: number[]; tieSizes: number[] } {
+ const order = xs.map((x, i) => [x, i] as const).sort((a, b) => a[0] - b[0]);
+ const ranks = new Array(xs.length);
+ const tieSizes: number[] = [];
+ let i = 0;
+ while (i < order.length) {
+ let j = i;
+ while (j + 1 < order.length && order[j + 1][0] === order[i][0]) j++;
+ const avg = (i + j) / 2 + 1;
+ for (let k = i; k <= j; k++) ranks[order[k][1]] = avg;
+ tieSizes.push(j - i + 1);
+ i = j + 1;
+ }
+ return { ranks, tieSizes };
+}
diff --git a/web/src/lib/stats/format.ts b/web/src/lib/stats/format.ts
new file mode 100644
index 0000000..bf17090
--- /dev/null
+++ b/web/src/lib/stats/format.ts
@@ -0,0 +1,37 @@
+/** Consistent number formatting for estimates and intervals (en-AU). */
+
+export function formatPct(p: number, digits = 1): string {
+ if (!Number.isFinite(p)) return "–";
+ return `${(p * 100).toFixed(digits)}%`;
+}
+
+/** "[83.4%, 93.8%]" */
+export function formatPctInterval(lower: number, upper: number, digits = 1): string {
+ return `[${formatPct(lower, digits)}, ${formatPct(upper, digits)}]`;
+}
+
+export function formatNumber(x: number, digits = 1): string {
+ if (!Number.isFinite(x)) return x > 0 ? "+∞" : x < 0 ? "−∞" : "–";
+ const s = x.toLocaleString("en-AU", {
+ minimumFractionDigits: digits,
+ maximumFractionDigits: digits,
+ });
+ return s.replace(/^-/, "−");
+}
+
+export function formatSigned(x: number, digits = 1): string {
+ const s = formatNumber(x, digits);
+ return x > 0 ? `+${s}` : s;
+}
+
+/** "[−12.3, 4.5]" */
+export function formatInterval(lower: number, upper: number, digits = 1): string {
+ return `[${formatNumber(lower, digits)}, ${formatNumber(upper, digits)}]`;
+}
+
+/** p-values: "< 0.001" or three significant decimals. */
+export function formatP(p: number): string {
+ if (!Number.isFinite(p)) return "–";
+ if (p < 0.001) return "< 0.001";
+ return p.toFixed(3);
+}
diff --git a/web/src/lib/stats/normal.ts b/web/src/lib/stats/normal.ts
new file mode 100644
index 0000000..5056db3
--- /dev/null
+++ b/web/src/lib/stats/normal.ts
@@ -0,0 +1,116 @@
+/**
+ * Standard normal distribution helpers, accurate to near double precision.
+ *
+ * erf / erfc use a positive-term series for small arguments and a continued
+ * fraction (modified Lentz) for large ones, so there is no catastrophic
+ * cancellation in the tails that Wilcoxon p-values live in.
+ */
+
+const SQRT_PI = Math.sqrt(Math.PI);
+
+/** erf(x) for 0 <= x < 2 via erf(x) = 2/sqrt(pi) e^{-x^2} sum 2^n x^{2n+1} / (2n+1)!! */
+function erfSeries(x: number): number {
+ const x2 = x * x;
+ let term = x;
+ let sum = x;
+ for (let n = 1; n < 200; n++) {
+ term *= (2 * x2) / (2 * n + 1);
+ sum += term;
+ if (term < sum * 1e-17) break;
+ }
+ return (2 / SQRT_PI) * Math.exp(-x2) * sum;
+}
+
+/** erfc(x) for x >= 2 via its continued fraction. */
+function erfcContinuedFraction(x: number): number {
+ // erfc(x) = e^{-x^2}/sqrt(pi) * 1/(x + (1/2)/(x + 1/(x + (3/2)/(x + 2/(x + ...)))))
+ const tiny = 1e-300;
+ let f = x;
+ if (f === 0) f = tiny;
+ let c = f;
+ let d = 0;
+ for (let i = 1; i < 5000; i++) {
+ const a = i / 2;
+ d = x + a * d;
+ d = d === 0 ? tiny : d;
+ c = x + a / c;
+ c = c === 0 ? tiny : c;
+ d = 1 / d;
+ const delta = c * d;
+ f *= delta;
+ if (Math.abs(delta - 1) < 1e-16) break;
+ }
+ return Math.exp(-x * x) / SQRT_PI / f;
+}
+
+export function erfc(x: number): number {
+ if (Number.isNaN(x)) return NaN;
+ if (x < 0) return 2 - erfc(-x);
+ if (x < 2) return 1 - erfSeries(x);
+ return erfcContinuedFraction(x);
+}
+
+export function erf(x: number): number {
+ return 1 - erfc(x);
+}
+
+/** P(Z <= z) for a standard normal Z. */
+export function normalCdf(z: number): number {
+ return 0.5 * erfc(-z / Math.SQRT2);
+}
+
+/** P(Z > z), computed directly so small upper tails keep their precision. */
+export function normalSf(z: number): number {
+ return 0.5 * erfc(z / Math.SQRT2);
+}
+
+/**
+ * Inverse standard normal CDF. Acklam's rational approximation (relative
+ * error about 1e-9) refined with one Halley step against normalCdf.
+ */
+export function normalQuantile(p: number): number {
+ if (!(p > 0 && p < 1)) {
+ if (p === 0) return -Infinity;
+ if (p === 1) return Infinity;
+ return NaN;
+ }
+ const a = [
+ -3.969683028665376e1, 2.209460984245205e2, -2.759285104469687e2, 1.38357751867269e2,
+ -3.066479806614716e1, 2.506628277459239,
+ ];
+ const b = [
+ -5.447609879822406e1, 1.615858368580409e2, -1.556989798598866e2, 6.680131188771972e1,
+ -1.328068155288572e1,
+ ];
+ const c = [
+ -7.784894002430293e-3, -3.223964580411365e-1, -2.400758277161838, -2.549732539343734,
+ 4.374664141464968, 2.938163982698783,
+ ];
+ const d = [7.784695709041462e-3, 3.224671290700398e-1, 2.445134137142996, 3.754408661907416];
+ const lo = 0.02425;
+ let x: number;
+ if (p < lo) {
+ const q = Math.sqrt(-2 * Math.log(p));
+ x =
+ (((((c[0] * q + c[1]) * q + c[2]) * q + c[3]) * q + c[4]) * q + c[5]) /
+ ((((d[0] * q + d[1]) * q + d[2]) * q + d[3]) * q + 1);
+ } else if (p <= 1 - lo) {
+ const q = p - 0.5;
+ const r = q * q;
+ x =
+ ((((((a[0] * r + a[1]) * r + a[2]) * r + a[3]) * r + a[4]) * r + a[5]) * q) /
+ (((((b[0] * r + b[1]) * r + b[2]) * r + b[3]) * r + b[4]) * r + 1);
+ } else {
+ const q = Math.sqrt(-2 * Math.log(1 - p));
+ x =
+ -(((((c[0] * q + c[1]) * q + c[2]) * q + c[3]) * q + c[4]) * q + c[5]) /
+ ((((d[0] * q + d[1]) * q + d[2]) * q + d[3]) * q + 1);
+ }
+ // One Halley refinement step.
+ const e = normalCdf(x) - p;
+ const u = e * Math.sqrt(2 * Math.PI) * Math.exp((x * x) / 2);
+ return x - u / (1 + (x * u) / 2);
+}
+
+/** Two-sided critical value for a confidence level, e.g. 0.95 → 1.959964. */
+export const zCritical = (level: number) => normalQuantile(1 - (1 - level) / 2);
diff --git a/web/src/lib/stats/proportion.ts b/web/src/lib/stats/proportion.ts
new file mode 100644
index 0000000..4032cc5
--- /dev/null
+++ b/web/src/lib/stats/proportion.ts
@@ -0,0 +1,71 @@
+/**
+ * Confidence intervals for proportions.
+ *
+ * Wilson's score interval is used everywhere a win rate, illegal-move rate or
+ * agreement rate is shown: unlike the Wald interval it behaves at 0% and 100%
+ * and keeps close to nominal coverage for the small samples a browser can run.
+ */
+import { zCritical } from "./normal";
+
+export interface ProportionCI {
+ successes: number;
+ n: number;
+ /** Point estimate successes / n (NaN when n = 0). */
+ p: number;
+ lower: number;
+ upper: number;
+ level: number;
+}
+
+export function wilson(successes: number, n: number, level = 0.95): ProportionCI {
+ if (!Number.isFinite(successes) || !Number.isFinite(n) || successes < 0 || successes > n) {
+ throw new RangeError(`invalid proportion ${successes}/${n}`);
+ }
+ if (n === 0) return { successes, n, p: NaN, lower: 0, upper: 1, level };
+ const z = zCritical(level);
+ const p = successes / n;
+ const z2 = z * z;
+ const denom = 1 + z2 / n;
+ const centre = (p + z2 / (2 * n)) / denom;
+ const half = (z * Math.sqrt((p * (1 - p)) / n + z2 / (4 * n * n))) / denom;
+ return {
+ successes,
+ n,
+ p,
+ // Clamp exact endpoints so 0/n and n/n report exactly 0 and 1.
+ lower: successes === 0 ? 0 : Math.max(0, centre - half),
+ upper: successes === n ? 1 : Math.min(1, centre + half),
+ level,
+ };
+}
+
+export interface DifferenceCI {
+ /** p1 - p2 */
+ estimate: number;
+ lower: number;
+ upper: number;
+ level: number;
+}
+
+/**
+ * Newcombe's hybrid score interval (method 10) for the difference of two
+ * independent proportions, built from the two Wilson intervals.
+ */
+export function newcombeDifference(
+ x1: number,
+ n1: number,
+ x2: number,
+ n2: number,
+ level = 0.95,
+): DifferenceCI {
+ const a = wilson(x1, n1, level);
+ const b = wilson(x2, n2, level);
+ const d = a.p - b.p;
+ const lower = d - Math.sqrt((a.p - a.lower) ** 2 + (b.upper - b.p) ** 2);
+ const upper = d + Math.sqrt((a.upper - a.p) ** 2 + (b.p - b.lower) ** 2);
+ return { estimate: d, lower, upper, level };
+}
+
+/** Cohen's h effect size for two proportions. */
+export const cohensH = (p1: number, p2: number) =>
+ 2 * Math.asin(Math.sqrt(p1)) - 2 * Math.asin(Math.sqrt(p2));
diff --git a/web/src/lib/stats/stats.test.ts b/web/src/lib/stats/stats.test.ts
new file mode 100644
index 0000000..3b632bf
--- /dev/null
+++ b/web/src/lib/stats/stats.test.ts
@@ -0,0 +1,260 @@
+/**
+ * Reference values were computed with scipy 1.17.1 / statsmodels (uv, Python
+ * 3.12) and cross-checked with R 4.x (prop.test(correct = FALSE),
+ * wilcox.test, quantile(type = 7)). See "Verifying the statistics" in the
+ * README.
+ */
+import { describe, expect, it } from "vitest";
+
+import { bootstrap, bootstrapMean, pairedMeanDifference, stratifiedBootstrap } from "./bootstrap";
+import { type PairOutcome, eloExpected, fitBradleyTerry, toElo } from "./bradley-terry";
+import { geometricMean, mean, median, quantile, rankWithTies, sd, variance } from "./descriptive";
+import { formatP, formatPct, formatPctInterval, formatSigned } from "./format";
+import { erf, normalCdf, normalQuantile, normalSf, zCritical } from "./normal";
+import { cohensH, newcombeDifference, wilson } from "./proportion";
+import { wilcoxonSignedRank } from "./wilcoxon";
+
+describe("normal distribution", () => {
+ it("matches scipy.stats.norm", () => {
+ expect(normalCdf(1.2345)).toBeCloseTo(0.8914916766373298, 14);
+ expect(normalQuantile(0.975)).toBeCloseTo(1.959963984540054, 12);
+ expect(normalQuantile(0.001)).toBeCloseTo(-3.090232306167813, 11);
+ expect(normalSf(3.5) / 0.00023262907903552502).toBeCloseTo(1, 12);
+ expect(zCritical(0.95)).toBeCloseTo(1.959963984540054, 12);
+ });
+
+ it("is symmetric and handles the extremes", () => {
+ expect(normalCdf(0)).toBe(0.5);
+ expect(normalCdf(-2) + normalCdf(2)).toBeCloseTo(1, 15);
+ expect(erf(0.5)).toBeCloseTo(0.5204998778130465, 15);
+ expect(normalQuantile(0)).toBe(-Infinity);
+ expect(normalQuantile(1)).toBe(Infinity);
+ expect(normalQuantile(2)).toBeNaN();
+ for (const p of [1e-8, 0.01, 0.3, 0.5, 0.77, 0.999999]) {
+ expect(normalCdf(normalQuantile(p)) / p).toBeCloseTo(1, 10);
+ }
+ });
+});
+
+describe("descriptive statistics", () => {
+ const a = [3.1, 0.2, 5.5, 2.2, 9.9, 4.4, 1.0];
+
+ it("matches numpy (ddof = 1) and R type-7 quantiles", () => {
+ expect(variance(a)).toBeCloseTo(10.716190476190476, 12);
+ expect(sd(a)).toBeCloseTo(3.2735592977965857, 12);
+ const expected = [0.32, 1.6, 3.1, 7.26, 9.24];
+ [0.025, 0.25, 0.5, 0.9, 0.975].forEach((p, i) =>
+ expect(quantile(a, p)).toBeCloseTo(expected[i], 12),
+ );
+ expect(median([4, 1, 3, 2])).toBe(2.5);
+ expect(mean([])).toBeNaN();
+ expect(geometricMean([1, 100])).toBeCloseTo(10, 12);
+ });
+
+ it("does not mutate its input", () => {
+ const copy = [...a];
+ quantile(a, 0.3);
+ expect(a).toEqual(copy);
+ });
+
+ it("assigns average ranks to ties", () => {
+ const { ranks, tieSizes } = rankWithTies([10, 20, 10, 30, 20, 20]);
+ expect(ranks).toEqual([1.5, 4, 1.5, 6, 4, 4]);
+ expect(tieSizes.sort()).toEqual([1, 2, 3]);
+ });
+});
+
+describe("Wilson score interval", () => {
+ // statsmodels proportion_confint(method="wilson"); R prop.test(correct = FALSE)
+ it.each([
+ [144, 160, 0.8437374796961266, 0.9375055641666694],
+ [0, 10, 0.0, 0.27753279986288926],
+ [10, 10, 0.7224672001371106, 1.0],
+ [7, 20, 0.18119182410108203, 0.5671457233147638],
+ [1, 4, 0.0455872608097006, 0.6993581574175982],
+ [17, 20, 0.639581135259243, 0.9476312541037833],
+ [50, 100, 0.4038315303659956, 0.5961684696340044],
+ ])("%i / %i", (x, n, lo, hi) => {
+ const ci = wilson(x, n);
+ expect(ci.p).toBeCloseTo(x / n, 15);
+ expect(ci.lower).toBeCloseTo(lo, 12);
+ expect(ci.upper).toBeCloseTo(hi, 12);
+ });
+
+ it("supports other confidence levels", () => {
+ const ci = wilson(7, 20, 0.9);
+ expect(ci.lower).toBeCloseTo(0.202260040056761, 12);
+ expect(ci.upper).toBeCloseTo(0.5334873111515284, 12);
+ });
+
+ it("is uninformative with no data and rejects impossible counts", () => {
+ expect(wilson(0, 0)).toMatchObject({ lower: 0, upper: 1 });
+ expect(() => wilson(5, 4)).toThrow(RangeError);
+ expect(() => wilson(-1, 4)).toThrow(RangeError);
+ });
+
+ it("Newcombe difference interval matches statsmodels (method newcomb)", () => {
+ const cases: [number, number, number, number, number, number][] = [
+ [144, 160, 30, 40, 0.02810942807812558, 0.3065002035431229],
+ [17, 20, 15, 20, -0.15171072320577428, 0.3395035190745355],
+ [0, 10, 5, 10, -0.7634069094874361, -0.11736746745022203],
+ ];
+ for (const [x1, n1, x2, n2, lo, hi] of cases) {
+ const d = newcombeDifference(x1, n1, x2, n2);
+ expect(d.estimate).toBeCloseTo(x1 / n1 - x2 / n2, 15);
+ expect(d.lower).toBeCloseTo(lo, 12);
+ expect(d.upper).toBeCloseTo(hi, 12);
+ }
+ expect(cohensH(0.5, 0.5)).toBe(0);
+ expect(cohensH(0.9, 0.5)).toBeCloseTo(0.9272952180016122, 12);
+ });
+});
+
+describe("Wilcoxon signed-rank test", () => {
+ it("normal approximation with a zero and tied ranks (scipy, correction off/on)", () => {
+ const x = [125, 115, 130, 140, 140, 115, 140, 125, 140, 135];
+ const y = [110, 122, 125, 120, 140, 124, 123, 137, 135, 145];
+ const r = wilcoxonSignedRank(x, y);
+ expect(r.method).toBe("approx");
+ expect(r.zeros).toBe(1);
+ expect(r.n).toBe(9);
+ expect(r.statistic).toBe(18);
+ expect(r.pValue).toBeCloseTo(0.5936305914425295, 12);
+ const c = wilcoxonSignedRank(x, y, { continuityCorrection: true });
+ expect(c.pValue).toBeCloseTo(0.6352893188352069, 12);
+ });
+
+ it("exact null distribution without ties (scipy method='exact', R exact = TRUE)", () => {
+ const d = [1.5, -0.3, 2.2, 3.1, -1.7, 0.9, 4.0, 2.6, -0.2, 1.1, 0.4, 5.3];
+ const r = wilcoxonSignedRank(d);
+ expect(r.method).toBe("exact");
+ expect(r.statistic).toBe(10);
+ expect(r.wPlus).toBe(68); // R's V
+ expect(r.pValue).toBeCloseTo(0.02099609375, 14);
+ const approx = wilcoxonSignedRank(d, undefined, { method: "approx" });
+ expect(approx.pValue).toBeCloseTo(0.0229090993543566, 12);
+ expect(r.rankBiserial).toBeCloseTo((68 - 10) / 78, 14);
+ });
+
+ it("drops zeros and corrects for ties (scipy; R wilcox.test V = 95.5)", () => {
+ const d = [3, -1, 4, 4, 0, 2, -2, 5, 3, 0, 1, 6, -1, 2, 2, 7];
+ const r = wilcoxonSignedRank(d);
+ expect(r.method).toBe("approx");
+ expect(r.statistic).toBe(9.5);
+ expect(r.wPlus).toBe(95.5);
+ expect(r.pValue).toBeCloseTo(0.00672649504011445, 12);
+ expect(() => wilcoxonSignedRank(d, undefined, { method: "exact" })).toThrow(RangeError);
+ });
+
+ it("handles all-zero differences", () => {
+ expect(wilcoxonSignedRank([1, 2], [1, 2])).toMatchObject({ n: 0, zeros: 2, pValue: 1 });
+ });
+});
+
+describe("bootstrap", () => {
+ const xs = Array.from({ length: 40 }, (_, i) => (i * 37) % 23);
+
+ it("is reproducible for a seed and records how it was made", () => {
+ const a = bootstrapMean(xs, { seed: 7, reps: 500 });
+ const b = bootstrapMean(xs, { seed: 7, reps: 500 });
+ expect(a).toEqual(b);
+ expect(a).toMatchObject({ seed: 7, reps: 500, level: 0.95 });
+ expect(a.estimate).toBeCloseTo(mean(xs), 12);
+ expect(a.lower).toBeLessThan(a.estimate);
+ expect(a.upper).toBeGreaterThan(a.estimate);
+ });
+
+ it("is close to the normal-theory interval for a mean", () => {
+ const ci = bootstrapMean(xs, { seed: 1, reps: 4000 });
+ const se = sd(xs) / Math.sqrt(xs.length);
+ expect(ci.upper - ci.lower).toBeGreaterThan(2 * 1.96 * se * 0.85);
+ expect(ci.upper - ci.lower).toBeLessThan(2 * 1.96 * se * 1.15);
+ });
+
+ it("collapses on a constant sample", () => {
+ const ci = bootstrap([5, 5, 5], mean, { seed: 3, reps: 100 });
+ expect([ci.lower, ci.estimate, ci.upper]).toEqual([5, 5, 5]);
+ });
+
+ it("stratified resampling keeps stratum sizes", () => {
+ const strata = [
+ [1, 1, 1],
+ [0, 0, 0, 0, 0],
+ ];
+ const ci = stratifiedBootstrap(strata, (s) => s[0].length * 10 + s[1].length, {
+ seed: 1,
+ reps: 50,
+ });
+ expect([ci.lower, ci.upper]).toEqual([35, 35]);
+ });
+
+ it("paired difference resamples pairs", () => {
+ const x = [10, 12, 9, 15, 11, 14, 13, 10];
+ const y = x.map((v, i) => v - 2 - (i % 2));
+ const r = pairedMeanDifference(x, y, { seed: 5, reps: 1000 });
+ expect(r.meanDiff.estimate).toBeCloseTo(2.5, 12);
+ expect(r.meanDiff.lower).toBeGreaterThanOrEqual(2);
+ expect(r.meanDiff.upper).toBeLessThanOrEqual(3);
+ expect(r.dz).toBeCloseTo(2.5 / sd(x.map((v, i) => v - y[i])), 12);
+ expect(() => pairedMeanDifference([1], [1, 2], { seed: 1 })).toThrow(RangeError);
+ });
+});
+
+describe("Bradley-Terry", () => {
+ // wins[i][j] = wins of i over j; reference: maximum likelihood with scipy BFGS.
+ const W = [
+ [0, 7, 9, 10],
+ [3, 0, 6, 9],
+ [1, 4, 0, 6],
+ [0, 1, 4, 0],
+ ];
+ const outcomes: PairOutcome[] = [];
+ for (let i = 0; i < 4; i++)
+ for (let j = i + 1; j < 4; j++) outcomes.push({ i, j, scoreI: W[i][j], scoreJ: W[j][i] });
+
+ it("matches the maximum-likelihood fit (no prior)", () => {
+ const fit = fitBradleyTerry(4, outcomes, { prior: 0 });
+ expect(fit.converged).toBe(true);
+ const expected = [
+ 1.539924527762305, 0.37009020841656426, -0.5322860297988234, -1.3777287063800459,
+ ];
+ fit.theta.forEach((t, i) => expect(t).toBeCloseTo(expected[i], 6));
+ });
+
+ it("matches the fit with one virtual draw per pairing", () => {
+ const fit = fitBradleyTerry(4, outcomes, { prior: 1 });
+ const expected = [
+ 1.2976598516423081, 0.32010753473623765, -0.4507020061425011, -1.167065380236045,
+ ];
+ fit.theta.forEach((t, i) => expect(t).toBeCloseTo(expected[i], 6));
+ });
+
+ it("stays finite when a player wins every game, thanks to the prior", () => {
+ const sweep = [
+ { i: 0, j: 1, scoreI: 10, scoreJ: 0 },
+ { i: 1, j: 2, scoreI: 6, scoreJ: 4 },
+ { i: 0, j: 2, scoreI: 10, scoreJ: 0 },
+ ];
+ const fit = fitBradleyTerry(3, sweep);
+ expect(fit.theta.every(Number.isFinite)).toBe(true);
+ expect(fit.theta[0]).toBeGreaterThan(fit.theta[1]);
+ });
+
+ it("converts to an anchored Elo scale", () => {
+ const elo = toElo([Math.LN10, 0], 1);
+ expect(elo[0]).toBeCloseTo(400, 12);
+ expect(elo[1]).toBe(0);
+ expect(eloExpected(400, 0)).toBeCloseTo(10 / 11, 12);
+ });
+});
+
+describe("formatting", () => {
+ it("formats estimates the way the site shows them", () => {
+ expect(formatPct(0.9)).toBe("90.0%");
+ expect(formatPctInterval(0.8437, 0.9375)).toBe("[84.4%, 93.8%]");
+ expect(formatSigned(-3.21)).toBe("−3.2");
+ expect(formatSigned(3.21)).toBe("+3.2");
+ expect(formatP(0.0004)).toBe("< 0.001");
+ expect(formatP(0.0421)).toBe("0.042");
+ });
+});
diff --git a/web/src/lib/stats/wilcoxon.ts b/web/src/lib/stats/wilcoxon.ts
new file mode 100644
index 0000000..3892166
--- /dev/null
+++ b/web/src/lib/stats/wilcoxon.ts
@@ -0,0 +1,108 @@
+/**
+ * Wilcoxon signed-rank test for paired samples, matching
+ * scipy.stats.wilcoxon(zero_method="wilcox") and R's wilcox.test(paired = TRUE).
+ *
+ * - zero differences are dropped ("wilcox" zero method);
+ * - tied |differences| get average ranks and a variance correction;
+ * - "exact" uses the null distribution of W+ (only valid without ties);
+ * - "approx" is the normal approximation, optionally with a continuity
+ * correction (off by default, like scipy).
+ */
+import { rankWithTies } from "./descriptive";
+import { normalSf } from "./normal";
+
+export type WilcoxonMethod = "auto" | "exact" | "approx";
+
+export interface WilcoxonOptions {
+ method?: WilcoxonMethod;
+ continuityCorrection?: boolean;
+}
+
+export interface WilcoxonResult {
+ /** Pairs with a non-zero difference (the effective sample size). */
+ n: number;
+ /** Pairs dropped because the difference was zero. */
+ zeros: number;
+ /** Sum of ranks of positive differences (R's V statistic). */
+ wPlus: number;
+ wMinus: number;
+ /** min(W+, W-), scipy's two-sided statistic. */
+ statistic: number;
+ /** Normal-approximation z (null for the exact method). */
+ z: number | null;
+ /** Two-sided p-value. */
+ pValue: number;
+ method: "exact" | "approx";
+ /** Matched-pairs rank-biserial correlation (W+ - W-) / (W+ + W-), in [-1, 1]. */
+ rankBiserial: number;
+}
+
+/** Number of subsets of {1..n} with each rank sum, i.e. the null distribution of W+ × 2^n. */
+function signedRankCounts(n: number): number[] {
+ const max = (n * (n + 1)) / 2;
+ const counts = new Array(max + 1).fill(0);
+ counts[0] = 1;
+ for (let k = 1; k <= n; k++) {
+ for (let s = max; s >= k; s--) counts[s] += counts[s - k];
+ }
+ return counts;
+}
+
+export function wilcoxonSignedRank(
+ x: readonly number[],
+ y?: readonly number[],
+ { method = "auto", continuityCorrection = false }: WilcoxonOptions = {},
+): WilcoxonResult {
+ if (y && y.length !== x.length) throw new RangeError("paired samples must have equal length");
+ const diffs = y ? x.map((xi, i) => xi - y[i]) : [...x];
+ const nonZero = diffs.filter((d) => d !== 0);
+ const zeros = diffs.length - nonZero.length;
+ const n = nonZero.length;
+ if (n === 0) {
+ return {
+ n,
+ zeros,
+ wPlus: 0,
+ wMinus: 0,
+ statistic: 0,
+ z: null,
+ pValue: 1,
+ method: "approx",
+ rankBiserial: 0,
+ };
+ }
+
+ const { ranks, tieSizes } = rankWithTies(nonZero.map(Math.abs));
+ let wPlus = 0;
+ let wMinus = 0;
+ nonZero.forEach((d, i) => {
+ if (d > 0) wPlus += ranks[i];
+ else wMinus += ranks[i];
+ });
+ const statistic = Math.min(wPlus, wMinus);
+ const hasTies = tieSizes.some((t) => t > 1);
+ const rankBiserial = (wPlus - wMinus) / (wPlus + wMinus);
+
+ const useExact = method === "exact" || (method === "auto" && n <= 50 && !hasTies && zeros === 0);
+
+ if (useExact) {
+ if (hasTies) throw new RangeError("the exact Wilcoxon test requires untied differences");
+ const counts = signedRankCounts(n);
+ const total = 2 ** n;
+ // W+ is an integer without ties. Two-sided p = 2 · P(W+ <= min) (symmetric null).
+ let tail = 0;
+ for (let s = 0; s <= statistic; s++) tail += counts[s];
+ const pValue = Math.min(1, (2 * tail) / total);
+ return { n, zeros, wPlus, wMinus, statistic, z: null, pValue, method: "exact", rankBiserial };
+ }
+
+ const meanW = (n * (n + 1)) / 4;
+ let varW = (n * (n + 1) * (2 * n + 1)) / 24;
+ for (const t of tieSizes) varW -= (t * t * t - t) / 48;
+ const se = Math.sqrt(varW);
+ let numerator = statistic - meanW;
+ if (continuityCorrection) numerator += numerator < 0 ? 0.5 : numerator > 0 ? -0.5 : 0;
+ const z = se > 0 ? numerator / se : 0;
+ const pValue = Math.min(1, 2 * normalSf(Math.abs(z)));
+ return { n, zeros, wPlus, wMinus, statistic, z, pValue, method: "approx", rankBiserial };
+}
From 0e00601b45221064783f711e80a4221af0d14cee Mon Sep 17 00:00:00 2001
From: rNLKJA <62606765+rNLKJA@users.noreply.github.com>
Date: Tue, 6 Oct 2026 00:59:11 +1030
Subject: [PATCH 02/18] feat(eval): add tournament harness, paired A* study and
alpha-beta study
- /tournament: seeded round robin of the original agent against
variants that change one knob (fixed depth 2/3, greedy one-ply) and
the random baseline, colour-swapped pairs, run in a pool of Web
Workers. Wilson CIs, Bradley-Terry Elo with stratified bootstrap CIs,
first-move effect, move times, illegal moves, CSV export.
- Precomputed 1,200-game reference tournament (TypeScript port) and a
cross-check that replays the feasible pairings from the unchanged
Python (scripts/crosscheck_tournament.py); the 144/160 benchmark is
restated with its Wilson interval.
- Alpha-beta efficiency study: nodes with vs without pruning on 120
positions, plus a clearly labelled textbook variant. Finding: the
original's inverted beta update leaves 92-100% of the tree searched.
The agent itself is unchanged.
- /astar: paired Manhattan vs Euclidean study with paired bootstrap CI,
Wilcoxon signed-rank test, effect sizes and a BFS optimality check,
live in a worker and as a 980-board reference.
- Agent port gains opt-in fixedDepth and prune options; defaults keep
parity with the original (all parity tests unchanged and passing).
Co-Authored-By: Claude Opus 5.5
---
scripts/crosscheck_tournament.py | 151 ++
web/package.json | 11 +-
web/pnpm-lock.yaml | 1237 ++++++++++++++++-
web/scripts/generate-reference-studies.ts | 109 ++
web/src/app/astar/page.tsx | 60 +-
.../app/data/alpha-beta-study.csv/route.ts | 21 +
.../app/data/astar-paired-study.csv/route.ts | 11 +
.../reference-tournament-games.csv/route.ts | 10 +
.../reference-tournament-summary.csv/route.ts | 15 +
web/src/app/tournament/page.tsx | 470 +++++++
web/src/components/astar/heuristic-study.tsx | 137 +-
.../components/astar/paired-study-summary.tsx | 131 ++
web/src/components/layout/page-header.tsx | 66 +
web/src/components/stats/interval.tsx | 144 ++
web/src/components/stats/scroll-table.tsx | 27 +
.../tournament/alpha-beta-table.tsx | 98 ++
.../tournament/reference-tournament.tsx | 38 +
.../tournament/tournament-results.tsx | 214 +++
.../tournament/tournament-runner.tsx | 268 ++++
web/src/components/ui/checkbox.tsx | 25 +
web/src/components/ui/input.tsx | 18 +
web/src/hooks/use-astar-benchmark.ts | 31 +-
web/src/hooks/use-tournament-pool.ts | 111 ++
web/src/lib/agent/minimax.ts | 11 +-
web/src/lib/agent/player.ts | 9 +-
web/src/lib/analysis/alpha-beta.ts | 256 ++++
web/src/lib/analysis/analysis.test.ts | 168 +++
web/src/lib/analysis/astar-paired.ts | 241 ++++
web/src/lib/csv.ts | 28 +
web/src/lib/data/alpha-beta-study.json | 1 +
web/src/lib/data/astar-paired-study.json | 1 +
web/src/lib/data/load.ts | 41 +
web/src/lib/data/python-crosscheck.json | 1 +
web/src/lib/data/reference-config.ts | 28 +
web/src/lib/data/reference-tournament.json | 1 +
web/src/lib/download.ts | 12 +
web/src/lib/rng.ts | 24 +
web/src/lib/tournament/agents.ts | 113 ++
web/src/lib/tournament/analyse.ts | 300 ++++
web/src/lib/tournament/crosscheck.ts | 67 +
web/src/lib/tournament/play.ts | 146 ++
web/src/lib/tournament/schedule.ts | 64 +
web/src/lib/tournament/tournament.test.ts | 289 ++++
web/src/workers/astar-benchmark.worker.ts | 9 +-
web/src/workers/tournament.worker.ts | 34 +
45 files changed, 5197 insertions(+), 50 deletions(-)
create mode 100644 scripts/crosscheck_tournament.py
create mode 100644 web/scripts/generate-reference-studies.ts
create mode 100644 web/src/app/data/alpha-beta-study.csv/route.ts
create mode 100644 web/src/app/data/astar-paired-study.csv/route.ts
create mode 100644 web/src/app/data/reference-tournament-games.csv/route.ts
create mode 100644 web/src/app/data/reference-tournament-summary.csv/route.ts
create mode 100644 web/src/app/tournament/page.tsx
create mode 100644 web/src/components/astar/paired-study-summary.tsx
create mode 100644 web/src/components/layout/page-header.tsx
create mode 100644 web/src/components/stats/interval.tsx
create mode 100644 web/src/components/stats/scroll-table.tsx
create mode 100644 web/src/components/tournament/alpha-beta-table.tsx
create mode 100644 web/src/components/tournament/reference-tournament.tsx
create mode 100644 web/src/components/tournament/tournament-results.tsx
create mode 100644 web/src/components/tournament/tournament-runner.tsx
create mode 100644 web/src/components/ui/checkbox.tsx
create mode 100644 web/src/components/ui/input.tsx
create mode 100644 web/src/hooks/use-tournament-pool.ts
create mode 100644 web/src/lib/analysis/alpha-beta.ts
create mode 100644 web/src/lib/analysis/analysis.test.ts
create mode 100644 web/src/lib/analysis/astar-paired.ts
create mode 100644 web/src/lib/csv.ts
create mode 100644 web/src/lib/data/alpha-beta-study.json
create mode 100644 web/src/lib/data/astar-paired-study.json
create mode 100644 web/src/lib/data/load.ts
create mode 100644 web/src/lib/data/python-crosscheck.json
create mode 100644 web/src/lib/data/reference-config.ts
create mode 100644 web/src/lib/data/reference-tournament.json
create mode 100644 web/src/lib/download.ts
create mode 100644 web/src/lib/tournament/agents.ts
create mode 100644 web/src/lib/tournament/analyse.ts
create mode 100644 web/src/lib/tournament/crosscheck.ts
create mode 100644 web/src/lib/tournament/play.ts
create mode 100644 web/src/lib/tournament/schedule.ts
create mode 100644 web/src/lib/tournament/tournament.test.ts
create mode 100644 web/src/workers/tournament.worker.ts
diff --git a/scripts/crosscheck_tournament.py b/scripts/crosscheck_tournament.py
new file mode 100644
index 0000000..cb38bb0
--- /dev/null
+++ b/scripts/crosscheck_tournament.py
@@ -0,0 +1,151 @@
+# /// script
+# requires-python = ">=3.12,<3.13"
+# dependencies = ["numpy>=1.26", "scipy>=1.11"]
+# ///
+"""
+Cross-check the tournament harness against the ORIGINAL Python agents.
+
+The reference tournament on /tournament is played by the parity-tested
+TypeScript port, because depth-3 search in the original Python (deepcopy of
+the board at every node) is far too slow for 1,200 games. This script replays
+the subset that IS feasible in Python, with the same protocol:
+
+ * agents built from the original code with exactly one knob changed:
+ - minimax-dynamic: _4399.Player, unchanged;
+ - minimax-d2: dynamic_depth_allocation patched to return 2;
+ - greedy: dynamic_depth_allocation patched to return 1 and
+ action(enforceGamePlayer=False) (no opening book);
+ - random: random_play_agent, unchanged;
+ * every pairing plays colour-swapped pairs of games, both games of a pair
+ seeded identically (Python's global `random`);
+ * the subject's referee `Game` validates every action.
+
+The RNG streams differ from the TypeScript run (Python's Mersenne Twister vs
+mulberry32), so individual games differ; the comparison is between win
+rates, with intervals, on the web page.
+
+Like benchmark_agent.py it re-executes itself with PYTHONHASHSEED=0 so the
+set iteration order inside get_valid_actions is reproducible.
+
+ uv run scripts/crosscheck_tournament.py
+"""
+
+from __future__ import annotations
+
+import json
+import logging
+import os
+import platform
+import random
+import sys
+import time
+from itertools import combinations
+from pathlib import Path
+
+ROOT = Path(__file__).resolve().parents[1]
+PART_B = ROOT / "coursework" / "Project Part B" / "code"
+SKELETON = ROOT / "coursework" / "Project Part B" / "skeleton-code-B"
+OUT = ROOT / "web" / "src" / "lib" / "data" / "python-crosscheck.json"
+
+AGENTS = ["minimax-dynamic", "minimax-d2", "greedy", "random"]
+SIZES = [4, 5]
+ROUNDS = 20 # colour-swapped pairs per pairing per size -> 40 games
+SEED = 2022
+
+
+def pin_hash_seed() -> None:
+ if os.environ.get("PYTHONHASHSEED") != "0":
+ os.execve(
+ sys.executable,
+ [sys.executable, *sys.argv],
+ {**os.environ, "PYTHONHASHSEED": "0"},
+ )
+
+
+def main() -> None:
+ pin_hash_seed()
+ os.chdir(PART_B) # utility/evaluation.py opens ./utility/weights.json
+ sys.path.insert(0, str(PART_B))
+ sys.path.insert(1, str(SKELETON))
+
+ import _4399.player as player_module # noqa: E402
+ from _4399.player import Player as MinimaxPlayer # noqa: E402
+ from random_play_agent.player import Player as RandomPlayer # noqa: E402
+ from referee.game import Game # noqa: E402
+
+ logging.getLogger().setLevel(logging.WARNING)
+ original_depth = player_module.dynamic_depth_allocation
+
+ class Variant(MinimaxPlayer):
+ """The original player with the depth (and opening book) overridden per call."""
+
+ depth: int | None = None
+ book: bool = True
+
+ def action(self): # type: ignore[override]
+ if self.depth is not None:
+ player_module.dynamic_depth_allocation = lambda board, d=self.depth: d
+ try:
+ return super().action(enforceGamePlayer=self.book)
+ finally:
+ player_module.dynamic_depth_allocation = original_depth
+
+ def make(agent: str, colour: str, n: int):
+ if agent == "random":
+ return RandomPlayer(colour, n)
+ p = Variant(colour, n)
+ if agent == "minimax-d2":
+ p.depth = 2
+ elif agent == "greedy":
+ p.depth = 1
+ p.book = False
+ return p
+
+ def play(n: int, red: str, blue: str, seed: int) -> dict:
+ random.seed(seed)
+ game = Game(n)
+ players = [make(red, "red", n), make(blue, "blue", n)]
+ while not game.over():
+ colour = "red" if game.nturns % 2 == 0 else "blue"
+ action = players[game.nturns % 2].action()
+ sanitised = game.update(colour, action)
+ for p in players:
+ p.turn(colour, sanitised)
+ winner = None
+ if game.result == "winner: red":
+ winner = "red"
+ elif game.result == "winner: blue":
+ winner = "blue"
+ return {"n": n, "red": red, "blue": blue, "seed": seed, "winner": winner, "turns": game.nturns}
+
+ games = []
+ started = time.perf_counter()
+ for n in SIZES:
+ for a, b in combinations(AGENTS, 2):
+ t0 = time.perf_counter()
+ for r in range(ROUNDS):
+ seed = SEED * 1_000_003 + n * 10_007 + AGENTS.index(a) * 101 + AGENTS.index(b) * 11 + r
+ games.append(play(n, a, b, seed))
+ games.append(play(n, b, a, seed))
+ print(f"n={n} {a} vs {b}: {time.perf_counter() - t0:.1f}s", flush=True)
+
+ OUT.parent.mkdir(parents=True, exist_ok=True)
+ payload = {
+ "meta": {
+ "generatedBy": "scripts/crosscheck_tournament.py",
+ "implementation": "original Python (coursework/Project Part B), variants by patching one knob",
+ "python": platform.python_version(),
+ "pythonHashSeed": os.environ.get("PYTHONHASHSEED"),
+ "config": {"agents": AGENTS, "sizes": SIZES, "rounds": ROUNDS, "seed": SEED},
+ "seconds": round(time.perf_counter() - started, 1),
+ },
+ "games": games,
+ }
+ with open(OUT, "w") as f:
+ json.dump(payload, f)
+ f.write("\n")
+ print(f"wrote {OUT.relative_to(ROOT)}")
+
+
+if __name__ == "__main__":
+ main()
diff --git a/web/package.json b/web/package.json
index a5e7359..1f63433 100644
--- a/web/package.json
+++ b/web/package.json
@@ -10,9 +10,12 @@
"typecheck": "tsc --noEmit",
"test": "vitest run",
"format": "prettier --write .",
- "format:check": "prettier --check ."
+ "format:check": "prettier --check .",
+ "gen:reference": "tsx scripts/generate-reference-studies.ts",
+ "sync-docs": "node scripts/sync-docs.mjs"
},
"dependencies": {
+ "@anthropic-ai/sdk": "^0.131.0",
"class-variance-authority": "^0.7.1",
"cn": "^0.4.0",
"lucide-react": "^1.52.0",
@@ -21,8 +24,11 @@
"radix-ui": "^1.6.7",
"react": "19.2.8",
"react-dom": "19.2.8",
+ "react-markdown": "^10.1.0",
+ "remark-gfm": "^4.0.1",
"shadcn": "^4.21.1",
- "tw-animate-css": "^1.4.0"
+ "tw-animate-css": "^1.4.0",
+ "zod": "^4.6.5"
},
"devDependencies": {
"@tailwindcss/postcss": "^4",
@@ -34,6 +40,7 @@
"prettier": "^3.9.9",
"prettier-plugin-tailwindcss": "^0.8.1",
"tailwindcss": "^4",
+ "tsx": "^4.23.15",
"typescript": "^5",
"vitest": "^5.0.3"
},
diff --git a/web/pnpm-lock.yaml b/web/pnpm-lock.yaml
index 638dfda..05949fb 100644
--- a/web/pnpm-lock.yaml
+++ b/web/pnpm-lock.yaml
@@ -8,6 +8,9 @@ importers:
.:
dependencies:
+ '@anthropic-ai/sdk':
+ specifier: ^0.131.0
+ version: 0.131.0(zod@4.6.5)
class-variance-authority:
specifier: ^0.7.1
version: 0.7.1
@@ -32,12 +35,21 @@ importers:
react-dom:
specifier: 19.2.8
version: 19.2.8(react@19.2.8)
+ react-markdown:
+ specifier: ^10.1.0
+ version: 10.1.0(@types/react@19.3.0)(react@19.2.8)
+ remark-gfm:
+ specifier: ^4.0.1
+ version: 4.0.1
shadcn:
specifier: ^4.21.1
version: 4.21.1(typescript@5.9.3)
tw-animate-css:
specifier: ^1.4.0
version: 1.4.0
+ zod:
+ specifier: ^4.6.5
+ version: 4.6.5
devDependencies:
'@tailwindcss/postcss':
specifier: ^4
@@ -66,12 +78,15 @@ importers:
tailwindcss:
specifier: ^4
version: 4.3.3
+ tsx:
+ specifier: ^4.23.15
+ version: 4.23.15
typescript:
specifier: ^5
version: 5.9.3
vitest:
specifier: ^5.0.3
- version: 5.0.3(@types/node@22.20.5)(vite@8.3.2(@types/node@22.20.5)(jiti@2.7.0))
+ version: 5.0.3(@types/node@22.20.5)(vite@8.3.2(@types/node@22.20.5)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15))
packages:
@@ -79,6 +94,15 @@ packages:
resolution: {integrity: sha512-U4+70Pc5ZS9osnCBCE5Jha/ciHM+Yp+CNMNC/7HvYbNRk1Ldd+f7qO65W5qfhu/TCv+/ozljlXXe9Nj8419DMA==}
engines: {node: '>=10'}
+ '@anthropic-ai/sdk@0.131.0':
+ resolution: {integrity: sha512-9+PepoU7qVMmM70jSahdnfcMHAvAnzhMOLv2W9WjRLO+OG/MAiBETkwKZqv7KIJ1Cj5h8eZ019bHzZaq+Mbepw==}
+ hasBin: true
+ peerDependencies:
+ zod: ^3.25.0 || ^4.0.0
+ peerDependenciesMeta:
+ zod:
+ optional: true
+
'@babel/code-frame@7.29.7':
resolution: {integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==}
engines: {node: '>=6.9.0'}
@@ -196,6 +220,10 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/runtime@7.29.7':
+ resolution: {integrity: sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==}
+ engines: {node: '>=6.9.0'}
+
'@babel/template@7.29.7':
resolution: {integrity: sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==}
engines: {node: '>=6.9.0'}
@@ -227,6 +255,162 @@ packages:
'@emnapi/wasi-threads@1.2.1':
resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==}
+ '@esbuild/aix-ppc64@0.28.2':
+ resolution: {integrity: sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [aix]
+
+ '@esbuild/android-arm64@0.28.2':
+ resolution: {integrity: sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [android]
+
+ '@esbuild/android-arm@0.28.2':
+ resolution: {integrity: sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [android]
+
+ '@esbuild/android-x64@0.28.2':
+ resolution: {integrity: sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [android]
+
+ '@esbuild/darwin-arm64@0.28.2':
+ resolution: {integrity: sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@esbuild/darwin-x64@0.28.2':
+ resolution: {integrity: sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@esbuild/freebsd-arm64@0.28.2':
+ resolution: {integrity: sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-x64@0.28.2':
+ resolution: {integrity: sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@esbuild/linux-arm64@0.28.2':
+ resolution: {integrity: sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@esbuild/linux-arm@0.28.2':
+ resolution: {integrity: sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [linux]
+
+ '@esbuild/linux-ia32@0.28.2':
+ resolution: {integrity: sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [linux]
+
+ '@esbuild/linux-loong64@0.28.2':
+ resolution: {integrity: sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==}
+ engines: {node: '>=18'}
+ cpu: [loong64]
+ os: [linux]
+
+ '@esbuild/linux-mips64el@0.28.2':
+ resolution: {integrity: sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==}
+ engines: {node: '>=18'}
+ cpu: [mips64el]
+ os: [linux]
+
+ '@esbuild/linux-ppc64@0.28.2':
+ resolution: {integrity: sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@esbuild/linux-riscv64@0.28.2':
+ resolution: {integrity: sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==}
+ engines: {node: '>=18'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@esbuild/linux-s390x@0.28.2':
+ resolution: {integrity: sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==}
+ engines: {node: '>=18'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@esbuild/linux-x64@0.28.2':
+ resolution: {integrity: sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [linux]
+
+ '@esbuild/netbsd-arm64@0.28.2':
+ resolution: {integrity: sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [netbsd]
+
+ '@esbuild/netbsd-x64@0.28.2':
+ resolution: {integrity: sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [netbsd]
+
+ '@esbuild/openbsd-arm64@0.28.2':
+ resolution: {integrity: sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openbsd]
+
+ '@esbuild/openbsd-x64@0.28.2':
+ resolution: {integrity: sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@esbuild/openharmony-arm64@0.28.2':
+ resolution: {integrity: sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@esbuild/sunos-x64@0.28.2':
+ resolution: {integrity: sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [sunos]
+
+ '@esbuild/win32-arm64@0.28.2':
+ resolution: {integrity: sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@esbuild/win32-ia32@0.28.2':
+ resolution: {integrity: sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@esbuild/win32-x64@0.28.2':
+ resolution: {integrity: sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [win32]
+
'@eslint-community/eslint-utils@4.10.1':
resolution: {integrity: sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -1387,6 +1571,9 @@ packages:
resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==}
engines: {node: '>=18'}
+ '@stablelib/base64@1.0.1':
+ resolution: {integrity: sha512-1bnPQqSxSuc3Ii6MhBysoWCg58j97aUjuCSZrGSmDxNqtytIi0k8utUenAwTZN4V5mXXYGsVUI9zeBqy+jBOSQ==}
+
'@swc/helpers@0.5.23':
resolution: {integrity: sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw==}
@@ -1491,18 +1678,33 @@ packages:
'@types/chai@5.2.3':
resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==}
+ '@types/debug@4.1.13':
+ resolution: {integrity: sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==}
+
'@types/deep-eql@4.0.2':
resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==}
+ '@types/estree-jsx@1.0.5':
+ resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==}
+
'@types/estree@1.0.9':
resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==}
+ '@types/hast@3.0.5':
+ resolution: {integrity: sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==}
+
'@types/json-schema@7.0.15':
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
'@types/json5@0.0.29':
resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+ '@types/mdast@4.0.4':
+ resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==}
+
+ '@types/ms@2.1.0':
+ resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==}
+
'@types/node@22.20.5':
resolution: {integrity: sha512-U2+DNr+wSjpsTS/wZGYHq7GcwfuSmKiKvoPvK22zwTlRhU91yOniN4qRR5KhIjvif7ysw/dz/hKmfDH0Ris4aA==}
@@ -1514,6 +1716,12 @@ packages:
'@types/react@19.3.0':
resolution: {integrity: sha512-N0rFCuH9YoxG9/m61l9MfpJKfmLOVU0em7ipIz6TRgSSkvReLB9vL85GB+yr8Bs5leqpvg96JSwF4ZS1s4viQg==}
+ '@types/unist@2.0.11':
+ resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==}
+
+ '@types/unist@3.0.3':
+ resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
+
'@types/validate-npm-package-name@4.0.2':
resolution: {integrity: sha512-lrpDziQipxCEeK5kWxvljWYhUvOiB2A9izZd9B2AFarYAkqZshb4lPbRs7zKEic6eGtH8V/2qJW+dPp9OtF6bw==}
@@ -1576,6 +1784,9 @@ packages:
resolution: {integrity: sha512-8eQ9R218XORK+KLosnf4bu/QsUXvUyVwTbArg7/0NMB1Pu87OJKvj4nhFblkYE8gQV73mW1dx1ptlPCkwRGa7A==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ '@ungap/structured-clone@1.4.0':
+ resolution: {integrity: sha512-1mEZtMKPM09vDmQt5y7YvmN2+DFTP7Tg0EWXdic8/C6VRnpb33e4ghisCIE3WZjsE2N8mf+QV1Zqh7ZFYLWInQ==}
+
'@unrs/resolver-binding-android-arm-eabi@1.12.2':
resolution: {integrity: sha512-g5T90pqg1bo/7mytQx6F4iBNC0Wsh9cu+z9veDbFjc7HjpesJFWD7QMS0NGStXM075+7dJPPVvBbpZlnrdpi/w==}
cpu: [arm]
@@ -1836,6 +2047,9 @@ packages:
resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==}
engines: {node: '>= 0.4'}
+ bail@2.0.2:
+ resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==}
+
balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
@@ -1895,6 +2109,9 @@ packages:
caniuse-lite@1.0.30001814:
resolution: {integrity: sha512-/Uaf1lAzr59XcMpW0o96WoEfr+VXK2OX4U9AgFoiSHsVJ4HppnIFUjtYzsyDH2+tgANaQb2/oxYGwCPapN1FpA==}
+ ccount@2.0.1:
+ resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
+
chai@6.3.0:
resolution: {integrity: sha512-XWAtwJ6OHO+tj0EKCs0Y2UamnyOxseZWltU4x2U2wh8g4AigdjwvtUjvLP2tqkA/avxHEtzxNaqGq/YGNwckKg==}
engines: {node: '>=18'}
@@ -1907,6 +2124,18 @@ packages:
resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==}
engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+ character-entities-html4@2.1.0:
+ resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==}
+
+ character-entities-legacy@3.0.0:
+ resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==}
+
+ character-entities@2.0.2:
+ resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==}
+
+ character-reference-invalid@2.0.1:
+ resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==}
+
class-variance-authority@0.7.1:
resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==}
@@ -1945,6 +2174,9 @@ packages:
color-name@1.1.4:
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+ comma-separated-tokens@2.0.3:
+ resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
+
commander@11.1.0:
resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==}
engines: {node: '>=16'}
@@ -2044,6 +2276,9 @@ packages:
supports-color:
optional: true
+ decode-named-character-reference@1.3.0:
+ resolution: {integrity: sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==}
+
dedent@1.7.2:
resolution: {integrity: sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA==}
peerDependencies:
@@ -2087,6 +2322,10 @@ packages:
resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
engines: {node: '>= 0.8'}
+ dequal@2.0.3:
+ resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
+ engines: {node: '>=6'}
+
detect-libc@2.1.2:
resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
engines: {node: '>=8'}
@@ -2094,6 +2333,9 @@ packages:
detect-node-es@1.1.0:
resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==}
+ devlop@1.1.0:
+ resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
+
diff@8.0.4:
resolution: {integrity: sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==}
engines: {node: '>=0.3.1'}
@@ -2184,6 +2426,11 @@ packages:
resolution: {integrity: sha512-yPDz7wqpg1/mmHLmS3tcfTfbw5f1eryXvyghYBffGdERwe+mV7ZcWzTR8LR17Kvqt3qfPurjlonmnq3MKXIOXw==}
engines: {node: '>= 0.4'}
+ esbuild@0.28.2:
+ resolution: {integrity: sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==}
+ engines: {node: '>=18'}
+ hasBin: true
+
escalade@3.2.0:
resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
engines: {node: '>=6'}
@@ -2195,6 +2442,10 @@ packages:
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
engines: {node: '>=10'}
+ escape-string-regexp@5.0.0:
+ resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
+ engines: {node: '>=12'}
+
eslint-config-next@16.3.8:
resolution: {integrity: sha512-81vovwMe6NGnoFsl0KUJWzlS+y239i3fdsxs49gSEX3pDQW2cuKy+fxUPXNkQqqx6OCPheYPtBlSufc9aZ0k+w==}
peerDependencies:
@@ -2317,6 +2568,9 @@ packages:
resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
engines: {node: '>=4.0'}
+ estree-util-is-identifier-name@3.0.0:
+ resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==}
+
estree-walker@3.0.3:
resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
@@ -2358,6 +2612,9 @@ packages:
resolution: {integrity: sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==}
engines: {node: '>= 18'}
+ extend@3.0.2:
+ resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
+
fast-deep-equal@3.1.3:
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
@@ -2375,6 +2632,9 @@ packages:
fast-levenshtein@2.0.6:
resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
+ fast-sha256@1.3.0:
+ resolution: {integrity: sha512-n11RGP/lrWEFI/bWdygLxhI+pVeo1ZYIVwvvPkW7azl/rOy+F3HYRZ2K5zeE9mmkhQppyv9sQFx0JM9UabnpPQ==}
+
fast-uri@3.1.8:
resolution: {integrity: sha512-GZMtZUTNRpOVIECoXwLNZS5xUGE+mVNbTB8h/7Rwh2TFWcBQiPzTgyZi05BF9UMZKkLJv8XBRJTlU7zg8+ZfMg==}
@@ -2552,6 +2812,12 @@ packages:
resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==}
engines: {node: '>= 0.4'}
+ hast-util-to-jsx-runtime@2.3.6:
+ resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==}
+
+ hast-util-whitespace@3.0.0:
+ resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==}
+
hermes-estree@0.25.1:
resolution: {integrity: sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==}
@@ -2562,6 +2828,9 @@ packages:
resolution: {integrity: sha512-CQ46U0ZkAGmbT/4UxdzzGJpacP2IeKgY4a5/tOI9AABbpOMfK739wfDXmv1usCk+3RkKj1hQy4/fjhiwa2xlrA==}
engines: {node: '>=16.9.0'}
+ html-url-attributes@3.0.1:
+ resolution: {integrity: sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==}
+
http-errors@2.0.1:
resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==}
engines: {node: '>= 0.8'}
@@ -2597,6 +2866,9 @@ packages:
inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+ inline-style-parser@0.2.7:
+ resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==}
+
internal-slot@1.1.0:
resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==}
engines: {node: '>= 0.4'}
@@ -2609,6 +2881,12 @@ packages:
resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
engines: {node: '>= 0.10'}
+ is-alphabetical@2.0.1:
+ resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==}
+
+ is-alphanumerical@2.0.1:
+ resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==}
+
is-array-buffer@3.0.5:
resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==}
engines: {node: '>= 0.4'}
@@ -2647,6 +2925,9 @@ packages:
resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==}
engines: {node: '>= 0.4'}
+ is-decimal@2.0.1:
+ resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==}
+
is-docker@2.2.1:
resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
engines: {node: '>=8'}
@@ -2677,6 +2958,9 @@ packages:
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
engines: {node: '>=0.10.0'}
+ is-hexadecimal@2.0.1:
+ resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==}
+
is-in-ssh@1.0.0:
resolution: {integrity: sha512-jYa6Q9rH90kR1vKB6NM7qqd1mge3Fx4Dhw5TVlK1MUBqhEOuCagrEHMevNuCcbECmXZ0ThXkRm+Ymr51HwEPAw==}
engines: {node: '>=20'}
@@ -2824,6 +3108,10 @@ packages:
json-parse-even-better-errors@2.3.1:
resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
+ json-schema-to-ts@3.1.1:
+ resolution: {integrity: sha512-+DWg8jCJG2TEnpy7kOm/7/AxaYoaRbjVB4LFZLySZlWn8exGs3A4OLJR966cVvU26N7X9TWxl+Jsw7dzAqKT6g==}
+ engines: {node: '>=16'}
+
json-schema-traverse@0.4.1:
resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
@@ -3043,6 +3331,9 @@ packages:
resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==}
engines: {node: '>=18'}
+ longest-streak@3.1.0:
+ resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==}
+
loose-envify@1.4.0:
resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
hasBin: true
@@ -3065,10 +3356,58 @@ packages:
magic-string@1.4.3:
resolution: {integrity: sha512-z12OxmaPGE0F4xlpGdjuAUckipLpQlTAuAmyGhNoD7ODpYUzvDfvtxUbjM/jwznyP178oju/KDdyi220wNJ0RQ==}
+ markdown-table@3.0.4:
+ resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==}
+
math-intrinsics@1.1.0:
resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
engines: {node: '>= 0.4'}
+ mdast-util-find-and-replace@3.0.3:
+ resolution: {integrity: sha512-xPgpDNl0/OXHsI7TlaIs22lWnH3KlpvZdXG1ET/m/YT2Hhdkx8lJV4kLphE6l9simyM4KPDFBwas08BgEob6Jw==}
+
+ mdast-util-from-markdown@2.1.0:
+ resolution: {integrity: sha512-KRLgmPaP2H1ul2bpoJkOS+9pAcDAAj9Nu1mqLnh8NLeJG5tlvj42TH80PIGBpROWlRXLk0lDrWNuZCFy/tsB4A==}
+
+ mdast-util-gfm-autolink-literal@2.0.1:
+ resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==}
+
+ mdast-util-gfm-footnote@2.1.0:
+ resolution: {integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==}
+
+ mdast-util-gfm-strikethrough@2.0.1:
+ resolution: {integrity: sha512-OuJHqvr455pwu2OaOrir7dbzqs4jlWKOtlu9L6GjcIjjQwNyw02VntQsr/Ek6/A13vgnXfUhBekWRUP1OkNivw==}
+
+ mdast-util-gfm-table@2.0.0:
+ resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==}
+
+ mdast-util-gfm-task-list-item@2.0.0:
+ resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==}
+
+ mdast-util-gfm@3.1.0:
+ resolution: {integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==}
+
+ mdast-util-mdx-expression@2.0.1:
+ resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==}
+
+ mdast-util-mdx-jsx@3.2.0:
+ resolution: {integrity: sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==}
+
+ mdast-util-mdxjs-esm@2.0.1:
+ resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==}
+
+ mdast-util-phrasing@4.1.0:
+ resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==}
+
+ mdast-util-to-hast@13.2.1:
+ resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==}
+
+ mdast-util-to-markdown@2.2.0:
+ resolution: {integrity: sha512-2Jn/ADrHFFyyniBMi0bncTbJqU78K3/TEYvzvwrWWzD9MYPUa/Gm4r3nOeKFQg/PDM5BsbDYdc8ackW4NTY6NA==}
+
+ mdast-util-to-string@4.0.0:
+ resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==}
+
media-typer@1.1.1:
resolution: {integrity: sha512-yz3xRaG20c6/BOzvYoDaGtPmGscs7YivItZEEqe6GbwNfHuxu9YNmvnEkMzKldAGY4/80pRcQRZSEnhquk9XuQ==}
engines: {node: '>= 0.8'}
@@ -3084,6 +3423,93 @@ packages:
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
engines: {node: '>= 8'}
+ micromark-core-commonmark@2.0.4:
+ resolution: {integrity: sha512-wxEeE8v8XVvOrxn1TZj74qYhAtTQsSqufHVS3uNVyT1MupXxhyaHk8/9xDNPh9BmL77QNDgWTkZ3RsYHB2ry7w==}
+
+ micromark-extension-gfm-autolink-literal@2.1.0:
+ resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==}
+
+ micromark-extension-gfm-footnote@2.1.0:
+ resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==}
+
+ micromark-extension-gfm-strikethrough@2.1.0:
+ resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==}
+
+ micromark-extension-gfm-table@2.1.2:
+ resolution: {integrity: sha512-pRzm4kDTu0MjlmBkxmS9yYhw60nncfcEwu9NNdPFSQEFXS95ZKyIIyTSHu/o3ReBUrLKYEq+7YaXCRn/bPB4MA==}
+
+ micromark-extension-gfm-tagfilter@2.0.0:
+ resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==}
+
+ micromark-extension-gfm-task-list-item@2.1.0:
+ resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==}
+
+ micromark-extension-gfm@3.0.0:
+ resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==}
+
+ micromark-factory-destination@2.0.1:
+ resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==}
+
+ micromark-factory-label@2.0.1:
+ resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==}
+
+ micromark-factory-space@2.1.0:
+ resolution: {integrity: sha512-fS8hnLIjnjvdQIj39Geug8wWsR0HrYZ43KShKxNfwT7t2LOHo/LbWZEzEaSOjwtjdCsjoE6syHhonEzW0zv0+Q==}
+
+ micromark-factory-title@2.0.1:
+ resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==}
+
+ micromark-factory-whitespace@2.0.1:
+ resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==}
+
+ micromark-util-character@2.1.1:
+ resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==}
+
+ micromark-util-chunked@2.0.1:
+ resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==}
+
+ micromark-util-classify-character@2.0.1:
+ resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==}
+
+ micromark-util-combine-extensions@2.0.1:
+ resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==}
+
+ micromark-util-decode-numeric-character-reference@2.0.2:
+ resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==}
+
+ micromark-util-decode-string@2.0.1:
+ resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==}
+
+ micromark-util-edit-map@1.0.0:
+ resolution: {integrity: sha512-Pa2ljlsEL6sVwFaYeyrOLSYbQt73JvGbPOYFq+9AElXiSnfI5Q4465RRZ1sHv7lDjDOnGRDDaqPXqClqWK/q1Q==}
+
+ micromark-util-encode@2.0.1:
+ resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==}
+
+ micromark-util-html-tag-name@2.0.1:
+ resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==}
+
+ micromark-util-normalize-identifier@2.0.1:
+ resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==}
+
+ micromark-util-resolve-all@2.0.1:
+ resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==}
+
+ micromark-util-sanitize-uri@2.0.1:
+ resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==}
+
+ micromark-util-subtokenize@2.1.0:
+ resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==}
+
+ micromark-util-symbol@2.0.1:
+ resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==}
+
+ micromark-util-types@2.0.3:
+ resolution: {integrity: sha512-oxB2Ik03hI0gv+VNn9tnh1t1YEe9MDPptViAEgfdf3YQHsn0pzGTgCdlSCJXcwhqm8phaEuM7zeEu3QQzVBrPg==}
+
+ micromark@4.0.3:
+ resolution: {integrity: sha512-oGYfQzHSG5dOMovQcJ3fyTmZlWAWpi0XA0sJwJs+i6OT88o1+Jtw/8z0CmdowSLxGhhFK89rQ/oXph/wN02PNw==}
+
micromatch@4.0.8:
resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
engines: {node: '>=8.6'}
@@ -3280,6 +3706,9 @@ packages:
resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
engines: {node: '>=6'}
+ parse-entities@4.0.2:
+ resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==}
+
parse-json@5.2.0:
resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
engines: {node: '>=8'}
@@ -3431,6 +3860,9 @@ packages:
prop-types@15.8.1:
resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
+ property-information@7.2.0:
+ resolution: {integrity: sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==}
+
proxy-addr@2.0.8:
resolution: {integrity: sha512-5nnx0yGyVUcY6t9RnWcARWtwT9F1D8O9rt08htPvnd49W1IgZtmLkhu9WfMzQj1cFxjHIO6connUNVW5k7AVyQ==}
engines: {node: '>= 0.10'}
@@ -3475,6 +3907,12 @@ packages:
react-is@16.13.1:
resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
+ react-markdown@10.1.0:
+ resolution: {integrity: sha512-qKxVopLT/TyA6BX3Ue5NwabOsAzm0Q7kAPwq6L+wWDwisYs7R8vZ0nRXqq6rkueboxpkjvLGU9fWifiX/ZZFxQ==}
+ peerDependencies:
+ '@types/react': '>=18'
+ react: '>=18'
+
react-remove-scroll-bar@2.3.8:
resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==}
engines: {node: '>=10'}
@@ -3521,6 +3959,18 @@ packages:
resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==}
engines: {node: '>= 0.4'}
+ remark-gfm@4.0.1:
+ resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==}
+
+ remark-parse@11.0.0:
+ resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==}
+
+ remark-rehype@11.1.2:
+ resolution: {integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==}
+
+ remark-stringify@11.0.0:
+ resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==}
+
require-from-string@2.0.2:
resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
engines: {node: '>=0.10.0'}
@@ -3675,9 +4125,15 @@ packages:
resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
engines: {node: '>=0.10.0'}
+ space-separated-tokens@2.0.2:
+ resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
+
stable-hash@0.0.5:
resolution: {integrity: sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==}
+ standardwebhooks@1.1.1:
+ resolution: {integrity: sha512-bCbX9ZEyFkWPsRz7Bl3NuQUJohmwGSev/yhr7vhaGPlc4AfIrspIRa6cPTBuI1ItmrTDJ4d/S2hCsfe4+vQGnQ==}
+
statuses@2.0.2:
resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==}
engines: {node: '>= 0.8'}
@@ -3720,6 +4176,9 @@ packages:
resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==}
engines: {node: '>= 0.4'}
+ stringify-entities@4.0.4:
+ resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==}
+
stringify-object@5.0.0:
resolution: {integrity: sha512-zaJYxz2FtcMb4f+g60KsRNFOpVMUyuJgA51Zi5Z1DOTC3S59+OQiVOzE9GZt0x72uBGWKsQIuBKeF9iusmKFsg==}
engines: {node: '>=14.16'}
@@ -3748,6 +4207,12 @@ packages:
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
engines: {node: '>=8'}
+ style-to-js@1.1.21:
+ resolution: {integrity: sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==}
+
+ style-to-object@1.0.14:
+ resolution: {integrity: sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==}
+
styled-jsx@5.1.6:
resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==}
engines: {node: '>= 12.0.0'}
@@ -3805,6 +4270,15 @@ packages:
resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
engines: {node: '>=0.6'}
+ trim-lines@3.0.1:
+ resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
+
+ trough@2.2.0:
+ resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==}
+
+ ts-algebra@2.0.0:
+ resolution: {integrity: sha512-FPAhNPFMrkwz76P7cdjdmiShwMynZYN6SgOujD1urY4oNm80Ou9oMdmbR45LotcKOXoy7wSmHkRFE6Mxbrhefw==}
+
ts-api-utils@2.5.0:
resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==}
engines: {node: '>=18.12'}
@@ -3824,6 +4298,11 @@ packages:
tslib@2.8.1:
resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
+ tsx@4.23.15:
+ resolution: {integrity: sha512-Yiex1Ovn8z2xPpOWckIiysV1SSyRMY9BkLF++q0yKiDxCqRhosKfMg3janKkiLBwZ5c/YryloKwGZcrEmtwxKw==}
+ engines: {node: '>=18.0.0'}
+ hasBin: true
+
tw-animate-css@1.4.0:
resolution: {integrity: sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ==}
@@ -3882,6 +4361,24 @@ packages:
resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==}
engines: {node: '>=18'}
+ unified@11.0.5:
+ resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==}
+
+ unist-util-is@6.0.1:
+ resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==}
+
+ unist-util-position@5.0.0:
+ resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==}
+
+ unist-util-stringify-position@4.0.0:
+ resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==}
+
+ unist-util-visit-parents@6.0.2:
+ resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==}
+
+ unist-util-visit@5.1.0:
+ resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==}
+
universalify@2.0.1:
resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
engines: {node: '>= 10.0.0'}
@@ -3933,6 +4430,12 @@ packages:
resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
engines: {node: '>= 0.8'}
+ vfile-message@4.0.3:
+ resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==}
+
+ vfile@6.0.3:
+ resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==}
+
vite@8.3.2:
resolution: {integrity: sha512-SQr1x6W5vVSbROg7vsyXIaxK9b0G7zsT68acdWWRmnBUsgDieLCRG+Rep9WdZgcposvv/GSnr4GUUBqB3vXq6w==}
engines: {node: ^20.19.0 || >=22.12.0}
@@ -4091,10 +4594,20 @@ packages:
zod@4.6.5:
resolution: {integrity: sha512-v5l/aFXZQeai4awLbOpSoHecE9UiMrnfx75tEXLjNonXVARxQ5mOeipTjROUchszUNCqnE+hqAMujRsRHsut2Q==}
+ zwitch@2.0.4:
+ resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
+
snapshots:
'@alloc/quick-lru@5.3.0': {}
+ '@anthropic-ai/sdk@0.131.0(zod@4.6.5)':
+ dependencies:
+ json-schema-to-ts: 3.1.1
+ standardwebhooks: 1.1.1
+ optionalDependencies:
+ zod: 4.6.5
+
'@babel/code-frame@7.29.7':
dependencies:
'@babel/helper-validator-identifier': 7.29.7
@@ -4258,6 +4771,8 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@babel/runtime@7.29.7': {}
+
'@babel/template@7.29.7':
dependencies:
'@babel/code-frame': 7.29.7
@@ -4323,6 +4838,84 @@ snapshots:
tslib: 2.8.1
optional: true
+ '@esbuild/aix-ppc64@0.28.2':
+ optional: true
+
+ '@esbuild/android-arm64@0.28.2':
+ optional: true
+
+ '@esbuild/android-arm@0.28.2':
+ optional: true
+
+ '@esbuild/android-x64@0.28.2':
+ optional: true
+
+ '@esbuild/darwin-arm64@0.28.2':
+ optional: true
+
+ '@esbuild/darwin-x64@0.28.2':
+ optional: true
+
+ '@esbuild/freebsd-arm64@0.28.2':
+ optional: true
+
+ '@esbuild/freebsd-x64@0.28.2':
+ optional: true
+
+ '@esbuild/linux-arm64@0.28.2':
+ optional: true
+
+ '@esbuild/linux-arm@0.28.2':
+ optional: true
+
+ '@esbuild/linux-ia32@0.28.2':
+ optional: true
+
+ '@esbuild/linux-loong64@0.28.2':
+ optional: true
+
+ '@esbuild/linux-mips64el@0.28.2':
+ optional: true
+
+ '@esbuild/linux-ppc64@0.28.2':
+ optional: true
+
+ '@esbuild/linux-riscv64@0.28.2':
+ optional: true
+
+ '@esbuild/linux-s390x@0.28.2':
+ optional: true
+
+ '@esbuild/linux-x64@0.28.2':
+ optional: true
+
+ '@esbuild/netbsd-arm64@0.28.2':
+ optional: true
+
+ '@esbuild/netbsd-x64@0.28.2':
+ optional: true
+
+ '@esbuild/openbsd-arm64@0.28.2':
+ optional: true
+
+ '@esbuild/openbsd-x64@0.28.2':
+ optional: true
+
+ '@esbuild/openharmony-arm64@0.28.2':
+ optional: true
+
+ '@esbuild/sunos-x64@0.28.2':
+ optional: true
+
+ '@esbuild/win32-arm64@0.28.2':
+ optional: true
+
+ '@esbuild/win32-ia32@0.28.2':
+ optional: true
+
+ '@esbuild/win32-x64@0.28.2':
+ optional: true
+
'@eslint-community/eslint-utils@4.10.1(eslint@9.39.5(jiti@2.7.0))':
dependencies:
eslint: 9.39.5(jiti@2.7.0)
@@ -5445,6 +6038,8 @@ snapshots:
'@sindresorhus/merge-streams@4.0.0': {}
+ '@stablelib/base64@1.0.1': {}
+
'@swc/helpers@0.5.23':
dependencies:
tslib: 2.8.1
@@ -5534,14 +6129,32 @@ snapshots:
'@types/deep-eql': 4.0.2
assertion-error: 2.0.1
+ '@types/debug@4.1.13':
+ dependencies:
+ '@types/ms': 2.1.0
+
'@types/deep-eql@4.0.2': {}
+ '@types/estree-jsx@1.0.5':
+ dependencies:
+ '@types/estree': 1.0.9
+
'@types/estree@1.0.9': {}
+ '@types/hast@3.0.5':
+ dependencies:
+ '@types/unist': 3.0.3
+
'@types/json-schema@7.0.15': {}
'@types/json5@0.0.29': {}
+ '@types/mdast@4.0.4':
+ dependencies:
+ '@types/unist': 3.0.3
+
+ '@types/ms@2.1.0': {}
+
'@types/node@22.20.5':
dependencies:
undici-types: 6.21.0
@@ -5554,6 +6167,10 @@ snapshots:
dependencies:
csstype: 3.2.3
+ '@types/unist@2.0.11': {}
+
+ '@types/unist@3.0.3': {}
+
'@types/validate-npm-package-name@4.0.2': {}
'@typescript-eslint/eslint-plugin@8.71.0(@typescript-eslint/parser@8.71.0(eslint@9.39.5(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.5(jiti@2.7.0))(typescript@5.9.3)':
@@ -5647,6 +6264,8 @@ snapshots:
'@typescript-eslint/types': 8.71.0
eslint-visitor-keys: 5.0.1
+ '@ungap/structured-clone@1.4.0': {}
+
'@unrs/resolver-binding-android-arm-eabi@1.12.2':
optional: true
@@ -5717,14 +6336,14 @@ snapshots:
'@unrs/resolver-binding-win32-x64-msvc@1.12.2':
optional: true
- '@vitest/mocker@5.0.3(vite@8.3.2(@types/node@22.20.5)(jiti@2.7.0))':
+ '@vitest/mocker@5.0.3(vite@8.3.2(@types/node@22.20.5)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15))':
dependencies:
'@jridgewell/trace-mapping': 0.3.31
'@vitest/spy': 5.0.3
estree-walker: 3.0.3
magic-string: 1.4.3
optionalDependencies:
- vite: 8.3.2(@types/node@22.20.5)(jiti@2.7.0)
+ vite: 8.3.2(@types/node@22.20.5)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)
'@vitest/spy@5.0.3': {}
@@ -5866,6 +6485,8 @@ snapshots:
axobject-query@4.1.0: {}
+ bail@2.0.2: {}
+
balanced-match@1.0.2: {}
balanced-match@4.0.4: {}
@@ -5934,6 +6555,8 @@ snapshots:
caniuse-lite@1.0.30001814: {}
+ ccount@2.0.1: {}
+
chai@6.3.0: {}
chalk@4.1.2:
@@ -5943,6 +6566,14 @@ snapshots:
chalk@5.6.2: {}
+ character-entities-html4@2.1.0: {}
+
+ character-entities-legacy@3.0.0: {}
+
+ character-entities@2.0.2: {}
+
+ character-reference-invalid@2.0.1: {}
+
class-variance-authority@0.7.1:
dependencies:
clsx: 2.1.1
@@ -5969,6 +6600,8 @@ snapshots:
color-name@1.1.4: {}
+ comma-separated-tokens@2.0.3: {}
+
commander@11.1.0: {}
commander@14.0.3: {}
@@ -6056,6 +6689,10 @@ snapshots:
dependencies:
ms: 2.1.3
+ decode-named-character-reference@1.3.0:
+ dependencies:
+ character-entities: 2.0.2
+
dedent@1.7.2: {}
deep-is@0.1.4: {}
@@ -6087,10 +6724,16 @@ snapshots:
depd@2.0.0: {}
+ dequal@2.0.3: {}
+
detect-libc@2.1.2: {}
detect-node-es@1.1.0: {}
+ devlop@1.1.0:
+ dependencies:
+ dequal: 2.0.3
+
diff@8.0.4: {}
doctrine@2.1.0:
@@ -6248,12 +6891,43 @@ snapshots:
is-date-object: 1.1.0
is-symbol: 1.1.1
+ esbuild@0.28.2:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.28.2
+ '@esbuild/android-arm': 0.28.2
+ '@esbuild/android-arm64': 0.28.2
+ '@esbuild/android-x64': 0.28.2
+ '@esbuild/darwin-arm64': 0.28.2
+ '@esbuild/darwin-x64': 0.28.2
+ '@esbuild/freebsd-arm64': 0.28.2
+ '@esbuild/freebsd-x64': 0.28.2
+ '@esbuild/linux-arm': 0.28.2
+ '@esbuild/linux-arm64': 0.28.2
+ '@esbuild/linux-ia32': 0.28.2
+ '@esbuild/linux-loong64': 0.28.2
+ '@esbuild/linux-mips64el': 0.28.2
+ '@esbuild/linux-ppc64': 0.28.2
+ '@esbuild/linux-riscv64': 0.28.2
+ '@esbuild/linux-s390x': 0.28.2
+ '@esbuild/linux-x64': 0.28.2
+ '@esbuild/netbsd-arm64': 0.28.2
+ '@esbuild/netbsd-x64': 0.28.2
+ '@esbuild/openbsd-arm64': 0.28.2
+ '@esbuild/openbsd-x64': 0.28.2
+ '@esbuild/openharmony-arm64': 0.28.2
+ '@esbuild/sunos-x64': 0.28.2
+ '@esbuild/win32-arm64': 0.28.2
+ '@esbuild/win32-ia32': 0.28.2
+ '@esbuild/win32-x64': 0.28.2
+
escalade@3.2.0: {}
escape-html@1.0.3: {}
escape-string-regexp@4.0.0: {}
+ escape-string-regexp@5.0.0: {}
+
eslint-config-next@16.3.8(@typescript-eslint/parser@8.71.0(eslint@9.39.5(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.5(jiti@2.7.0))(typescript@5.9.3):
dependencies:
'@next/eslint-plugin-next': 16.3.8(eslint@9.39.5(jiti@2.7.0))
@@ -6459,6 +7133,8 @@ snapshots:
estraverse@5.3.0: {}
+ estree-util-is-identifier-name@3.0.0: {}
+
estree-walker@3.0.3:
dependencies:
'@types/estree': 1.0.9
@@ -6543,6 +7219,8 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ extend@3.0.2: {}
+
fast-deep-equal@3.1.3: {}
fast-glob@3.3.1:
@@ -6565,6 +7243,8 @@ snapshots:
fast-levenshtein@2.0.6: {}
+ fast-sha256@1.3.0: {}
+
fast-uri@3.1.8: {}
fastq@1.20.3:
@@ -6737,6 +7417,30 @@ snapshots:
dependencies:
function-bind: 1.1.2
+ hast-util-to-jsx-runtime@2.3.6:
+ dependencies:
+ '@types/estree': 1.0.9
+ '@types/hast': 3.0.5
+ '@types/unist': 3.0.3
+ comma-separated-tokens: 2.0.3
+ devlop: 1.1.0
+ estree-util-is-identifier-name: 3.0.0
+ hast-util-whitespace: 3.0.0
+ mdast-util-mdx-expression: 2.0.1
+ mdast-util-mdx-jsx: 3.2.0
+ mdast-util-mdxjs-esm: 2.0.1
+ property-information: 7.2.0
+ space-separated-tokens: 2.0.2
+ style-to-js: 1.1.21
+ unist-util-position: 5.0.0
+ vfile-message: 4.0.3
+ transitivePeerDependencies:
+ - supports-color
+
+ hast-util-whitespace@3.0.0:
+ dependencies:
+ '@types/hast': 3.0.5
+
hermes-estree@0.25.1: {}
hermes-parser@0.25.1:
@@ -6745,6 +7449,8 @@ snapshots:
hono@4.13.13: {}
+ html-url-attributes@3.0.1: {}
+
http-errors@2.0.1:
dependencies:
depd: 2.0.0
@@ -6774,6 +7480,8 @@ snapshots:
inherits@2.0.4: {}
+ inline-style-parser@0.2.7: {}
+
internal-slot@1.1.0:
dependencies:
es-errors: 1.3.0
@@ -6784,6 +7492,13 @@ snapshots:
ipaddr.js@1.9.1: {}
+ is-alphabetical@2.0.1: {}
+
+ is-alphanumerical@2.0.1:
+ dependencies:
+ is-alphabetical: 2.0.1
+ is-decimal: 2.0.1
+
is-array-buffer@3.0.5:
dependencies:
call-bind: 1.0.9
@@ -6830,6 +7545,8 @@ snapshots:
call-bound: 1.0.4
has-tostringtag: 1.0.2
+ is-decimal@2.0.1: {}
+
is-docker@2.2.1: {}
is-docker@3.0.0: {}
@@ -6856,6 +7573,8 @@ snapshots:
dependencies:
is-extglob: 2.1.1
+ is-hexadecimal@2.0.1: {}
+
is-in-ssh@1.0.0: {}
is-inside-container@1.0.0:
@@ -6971,6 +7690,11 @@ snapshots:
json-parse-even-better-errors@2.3.1: {}
+ json-schema-to-ts@3.1.1:
+ dependencies:
+ '@babel/runtime': 7.29.7
+ ts-algebra: 2.0.0
+
json-schema-traverse@0.4.1: {}
json-schema-traverse@1.0.0: {}
@@ -7135,6 +7859,8 @@ snapshots:
chalk: 5.6.2
is-unicode-supported: 1.3.0
+ longest-streak@3.1.0: {}
+
loose-envify@1.4.0:
dependencies:
js-tokens: 4.0.0
@@ -7157,8 +7883,165 @@ snapshots:
dependencies:
'@jridgewell/sourcemap-codec': 1.6.0
+ markdown-table@3.0.4: {}
+
math-intrinsics@1.1.0: {}
+ mdast-util-find-and-replace@3.0.3:
+ dependencies:
+ '@types/mdast': 4.0.4
+ escape-string-regexp: 5.0.0
+ unist-util-is: 6.0.1
+ unist-util-visit-parents: 6.0.2
+
+ mdast-util-from-markdown@2.1.0:
+ dependencies:
+ '@types/mdast': 4.0.4
+ '@types/unist': 3.0.3
+ decode-named-character-reference: 1.3.0
+ devlop: 1.1.0
+ mdast-util-to-string: 4.0.0
+ micromark: 4.0.3
+ micromark-util-decode-numeric-character-reference: 2.0.2
+ micromark-util-decode-string: 2.0.1
+ micromark-util-normalize-identifier: 2.0.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.3
+ unist-util-stringify-position: 4.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-gfm-autolink-literal@2.0.1:
+ dependencies:
+ '@types/mdast': 4.0.4
+ ccount: 2.0.1
+ devlop: 1.1.0
+ mdast-util-find-and-replace: 3.0.3
+ micromark-util-character: 2.1.1
+
+ mdast-util-gfm-footnote@2.1.0:
+ dependencies:
+ '@types/mdast': 4.0.4
+ devlop: 1.1.0
+ mdast-util-from-markdown: 2.1.0
+ mdast-util-to-markdown: 2.2.0
+ micromark-util-normalize-identifier: 2.0.1
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-gfm-strikethrough@2.0.1:
+ dependencies:
+ '@types/mdast': 4.0.4
+ mdast-util-from-markdown: 2.1.0
+ mdast-util-to-markdown: 2.2.0
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-gfm-table@2.0.0:
+ dependencies:
+ '@types/mdast': 4.0.4
+ devlop: 1.1.0
+ markdown-table: 3.0.4
+ mdast-util-from-markdown: 2.1.0
+ mdast-util-to-markdown: 2.2.0
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-gfm-task-list-item@2.0.0:
+ dependencies:
+ '@types/mdast': 4.0.4
+ devlop: 1.1.0
+ mdast-util-from-markdown: 2.1.0
+ mdast-util-to-markdown: 2.2.0
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-gfm@3.1.0:
+ dependencies:
+ mdast-util-from-markdown: 2.1.0
+ mdast-util-gfm-autolink-literal: 2.0.1
+ mdast-util-gfm-footnote: 2.1.0
+ mdast-util-gfm-strikethrough: 2.0.1
+ mdast-util-gfm-table: 2.0.0
+ mdast-util-gfm-task-list-item: 2.0.0
+ mdast-util-to-markdown: 2.2.0
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-mdx-expression@2.0.1:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 3.0.5
+ '@types/mdast': 4.0.4
+ devlop: 1.1.0
+ mdast-util-from-markdown: 2.1.0
+ mdast-util-to-markdown: 2.2.0
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-mdx-jsx@3.2.0:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 3.0.5
+ '@types/mdast': 4.0.4
+ '@types/unist': 3.0.3
+ ccount: 2.0.1
+ devlop: 1.1.0
+ mdast-util-from-markdown: 2.1.0
+ mdast-util-to-markdown: 2.2.0
+ parse-entities: 4.0.2
+ stringify-entities: 4.0.4
+ unist-util-stringify-position: 4.0.0
+ vfile-message: 4.0.3
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-mdxjs-esm@2.0.1:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 3.0.5
+ '@types/mdast': 4.0.4
+ devlop: 1.1.0
+ mdast-util-from-markdown: 2.1.0
+ mdast-util-to-markdown: 2.2.0
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-phrasing@4.1.0:
+ dependencies:
+ '@types/mdast': 4.0.4
+ unist-util-is: 6.0.1
+
+ mdast-util-to-hast@13.2.1:
+ dependencies:
+ '@types/hast': 3.0.5
+ '@types/mdast': 4.0.4
+ '@ungap/structured-clone': 1.4.0
+ devlop: 1.1.0
+ micromark-util-sanitize-uri: 2.0.1
+ trim-lines: 3.0.1
+ unist-util-position: 5.0.0
+ unist-util-visit: 5.1.0
+ vfile: 6.0.3
+
+ mdast-util-to-markdown@2.2.0:
+ dependencies:
+ '@types/mdast': 4.0.4
+ '@types/unist': 3.0.3
+ longest-streak: 3.1.0
+ mdast-util-phrasing: 4.1.0
+ mdast-util-to-string: 4.0.0
+ micromark-util-character: 2.1.1
+ micromark-util-classify-character: 2.0.1
+ micromark-util-decode-string: 2.0.1
+ micromark-util-html-tag-name: 2.0.1
+ unist-util-visit: 5.1.0
+ zwitch: 2.0.4
+
+ mdast-util-to-string@4.0.0:
+ dependencies:
+ '@types/mdast': 4.0.4
+
media-typer@1.1.1: {}
merge-descriptors@2.0.0: {}
@@ -7167,6 +8050,203 @@ snapshots:
merge2@1.4.1: {}
+ micromark-core-commonmark@2.0.4:
+ dependencies:
+ decode-named-character-reference: 1.3.0
+ devlop: 1.1.0
+ micromark-factory-destination: 2.0.1
+ micromark-factory-label: 2.0.1
+ micromark-factory-space: 2.1.0
+ micromark-factory-title: 2.0.1
+ micromark-factory-whitespace: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-chunked: 2.0.1
+ micromark-util-classify-character: 2.0.1
+ micromark-util-edit-map: 1.0.0
+ micromark-util-html-tag-name: 2.0.1
+ micromark-util-normalize-identifier: 2.0.1
+ micromark-util-resolve-all: 2.0.1
+ micromark-util-subtokenize: 2.1.0
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.3
+
+ micromark-extension-gfm-autolink-literal@2.1.0:
+ dependencies:
+ micromark-util-character: 2.1.1
+ micromark-util-sanitize-uri: 2.0.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.3
+
+ micromark-extension-gfm-footnote@2.1.0:
+ dependencies:
+ devlop: 1.1.0
+ micromark-core-commonmark: 2.0.4
+ micromark-factory-space: 2.1.0
+ micromark-util-character: 2.1.1
+ micromark-util-normalize-identifier: 2.0.1
+ micromark-util-sanitize-uri: 2.0.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.3
+
+ micromark-extension-gfm-strikethrough@2.1.0:
+ dependencies:
+ devlop: 1.1.0
+ micromark-util-chunked: 2.0.1
+ micromark-util-classify-character: 2.0.1
+ micromark-util-resolve-all: 2.0.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.3
+
+ micromark-extension-gfm-table@2.1.2:
+ dependencies:
+ devlop: 1.1.0
+ micromark-factory-space: 2.1.0
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.3
+
+ micromark-extension-gfm-tagfilter@2.0.0:
+ dependencies:
+ micromark-util-types: 2.0.3
+
+ micromark-extension-gfm-task-list-item@2.1.0:
+ dependencies:
+ devlop: 1.1.0
+ micromark-factory-space: 2.1.0
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.3
+
+ micromark-extension-gfm@3.0.0:
+ dependencies:
+ micromark-extension-gfm-autolink-literal: 2.1.0
+ micromark-extension-gfm-footnote: 2.1.0
+ micromark-extension-gfm-strikethrough: 2.1.0
+ micromark-extension-gfm-table: 2.1.2
+ micromark-extension-gfm-tagfilter: 2.0.0
+ micromark-extension-gfm-task-list-item: 2.1.0
+ micromark-util-combine-extensions: 2.0.1
+ micromark-util-types: 2.0.3
+
+ micromark-factory-destination@2.0.1:
+ dependencies:
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.3
+
+ micromark-factory-label@2.0.1:
+ dependencies:
+ devlop: 1.1.0
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.3
+
+ micromark-factory-space@2.1.0:
+ dependencies:
+ micromark-util-character: 2.1.1
+ micromark-util-types: 2.0.3
+
+ micromark-factory-title@2.0.1:
+ dependencies:
+ micromark-factory-space: 2.1.0
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.3
+
+ micromark-factory-whitespace@2.0.1:
+ dependencies:
+ micromark-factory-space: 2.1.0
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.3
+
+ micromark-util-character@2.1.1:
+ dependencies:
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.3
+
+ micromark-util-chunked@2.0.1:
+ dependencies:
+ micromark-util-symbol: 2.0.1
+
+ micromark-util-classify-character@2.0.1:
+ dependencies:
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.3
+
+ micromark-util-combine-extensions@2.0.1:
+ dependencies:
+ micromark-util-chunked: 2.0.1
+ micromark-util-types: 2.0.3
+
+ micromark-util-decode-numeric-character-reference@2.0.2:
+ dependencies:
+ micromark-util-symbol: 2.0.1
+
+ micromark-util-decode-string@2.0.1:
+ dependencies:
+ decode-named-character-reference: 1.3.0
+ micromark-util-character: 2.1.1
+ micromark-util-decode-numeric-character-reference: 2.0.2
+ micromark-util-symbol: 2.0.1
+
+ micromark-util-edit-map@1.0.0:
+ dependencies:
+ micromark-util-types: 2.0.3
+
+ micromark-util-encode@2.0.1: {}
+
+ micromark-util-html-tag-name@2.0.1: {}
+
+ micromark-util-normalize-identifier@2.0.1:
+ dependencies:
+ micromark-util-symbol: 2.0.1
+
+ micromark-util-resolve-all@2.0.1:
+ dependencies:
+ micromark-util-types: 2.0.3
+
+ micromark-util-sanitize-uri@2.0.1:
+ dependencies:
+ micromark-util-character: 2.1.1
+ micromark-util-encode: 2.0.1
+ micromark-util-symbol: 2.0.1
+
+ micromark-util-subtokenize@2.1.0:
+ dependencies:
+ devlop: 1.1.0
+ micromark-util-chunked: 2.0.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.3
+
+ micromark-util-symbol@2.0.1: {}
+
+ micromark-util-types@2.0.3: {}
+
+ micromark@4.0.3:
+ dependencies:
+ '@types/debug': 4.1.13
+ debug: 4.4.3
+ decode-named-character-reference: 1.3.0
+ devlop: 1.1.0
+ micromark-core-commonmark: 2.0.4
+ micromark-factory-space: 2.1.0
+ micromark-util-character: 2.1.1
+ micromark-util-chunked: 2.0.1
+ micromark-util-combine-extensions: 2.0.1
+ micromark-util-decode-numeric-character-reference: 2.0.2
+ micromark-util-edit-map: 1.0.0
+ micromark-util-encode: 2.0.1
+ micromark-util-normalize-identifier: 2.0.1
+ micromark-util-resolve-all: 2.0.1
+ micromark-util-sanitize-uri: 2.0.1
+ micromark-util-subtokenize: 2.1.0
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.3
+ transitivePeerDependencies:
+ - supports-color
+
micromatch@4.0.8:
dependencies:
braces: 3.0.3
@@ -7381,6 +8461,16 @@ snapshots:
dependencies:
callsites: 3.1.0
+ parse-entities@4.0.2:
+ dependencies:
+ '@types/unist': 2.0.11
+ character-entities-legacy: 3.0.0
+ character-reference-invalid: 2.0.1
+ decode-named-character-reference: 1.3.0
+ is-alphanumerical: 2.0.1
+ is-decimal: 2.0.1
+ is-hexadecimal: 2.0.1
+
parse-json@5.2.0:
dependencies:
'@babel/code-frame': 7.29.7
@@ -7462,6 +8552,8 @@ snapshots:
object-assign: 4.1.1
react-is: 16.13.1
+ property-information@7.2.0: {}
+
proxy-addr@2.0.8:
dependencies:
forwarded: 0.2.0
@@ -7555,6 +8647,24 @@ snapshots:
react-is@16.13.1: {}
+ react-markdown@10.1.0(@types/react@19.3.0)(react@19.2.8):
+ dependencies:
+ '@types/hast': 3.0.5
+ '@types/mdast': 4.0.4
+ '@types/react': 19.3.0
+ devlop: 1.1.0
+ hast-util-to-jsx-runtime: 2.3.6
+ html-url-attributes: 3.0.1
+ mdast-util-to-hast: 13.2.1
+ react: 19.2.8
+ remark-parse: 11.0.0
+ remark-rehype: 11.1.2
+ unified: 11.0.5
+ unist-util-visit: 5.1.0
+ vfile: 6.0.3
+ transitivePeerDependencies:
+ - supports-color
+
react-remove-scroll-bar@2.3.8(@types/react@19.3.0)(react@19.2.8):
dependencies:
react: 19.2.8
@@ -7612,6 +8722,40 @@ snapshots:
gopd: 1.2.0
set-function-name: 2.0.2
+ remark-gfm@4.0.1:
+ dependencies:
+ '@types/mdast': 4.0.4
+ mdast-util-gfm: 3.1.0
+ micromark-extension-gfm: 3.0.0
+ remark-parse: 11.0.0
+ remark-stringify: 11.0.0
+ unified: 11.0.5
+ transitivePeerDependencies:
+ - supports-color
+
+ remark-parse@11.0.0:
+ dependencies:
+ '@types/mdast': 4.0.4
+ mdast-util-from-markdown: 2.1.0
+ micromark-util-types: 2.0.3
+ unified: 11.0.5
+ transitivePeerDependencies:
+ - supports-color
+
+ remark-rehype@11.1.2:
+ dependencies:
+ '@types/hast': 3.0.5
+ '@types/mdast': 4.0.4
+ mdast-util-to-hast: 13.2.1
+ unified: 11.0.5
+ vfile: 6.0.3
+
+ remark-stringify@11.0.0:
+ dependencies:
+ '@types/mdast': 4.0.4
+ mdast-util-to-markdown: 2.2.0
+ unified: 11.0.5
+
require-from-string@2.0.2: {}
resolve-from@4.0.0: {}
@@ -7874,8 +9018,15 @@ snapshots:
source-map@0.6.1: {}
+ space-separated-tokens@2.0.2: {}
+
stable-hash@0.0.5: {}
+ standardwebhooks@1.1.1:
+ dependencies:
+ '@stablelib/base64': 1.0.1
+ fast-sha256: 1.3.0
+
statuses@2.0.2: {}
std-env@4.3.0: {}
@@ -7944,6 +9095,11 @@ snapshots:
define-properties: 1.2.1
es-object-atoms: 1.1.2
+ stringify-entities@4.0.4:
+ dependencies:
+ character-entities-html4: 2.1.0
+ character-entities-legacy: 3.0.0
+
stringify-object@5.0.0:
dependencies:
get-own-enumerable-keys: 1.0.0
@@ -7966,6 +9122,14 @@ snapshots:
strip-json-comments@3.1.1: {}
+ style-to-js@1.1.21:
+ dependencies:
+ style-to-object: 1.0.14
+
+ style-to-object@1.0.14:
+ dependencies:
+ inline-style-parser: 0.2.7
+
styled-jsx@5.1.6(@babel/core@7.29.7)(react@19.2.8):
dependencies:
client-only: 0.0.1
@@ -8002,6 +9166,12 @@ snapshots:
toidentifier@1.0.1: {}
+ trim-lines@3.0.1: {}
+
+ trough@2.2.0: {}
+
+ ts-algebra@2.0.0: {}
+
ts-api-utils@2.5.0(typescript@5.9.3):
dependencies:
typescript: 5.9.3
@@ -8026,6 +9196,12 @@ snapshots:
tslib@2.8.1: {}
+ tsx@4.23.15:
+ dependencies:
+ esbuild: 0.28.2
+ optionalDependencies:
+ fsevents: 2.3.3
+
tw-animate-css@1.4.0: {}
type-check@0.4.0:
@@ -8098,6 +9274,39 @@ snapshots:
unicorn-magic@0.3.0: {}
+ unified@11.0.5:
+ dependencies:
+ '@types/unist': 3.0.3
+ bail: 2.0.2
+ devlop: 1.1.0
+ extend: 3.0.2
+ is-plain-obj: 4.1.0
+ trough: 2.2.0
+ vfile: 6.0.3
+
+ unist-util-is@6.0.1:
+ dependencies:
+ '@types/unist': 3.0.3
+
+ unist-util-position@5.0.0:
+ dependencies:
+ '@types/unist': 3.0.3
+
+ unist-util-stringify-position@4.0.0:
+ dependencies:
+ '@types/unist': 3.0.3
+
+ unist-util-visit-parents@6.0.2:
+ dependencies:
+ '@types/unist': 3.0.3
+ unist-util-is: 6.0.1
+
+ unist-util-visit@5.1.0:
+ dependencies:
+ '@types/unist': 3.0.3
+ unist-util-is: 6.0.1
+ unist-util-visit-parents: 6.0.2
+
universalify@2.0.1: {}
unpipe@1.0.0: {}
@@ -8160,7 +9369,17 @@ snapshots:
vary@1.1.2: {}
- vite@8.3.2(@types/node@22.20.5)(jiti@2.7.0):
+ vfile-message@4.0.3:
+ dependencies:
+ '@types/unist': 3.0.3
+ unist-util-stringify-position: 4.0.0
+
+ vfile@6.0.3:
+ dependencies:
+ '@types/unist': 3.0.3
+ vfile-message: 4.0.3
+
+ vite@8.3.2(@types/node@22.20.5)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15):
dependencies:
lightningcss: 1.33.0
picomatch: 4.0.7
@@ -8169,13 +9388,15 @@ snapshots:
tinyglobby: 0.2.17
optionalDependencies:
'@types/node': 22.20.5
+ esbuild: 0.28.2
fsevents: 2.3.3
jiti: 2.7.0
+ tsx: 4.23.15
- vitest@5.0.3(@types/node@22.20.5)(vite@8.3.2(@types/node@22.20.5)(jiti@2.7.0)):
+ vitest@5.0.3(@types/node@22.20.5)(vite@8.3.2(@types/node@22.20.5)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)):
dependencies:
'@types/chai': 5.2.3
- '@vitest/mocker': 5.0.3(vite@8.3.2(@types/node@22.20.5)(jiti@2.7.0))
+ '@vitest/mocker': 5.0.3(vite@8.3.2(@types/node@22.20.5)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15))
chai: 6.3.0
es-module-lexer: 2.3.2
expect-type: 1.4.0
@@ -8186,7 +9407,7 @@ snapshots:
tinybench: 6.2.0
tinyexec: 1.3.1
tinyglobby: 0.2.17
- vite: 8.3.2(@types/node@22.20.5)(jiti@2.7.0)
+ vite: 8.3.2(@types/node@22.20.5)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)
why-is-node-running: 3.2.1
optionalDependencies:
'@types/node': 22.20.5
@@ -8274,3 +9495,5 @@ snapshots:
zod@3.25.76: {}
zod@4.6.5: {}
+
+ zwitch@2.0.4: {}
diff --git a/web/scripts/generate-reference-studies.ts b/web/scripts/generate-reference-studies.ts
new file mode 100644
index 0000000..c347ccd
--- /dev/null
+++ b/web/scripts/generate-reference-studies.ts
@@ -0,0 +1,109 @@
+/**
+ * Precompute the reference studies shown on /tournament and /astar, using the
+ * parity-tested TypeScript port (the original Python is too slow for depth-3
+ * search at this scale; scripts/crosscheck_tournament.py re-runs the feasible
+ * subset with the original code).
+ *
+ * cd web && pnpm gen:reference # all three studies
+ * cd web && pnpm gen:reference tournament # just one
+ *
+ * Output (deterministic for the seeds below, apart from wall-clock timings):
+ * src/lib/data/reference-tournament.json
+ * src/lib/data/astar-paired-study.json
+ * src/lib/data/alpha-beta-study.json
+ */
+import { writeFileSync } from "node:fs";
+import os from "node:os";
+import path from "node:path";
+
+import { measurePruning, samplePositions, summarisePruning } from "../src/lib/analysis/alpha-beta";
+import { runPairedStudy, summarisePairedStudy } from "../src/lib/analysis/astar-paired";
+import { AGENT_IDS } from "../src/lib/tournament/agents";
+import { summariseTournament } from "../src/lib/tournament/analyse";
+import { playTournamentGame } from "../src/lib/tournament/play";
+import { buildSchedule } from "../src/lib/tournament/schedule";
+import {
+ ALPHA_BETA_CONFIG,
+ ASTAR_STUDY_CONFIG,
+ REFERENCE_TOURNAMENT_CONFIG,
+} from "../src/lib/data/reference-config";
+
+const DATA = path.join(import.meta.dirname, "..", "src", "lib", "data");
+const only = process.argv[2];
+
+const meta = () => ({
+ generatedBy: "web/scripts/generate-reference-studies.ts",
+ generatedAt: new Date().toISOString().slice(0, 10),
+ node: process.version,
+ cpu: os.cpus()[0]?.model ?? "unknown",
+ implementation: "TypeScript port (parity-tested against the original Python)",
+});
+
+function write(name: string, payload: unknown) {
+ const file = path.join(DATA, name);
+ writeFileSync(file, `${JSON.stringify(payload)}\n`);
+ console.log(`wrote ${path.relative(process.cwd(), file)}`);
+}
+
+if (!only || only === "tournament") {
+ const config = REFERENCE_TOURNAMENT_CONFIG;
+ const schedule = buildSchedule({ ...config, agents: [...AGENT_IDS] });
+ console.log(`tournament: ${schedule.length} games`);
+ const started = Date.now();
+ const games = schedule.map((spec, i) => {
+ const g = playTournamentGame(spec);
+ if ((i + 1) % 100 === 0)
+ console.log(
+ ` ${i + 1}/${schedule.length} (${((Date.now() - started) / 1000).toFixed(0)} s)`,
+ );
+ return {
+ ...g,
+ red: {
+ ...g.red,
+ totalMs: Number(g.red.totalMs.toFixed(3)),
+ maxMs: Number(g.red.maxMs.toFixed(3)),
+ },
+ blue: {
+ ...g.blue,
+ totalMs: Number(g.blue.totalMs.toFixed(3)),
+ maxMs: Number(g.blue.maxMs.toFixed(3)),
+ },
+ };
+ });
+ write("reference-tournament.json", { meta: { ...meta(), config }, games });
+ const s = summariseTournament(games, { reps: 1000, seed: config.seed });
+ for (const a of s.standings) {
+ console.log(` deep searches ${a.id}: ${(a.deepSearchShare * 100).toFixed(1)}%`);
+ console.log(
+ `${a.id.padEnd(16)} elo ${a.elo.estimate.toFixed(0)} [${a.elo.lower.toFixed(0)}, ${a.elo.upper.toFixed(0)}] win ${(a.winRate.p * 100).toFixed(1)}% [${(a.winRate.lower * 100).toFixed(1)}, ${(a.winRate.upper * 100).toFixed(1)}] ${a.moveMs.estimate.toFixed(2)} ms/move`,
+ );
+ }
+ for (const p of s.pairs) {
+ console.log(
+ `${p.a} vs ${p.b}: ${p.aWins}-${p.bWins}-${p.draws} (${(p.aWinRate.p * 100).toFixed(1)}% [${(p.aWinRate.lower * 100).toFixed(1)}, ${(p.aWinRate.upper * 100).toFixed(1)}])`,
+ );
+ }
+ console.log(`red wins ${s.colour.redWins}/${s.colour.games}`);
+}
+
+if (!only || only === "astar") {
+ const rows = runPairedStudy(ASTAR_STUDY_CONFIG);
+ write("astar-paired-study.json", { meta: { ...meta(), config: ASTAR_STUDY_CONFIG }, rows });
+ const s = summarisePairedStudy(rows, { seed: ASTAR_STUDY_CONFIG.seed });
+ console.log(JSON.stringify(s, null, 2));
+}
+
+if (!only || only === "alphabeta") {
+ const positions = samplePositions(ALPHA_BETA_CONFIG);
+ const samples = positions.flatMap((p) =>
+ ALPHA_BETA_CONFIG.depths.flatMap((depth) =>
+ (["shuffled", "canonical"] as const).map((order) => measurePruning(p, depth, order)),
+ ),
+ );
+ write("alpha-beta-study.json", { meta: { ...meta(), config: ALPHA_BETA_CONFIG }, samples });
+ for (const g of summarisePruning(samples, { seed: ALPHA_BETA_CONFIG.seed })) {
+ console.log(
+ `n=${g.n} d=${g.depth} ${g.order}: ratio ${g.meanRatio.estimate.toFixed(3)} [${g.meanRatio.lower.toFixed(3)}, ${g.meanRatio.upper.toFixed(3)}] full ${g.meanFull.toFixed(0)} pruned ${g.meanPruned.toFixed(0)} match ${g.valueMatches}/${g.positions} | textbook ${g.textbookRatio.estimate.toFixed(3)} [${g.textbookRatio.lower.toFixed(3)}, ${g.textbookRatio.upper.toFixed(3)}] nodes ${g.meanTextbook.toFixed(0)} match ${g.textbookValueMatches}`,
+ );
+ }
+}
diff --git a/web/src/app/astar/page.tsx b/web/src/app/astar/page.tsx
index e2c8820..ca2046a 100644
--- a/web/src/app/astar/page.tsx
+++ b/web/src/app/astar/page.tsx
@@ -1,19 +1,77 @@
+import { Download } from "lucide-react";
import type { Metadata } from "next";
import { AstarLab } from "@/components/astar/astar-lab";
import { HeuristicStudy } from "@/components/astar/heuristic-study";
+import { PairedStudySummaryView } from "@/components/astar/paired-study-summary";
+import { Finding, Section } from "@/components/layout/page-header";
+import { Button } from "@/components/ui/button";
+import { summarisePairedStudy } from "@/lib/analysis/astar-paired";
+import { loadAstarStudy } from "@/lib/data/load";
+import { ASTAR_STUDY_CONFIG } from "@/lib/data/reference-config";
+import { formatPct, formatSigned } from "@/lib/stats/format";
export const metadata: Metadata = {
title: "A* Lab",
description:
- "Edit a Cachex board, run the original Part A A* search step by step, and compare Manhattan and Euclidean heuristics.",
+ "Edit a Cachex board, run the original Part A A* search step by step, and compare Manhattan and Euclidean heuristics in a paired study with intervals and an optimality check.",
};
export default function AstarPage() {
+ const { rows, meta } = loadAstarStudy();
+ const summary = summarisePairedStudy(rows, { seed: ASTAR_STUDY_CONFIG.seed });
+ const e = summary.expansions;
+ const o = summary.optimality;
+ const cfg = ASTAR_STUDY_CONFIG;
return (
+
+ {cfg.boardsPerDimension} random boards for every size from {cfg.dimensions[0]} ×{" "}
+ {cfg.dimensions[0]} to {cfg.dimensions.at(-1)} × {cfg.dimensions.at(-1)} from the
+ notebook's generator (seed {cfg.seed}), each searched with both heuristics and
+ solved by breadth-first search. Generated by{" "}
+ {meta.generatedBy} with the A* port that
+ reproduces the original paths and node counts exactly.
+
+ }
+ >
+
+
+ The report's direction holds, and is now measured. Manhattan
+ expanded {formatSigned(e.meanDiff.estimate)} nodes per board on average (95% CI{" "}
+ {formatSigned(e.meanDiff.lower)} to {formatSigned(e.meanDiff.upper)}); fewer on{" "}
+ {e.manhattanFewer} boards, more on {e.euclideanFewer}.
+
+
+ But it finds a shortest path less often. Manhattan returned an
+ optimal path on {formatPct(o.manhattan.p)} of solvable boards (95% CI{" "}
+ {formatPct(o.manhattan.lower)} to {formatPct(o.manhattan.upper)}), Euclidean on{" "}
+ {formatPct(o.euclidean.p)} ({formatPct(o.euclidean.lower)} to{" "}
+ {formatPct(o.euclidean.upper)}).
+
+
+ Why: neither heuristic is admissible here. On this hex grid a step
+ like (1, −1) costs 1, but Manhattan scores it 2 and Euclidean √2. Overestimating makes
+ the search greedier: fewer expansions, longer paths. The two sample inputs happen to
+ be solved optimally (8 and 13 cells, confirmed by BFS).
+
+
+
+
+
diff --git a/web/src/app/data/alpha-beta-study.csv/route.ts b/web/src/app/data/alpha-beta-study.csv/route.ts
new file mode 100644
index 0000000..f84ddb1
--- /dev/null
+++ b/web/src/app/data/alpha-beta-study.csv/route.ts
@@ -0,0 +1,21 @@
+import { toCsv } from "@/lib/csv";
+import { loadAlphaBetaStudy } from "@/lib/data/load";
+
+export const dynamic = "force-static";
+
+export function GET() {
+ const rows = loadAlphaBetaStudy().samples.map((s) => ({
+ board_n: s.n,
+ depth: s.depth,
+ move_order: s.order,
+ empty_cells: s.empty,
+ nodes_full_minimax: s.nodesFull,
+ nodes_original_alphabeta: s.nodesPruned,
+ ratio_original: Number(s.ratio.toFixed(6)),
+ original_value_matches: s.valueMatches,
+ nodes_textbook_alphabeta: s.nodesTextbook,
+ ratio_textbook: Number(s.ratioTextbook.toFixed(6)),
+ textbook_value_matches: s.textbookValueMatches,
+ }));
+ return new Response(toCsv(rows), { headers: { "Content-Type": "text/csv; charset=utf-8" } });
+}
diff --git a/web/src/app/data/astar-paired-study.csv/route.ts b/web/src/app/data/astar-paired-study.csv/route.ts
new file mode 100644
index 0000000..e8ca68c
--- /dev/null
+++ b/web/src/app/data/astar-paired-study.csv/route.ts
@@ -0,0 +1,11 @@
+import { pairedStudyCsvRows } from "@/lib/analysis/astar-paired";
+import { toCsv } from "@/lib/csv";
+import { loadAstarStudy } from "@/lib/data/load";
+
+export const dynamic = "force-static";
+
+export function GET() {
+ return new Response(toCsv(pairedStudyCsvRows(loadAstarStudy().rows)), {
+ headers: { "Content-Type": "text/csv; charset=utf-8" },
+ });
+}
diff --git a/web/src/app/data/reference-tournament-games.csv/route.ts b/web/src/app/data/reference-tournament-games.csv/route.ts
new file mode 100644
index 0000000..3f1a033
--- /dev/null
+++ b/web/src/app/data/reference-tournament-games.csv/route.ts
@@ -0,0 +1,10 @@
+import { loadReferenceTournament } from "@/lib/data/load";
+import { gamesCsv } from "@/lib/tournament/analyse";
+
+export const dynamic = "force-static";
+
+export function GET() {
+ return new Response(gamesCsv(loadReferenceTournament().games), {
+ headers: { "Content-Type": "text/csv; charset=utf-8" },
+ });
+}
diff --git a/web/src/app/data/reference-tournament-summary.csv/route.ts b/web/src/app/data/reference-tournament-summary.csv/route.ts
new file mode 100644
index 0000000..0b69b2c
--- /dev/null
+++ b/web/src/app/data/reference-tournament-summary.csv/route.ts
@@ -0,0 +1,15 @@
+import { loadReferenceTournament } from "@/lib/data/load";
+import { REFERENCE_TOURNAMENT_CONFIG } from "@/lib/data/reference-config";
+import { summariseTournament, summaryCsv } from "@/lib/tournament/analyse";
+
+export const dynamic = "force-static";
+
+export function GET() {
+ const summary = summariseTournament(loadReferenceTournament().games, {
+ reps: 1000,
+ seed: REFERENCE_TOURNAMENT_CONFIG.seed,
+ });
+ return new Response(summaryCsv(summary), {
+ headers: { "Content-Type": "text/csv; charset=utf-8" },
+ });
+}
diff --git a/web/src/app/tournament/page.tsx b/web/src/app/tournament/page.tsx
new file mode 100644
index 0000000..439b197
--- /dev/null
+++ b/web/src/app/tournament/page.tsx
@@ -0,0 +1,470 @@
+import { ArrowRight, Download } from "lucide-react";
+import type { Metadata } from "next";
+import Link from "next/link";
+
+import { Finding, PageHeader, Section } from "@/components/layout/page-header";
+import { EstimateCI, IntervalAxis, IntervalBar } from "@/components/stats/interval";
+import { AlphaBetaTable } from "@/components/tournament/alpha-beta-table";
+import { ReferenceTournament } from "@/components/tournament/reference-tournament";
+import { TournamentRunner } from "@/components/tournament/tournament-runner";
+import { Button } from "@/components/ui/button";
+import { ScrollTable } from "@/components/stats/scroll-table";
+import { summarisePruning } from "@/lib/analysis/alpha-beta";
+import benchmark from "@/lib/data/agent-benchmark.json";
+import { loadAlphaBetaStudy, loadPythonCrosscheck, loadReferenceTournament } from "@/lib/data/load";
+import { ALPHA_BETA_CONFIG, REFERENCE_TOURNAMENT_CONFIG } from "@/lib/data/reference-config";
+import { formatPct, formatSigned } from "@/lib/stats/format";
+import { wilson } from "@/lib/stats/proportion";
+import { AGENTS } from "@/lib/tournament/agents";
+import { summariseTournament } from "@/lib/tournament/analyse";
+import { compareImplementations } from "@/lib/tournament/crosscheck";
+
+export const metadata: Metadata = {
+ title: "Tournament",
+ description:
+ "A seeded, colour-swapped round robin between the original minimax agent and controlled variants, with Wilson and bootstrap intervals, Bradley-Terry strengths and an alpha-beta efficiency study.",
+};
+
+const WORDS = ["no", "one", "two", "three", "four", "five", "six", "seven", "eight"];
+
+const pctCI = (lo: number, hi: number) => `[${(lo * 100).toFixed(1)}, ${(hi * 100).toFixed(1)}]`;
+
+export default function TournamentPage() {
+ // Original benchmark (Python), restated with intervals.
+ const totals = benchmark.results.reduce(
+ (a, r) => ({ wins: a.wins + r.wins, games: a.games + r.games }),
+ { wins: 0, games: 0 },
+ );
+ const overall = wilson(totals.wins, totals.games);
+ const bySize = [...new Set(benchmark.results.map((r) => r.n))].map((n) => {
+ const rows = benchmark.results.filter((r) => r.n === n);
+ const wins = rows.reduce((s, r) => s + r.wins, 0);
+ const games = rows.reduce((s, r) => s + r.games, 0);
+ return { n, ci: wilson(wins, games) };
+ });
+
+ // Reference tournament (TypeScript port).
+ const ref = loadReferenceTournament();
+ const cfg = REFERENCE_TOURNAMENT_CONFIG;
+ const summaries = [
+ {
+ key: "all",
+ label: "All sizes",
+ summary: summariseTournament(ref.games, { reps: 1000, seed: cfg.seed }),
+ },
+ ...cfg.sizes.map((n) => ({
+ key: String(n),
+ label: `${n} × ${n}`,
+ summary: summariseTournament(ref.games, { reps: 1000, seed: cfg.seed, sizes: [n] }),
+ })),
+ ];
+ const all = summaries[0].summary;
+ const pair = (a: string, b: string) => all.pairs.find((p) => p.a === a && p.b === b)!;
+ const dynVsGreedy = pair("minimax-dynamic", "greedy");
+ const dynVsD3 = pair("minimax-dynamic", "minimax-d3");
+ const dynVsRandom = pair("minimax-dynamic", "random");
+ const standing = (id: string) => all.standings.find((s) => s.id === id)!;
+ const dyn = standing("minimax-dynamic");
+ const d3 = standing("minimax-d3");
+ const deepSearches = ref.games.reduce(
+ (acc, g) => {
+ for (const s of [g.red, g.blue]) {
+ if (s.agent !== "minimax-dynamic") continue;
+ acc.searches += s.searches;
+ acc.deep += s.deepSearches;
+ }
+ return acc;
+ },
+ { searches: 0, deep: 0 },
+ );
+ const hardware = `${ref.meta.cpu ?? "unknown CPU"}, Node ${ref.meta.node ?? "?"}`;
+
+ // Cross-check against the original Python.
+ const py = loadPythonCrosscheck();
+ const cross = compareImplementations(ref.games, py.games);
+
+ // Alpha-beta efficiency.
+ const ab = loadAlphaBetaStudy();
+ const groups = summarisePruning(ab.samples, { seed: ALPHA_BETA_CONFIG.seed });
+ const shuffled = groups.filter((g) => g.order === "shuffled");
+ const canonical = groups.filter((g) => g.order === "canonical");
+ const worst = shuffled.reduce((a, b) => (b.meanRatio.estimate < a.meanRatio.estimate ? b : a));
+ const deepest = shuffled.find((g) => g.n === 6 && g.depth === 3)!;
+ const allMatch = ab.samples.every((s) => s.valueMatches && s.textbookValueMatches);
+
+ return (
+
+
+
+
+ A seeded round robin between the original{" "}
+ _4399 agent and variants that each change
+ exactly one knob, with colour-swapped pairs to cancel the first-move advantage. Every
+ number comes with its sample size and a 95% interval.
+
+
+ Jump to:{" "}
+
+ original benchmark
+ {" "}
+ ·{" "}
+
+ reference round robin
+ {" "}
+ ·{" "}
+
+ Python cross-check
+ {" "}
+ ·{" "}
+
+ run your own
+ {" "}
+ ·{" "}
+
+ alpha-beta efficiency
+
+
+
+
+
+ The headline result from the original Python ({benchmark.meta.generatedBy}, Python{" "}
+ {benchmark.meta.python}): the agent beat the subject's random agent in{" "}
+ {totals.wins} of {totals.games} games on boards 4 to 7, 20 seeded games per size and
+ colour. The count is unchanged; the interval is new.
+
+ }
+ >
+
+
+
+ {formatPct(overall.p)}
+
+
+ {totals.wins} of {totals.games} games won against the random agent
+
+
+
+
+ Wilson 95% CI{" "}
+
+ {formatPct(overall.lower)} to {formatPct(overall.upper)}
+
+
+
+
+
+ By board size (both colours pooled, 40 games each). Small samples give wide
+ intervals.
+ >
+ }
+ >
+
+
+
+ Board
+
+
+ Interval
+ `${t * 100}%`}
+ />
+
+
+ Win rate (95% CI)
+
+
+
+
+ {bySize.map(({ n, ci }) => (
+
+
+ {n} × {n}
+
+
+
+
+
+
+
+
+ ))}
+
+
+
+
+
+
+
+ Every pairing played {cfg.rounds * 2} games per board size ({cfg.rounds} seeds, each
+ played twice with colours swapped) on{" "}
+ {cfg.sizes.map((n) => `${n}\u00a0×\u00a0${n}`).join(", ")}. Tournament seed{" "}
+ {cfg.seed}. Played by the TypeScript port, which reproduces the original Python move
+ for move in deterministic mode; the original is too slow for depth-3 search at this
+ scale, so a feasible subset was re-run in Python below.
+
+ >
+ }
+ >
+
+
+ Depth matters; dynamic depth barely runs. Fixed depth 3 beat the
+ original in {dynVsD3.bWins} of {dynVsD3.games} games (
+ {formatPct(1 - dynVsD3.aWinRate.p)}, 95% CI {formatPct(1 - dynVsD3.aWinRate.upper)} to{" "}
+ {formatPct(1 - dynVsD3.aWinRate.lower)}). The original searched deeper than one ply on
+ only {deepSearches.deep} of {deepSearches.searches.toLocaleString("en-AU")} searched
+ moves ({formatPct(deepSearches.deep / deepSearches.searches)}): its thresholds only
+ deepen once fewer than 15% of cells are empty, and most games end before that.
+
+
+ The original is indistinguishable from greedy one-ply. Head to head
+ it won {dynVsGreedy.aWins} and lost {dynVsGreedy.bWins} (
+ {formatPct(dynVsGreedy.aWinRate.p)}, 95% CI {formatPct(dynVsGreedy.aWinRate.lower)} to{" "}
+ {formatPct(dynVsGreedy.aWinRate.upper)}), and their Elo intervals overlap almost
+ entirely. The opening book and the late deepening add no detectable strength here.
+
+
+ Against random it reproduces the original benchmark. {" "}
+ {dynVsRandom.aWins}/{dynVsRandom.games} wins ({formatPct(dynVsRandom.aWinRate.p)}, 95%
+ CI {formatPct(dynVsRandom.aWinRate.lower)} to {formatPct(dynVsRandom.aWinRate.upper)})
+ on boards 4 to 6, consistent with the 90% the Python run recorded on boards 4 to 7.
+
+
+ Strength costs time. Depth 3 is{" "}
+ {Math.round(d3.elo.estimate - dyn.elo.estimate)} Elo above the original but spends
+ about {Math.round(d3.moveMs.estimate / dyn.moveMs.estimate)}× as long per move, partly
+ because of the pruning bug described{" "}
+
+ below
+
+ . No first-move advantage was detectable: Red won {formatPct(all.colour.redWinRate.p)}{" "}
+ (95% CI {formatPct(all.colour.redWinRate.lower)} to{" "}
+ {formatPct(all.colour.redWinRate.upper)}).
+
+
+
+
+
+
+
+ scripts/crosscheck_tournament.py rebuilt
+ the same variants from the unchanged Python (patching only{" "}
+ dynamic_depth_allocation and the
+ opening-book flag) and replayed the pairings that are feasible in Python on boards{" "}
+ {cross[0]?.sizes.join(" and ")}, with the same colour-swapped protocol. Random streams
+ differ between the languages, so games differ; the question is whether win rates
+ agree. With {cross[0]?.python.n} games per pairing this can only rule out large
+ discrepancies.
+
+ }
+ >
+
+ Win rate of the first-named agent. Difference = Python − TypeScript, with
+ Newcombe's 95% interval; an interval that contains 0 is consistent with no
+ difference.
+ >
+ }
+ >
+
+
+
+ Pairing
+
+
+ Original Python
+
+
+ TypeScript port
+
+
+ Difference interval
+ `${t > 0 ? "+" : ""}${Math.round(t * 100)}`}
+ />
+
+
+ Difference (pp)
+
+
+
+
+ {cross.map((r) => (
+
+
+ {AGENTS[r.a].short} vs {" "}
+ {AGENTS[r.b].short}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ))}
+
+
+
+
+
+ Same harness, same statistics, run on your machine in Web Workers. Pick a seed to make
+ the run reproducible, then export the games and the summary as CSV.
+
+ }
+ >
+
+
+
+
+
+ {ab.samples.length / (ALPHA_BETA_CONFIG.depths.length * 2)} mid-game positions (
+ {ALPHA_BETA_CONFIG.perSize} per board size, from seeded greedy-vs-random games, seed{" "}
+ {ALPHA_BETA_CONFIG.seed}) were searched three ways at the same depth and move order:
+ plain minimax (no pruning), the original alpha-beta as submitted, and a textbook
+ alpha-beta. The share of the full tree each one visits is the pruning ratio; lower
+ is better.
+
+
+ The original prunes very little (at best it still visits{" "}
+ {formatPct(worst.meanRatio.estimate)} of the tree). The cause is one line in{" "}
+ minimax.py: the minimising branch updates
+ beta with{" "}
+ if beta <= min_score: beta = min_score
+ , which can only raise beta, so the window never narrows there. The answer is still
+ right ({allMatch ? "all" : "not all"} {ab.samples.length} searches returned the same
+ root value as plain minimax), just slow. With{" "}
+ beta = min(beta, min_score) the same
+ search on 6 × 6 at depth 3 would visit {formatPct(deepest.textbookRatio.estimate)}{" "}
+ of the tree instead of {formatPct(deepest.meanRatio.estimate)}. The agent on this
+ site is left as submitted.
+
+ >
+ }
+ >
+
+
+
+ Canonical (r, q) move order
+
+
+
+
+
+
+
+ );
+}
diff --git a/web/src/components/astar/heuristic-study.tsx b/web/src/components/astar/heuristic-study.tsx
index 68510ad..8baefc9 100644
--- a/web/src/components/astar/heuristic-study.tsx
+++ b/web/src/components/astar/heuristic-study.tsx
@@ -1,12 +1,21 @@
"use client";
-import { FlaskConical, Loader2 } from "lucide-react";
+import { Download, FlaskConical, Loader2 } from "lucide-react";
+import { useMemo, useState } from "react";
+import { Segmented } from "@/components/play/primitives";
import { Button } from "@/components/ui/button";
import { useAstarBenchmark } from "@/hooks/use-astar-benchmark";
import { useElementWidth } from "@/hooks/use-element-width";
-import type { BenchmarkRow } from "@/lib/astar/random-board";
+import {
+ type PairedStudyRow,
+ pairedStudyCsvRows,
+ summarisePairedStudy,
+} from "@/lib/analysis/astar-paired";
+import { toCsv } from "@/lib/csv";
+import { downloadText } from "@/lib/download";
import { randomSeed } from "@/lib/rng";
+import { PairedStudySummaryView } from "./paired-study-summary";
// The notebook looped `for i in range(100)`, skipping i < 2: every size from 2 to 99.
const DIMENSIONS = Array.from({ length: 98 }, (_, i) => i + 2);
@@ -15,6 +24,8 @@ const LAST = DIMENSIONS.at(-1)!;
export function HeuristicStudy() {
const { state, run } = useAstarBenchmark();
+ const [boards, setBoards] = useState("1");
+ const perSize = Number(boards);
return (
@@ -30,21 +41,47 @@ export function HeuristicStudy() {
Our report compared node expansions on random boards from the notebook's generator
(random barriers, random start and goal) and found the two heuristics similar on small
boards, with Manhattan expanding slightly fewer nodes as boards grew. Re-run the
- experiment here: one random board for every size from {FIRST} × {FIRST} to {LAST} ×{" "}
- {LAST}, counted the way the notebook counted them.
+ experiment here: random boards for every size from {FIRST} × {FIRST} to {LAST} × {LAST},
+ counted the way the notebook counted them. One board per size is the notebook's
+ protocol; more boards per size give tighter intervals.
+
+ The comparison is now paired : both
+ heuristics search the same boards, so the analysis works on the per-board difference
+ (paired bootstrap interval, Wilcoxon signed-rank test, effect sizes). Each board is also
+ solved by breadth-first search to check whether A* returned a shortest path.
+
+
+
+
+ Boards per size
+
+
+ run(DIMENSIONS, perSize, randomSeed())}
+ disabled={state.status === "running"}
+ >
+ {state.status === "running" ? : }
+ {state.status === "done" ? "Re-run with a new seed" : "Run the study"}
+
- run(DIMENSIONS, randomSeed())} disabled={state.status === "running"}>
- {state.status === "running" ? : }
- {state.status === "done" ? "Re-run with a new seed" : "Run the study"}
-
{state.status === "idle" && (
- Press “Run the study” to generate {DIMENSIONS.length} random boards in a Web
- Worker.
+ Press “Run the study” to generate {DIMENSIONS.length * perSize} random
+ boards in a Web Worker.
)}
{state.status === "running" && (
@@ -52,8 +89,10 @@ export function HeuristicStudy() {
className="text-muted-foreground flex h-56 items-center justify-center gap-2 rounded-2xl border border-dashed px-4 text-center text-sm"
role="status"
>
-
Running {DIMENSIONS.length * 2}{" "}
- searches ({DIMENSIONS.length} boards × 2 heuristics)…
+
Running{" "}
+ {DIMENSIONS.length * state.boardsPerDimension * 2} searches (
+ {DIMENSIONS.length * state.boardsPerDimension} boards × 2 heuristics) plus a
+ breadth-first check on each board…
)}
{state.status === "error" && (
@@ -65,22 +104,73 @@ export function HeuristicStudy() {
)}
{state.status === "done" && (
-
+
)}
);
}
-function StudyChart({
+function LiveResults({
rows,
seed,
+ boardsPerDimension,
+ elapsedMs,
+}: {
+ rows: PairedStudyRow[];
+ seed: number;
+ boardsPerDimension: number;
+ elapsedMs: number;
+}) {
+ const summary = useMemo(() => summarisePairedStudy(rows, { reps: 2000, seed }), [rows, seed]);
+ return (
+
+
+
+
+ downloadText(`astar-paired-study-seed-${seed}.csv`, toCsv(pairedStudyCsvRows(rows)))
+ }
+ >
+ Per-board results (CSV)
+
+
+ );
+}
+
+function StudyChart({
+ rows: boardRows,
+ seed,
elapsedMs,
+ boardsPerDimension,
}: {
- rows: BenchmarkRow[];
+ rows: PairedStudyRow[];
seed: number;
elapsedMs: number;
+ boardsPerDimension: number;
}) {
+ // One point per board size: the mean over that size's boards.
+ const rows = useMemo(() => {
+ const byDim = new Map();
+ for (const r of boardRows) byDim.set(r.dimension, [...(byDim.get(r.dimension) ?? []), r]);
+ return [...byDim.entries()].map(([dimension, list]) => ({
+ dimension,
+ manhattan: list.reduce((s, r) => s + r.manhattan.expansions, 0) / list.length,
+ euclidean: list.reduce((s, r) => s + r.euclidean.expansions, 0) / list.length,
+ }));
+ }, [boardRows]);
// Draw at the container's real width so the axis labels stay legible.
const [boxRef, measured] = useElementWidth(760);
const W = Math.max(280, measured);
@@ -94,11 +184,11 @@ function StudyChart({
const line = (key: "manhattan" | "euclidean") =>
rows.map((r) => `${x(r.dimension).toFixed(1)},${y(r[key]).toFixed(1)}`).join(" ");
- const mWins = rows.filter((r) => r.manhattan < r.euclidean).length;
- const eWins = rows.filter((r) => r.euclidean < r.manhattan).length;
- const ties = rows.length - mWins - eWins;
- const sumM = rows.reduce((s, r) => s + r.manhattan, 0);
- const sumE = rows.reduce((s, r) => s + r.euclidean, 0);
+ const mWins = boardRows.filter((r) => r.manhattan.expansions < r.euclidean.expansions).length;
+ const eWins = boardRows.filter((r) => r.euclidean.expansions < r.manhattan.expansions).length;
+ const ties = boardRows.length - mWins - eWins;
+ const sumM = boardRows.reduce((s, r) => s + r.manhattan.expansions, 0);
+ const sumE = boardRows.reduce((s, r) => s + r.euclidean.expansions, 0);
const yTicks = [0, 0.25, 0.5, 0.75, 1].map((f) => Math.round(maxY * f));
const tickStep = W < 480 ? 40 : 20;
const xTicks = rows
@@ -113,10 +203,10 @@ function StudyChart({
return (
-
+
{yTicks.map((t) => (
@@ -198,6 +288,7 @@ function StudyChart({
))}
Metric: the notebook's expansion counter (nodes added to the queue after the start)
+ {boardsPerDimension > 1 ? `, averaged over ${boardsPerDimension} boards per size` : ""}
seed {seed} · {Math.round(elapsedMs)} ms in a Web Worker
diff --git a/web/src/components/astar/paired-study-summary.tsx b/web/src/components/astar/paired-study-summary.tsx
new file mode 100644
index 0000000..f61d8b3
--- /dev/null
+++ b/web/src/components/astar/paired-study-summary.tsx
@@ -0,0 +1,131 @@
+/**
+ * Paired Manhattan vs Euclidean results. Pure (no hooks): used for the
+ * precomputed reference study on the server and for live runs on the client.
+ */
+import { EstimateCI, IntervalAxis, IntervalBar } from "@/components/stats/interval";
+import { ScrollTable } from "@/components/stats/scroll-table";
+import type { PairedStudySummary } from "@/lib/analysis/astar-paired";
+import { formatNumber, formatP, formatPct, formatSigned } from "@/lib/stats/format";
+
+const pctCI = (lo: number, hi: number) => `[${(lo * 100).toFixed(1)}, ${(hi * 100).toFixed(1)}]`;
+
+export function PairedStudySummaryView({ summary }: { summary: PairedStudySummary }) {
+ const e = summary.expansions;
+ const o = summary.optimality;
+ const w = e.wilcoxon;
+ const rows = [
+ { label: "Manhattan", ci: o.manhattan, excess: o.manhattanExcess },
+ { label: "Euclidean", ci: o.euclidean, excess: o.euclideanExcess },
+ { label: "Both the same length", ci: o.agreement, excess: null },
+ ];
+ return (
+
+
+
Node expansions (paired, {summary.boards} boards)
+
+
+
+
+
+
+
+ Manhattan expanded fewer nodes on {e.manhattanFewer} boards, Euclidean on{" "}
+ {e.euclideanFewer}, with {e.ties} ties. Negative differences favour Manhattan.
+
+
+
+
+
+ Did A* find a shortest path? ({summary.boardsWithPath} boards with a path)
+
+
Compared with a breadth-first search on the same board. Wilson 95% intervals.>
+ }
+ >
+
+
+
+ Heuristic
+
+
+ Interval
+ `${t * 100}%`} />
+
+
+ Rate (95% CI)
+
+
+ Extra cells
+
+
+
+
+ {rows.map((r) => (
+
+
+ {r.label}
+
+ {r.excess === null ? "agreement rate" : "shortest path found"}
+
+
+
+
+
+
+
+
+
+ {r.excess === null ? "" : `+${formatNumber(r.excess, 2)}`}
+
+
+ ))}
+
+
+
+ Extra cells: mean path length beyond the shortest, over boards with a path (largest seen:{" "}
+ {o.maxExcess}). Neither heuristic is admissible on this grid: both overestimate the true
+ distance for {formatPct(summary.overestimation.manhattan)} of start/goal pairs on an empty{" "}
+ {summary.overestimation.dimension} × {summary.overestimation.dimension} board.
+
+
+
+ );
+}
+
+function Stat({ label, value, hint }: { label: string; value: string; hint?: string }) {
+ return (
+
+
{label}
+ {value}
+ {hint && {hint} }
+
+ );
+}
diff --git a/web/src/components/layout/page-header.tsx b/web/src/components/layout/page-header.tsx
new file mode 100644
index 0000000..24b3b95
--- /dev/null
+++ b/web/src/components/layout/page-header.tsx
@@ -0,0 +1,66 @@
+import type { ReactNode } from "react";
+
+import { cn } from "@/lib/utils";
+
+export function PageHeader({
+ eyebrow,
+ title,
+ children,
+}: {
+ eyebrow: string;
+ title: string;
+ children?: ReactNode;
+}) {
+ return (
+
+
+ {eyebrow}
+
+
{title}
+ {children &&
{children}
}
+
+ );
+}
+
+export function Section({
+ id,
+ eyebrow,
+ title,
+ intro,
+ children,
+ className,
+}: {
+ id: string;
+ eyebrow?: string;
+ title: string;
+ intro?: ReactNode;
+ children: ReactNode;
+ className?: string;
+}) {
+ return (
+
+
+ {eyebrow && (
+
+ {eyebrow}
+
+ )}
+
+ {title}
+
+ {intro &&
{intro}
}
+
+ {children}
+
+ );
+}
+
+export function Finding({ children }: { children: ReactNode }) {
+ return (
+ {children}
+ );
+}
diff --git a/web/src/components/stats/interval.tsx b/web/src/components/stats/interval.tsx
new file mode 100644
index 0000000..163aaa8
--- /dev/null
+++ b/web/src/components/stats/interval.tsx
@@ -0,0 +1,144 @@
+/**
+ * Forest-plot style interval marks for tables: a 2px interval line with end
+ * caps and an 8px point estimate wearing a surface ring, on a hairline track
+ * with an optional reference line (e.g. 50% or 0). Exact numbers always sit
+ * in an adjacent cell, so the mark never carries information on its own.
+ */
+import { cn } from "@/lib/utils";
+
+const clamp = (x: number) => Math.min(100, Math.max(0, x));
+
+export function IntervalBar({
+ estimate,
+ lower,
+ upper,
+ min,
+ max,
+ reference,
+ label,
+ className,
+}: {
+ estimate: number;
+ lower: number;
+ upper: number;
+ min: number;
+ max: number;
+ reference?: number;
+ /** Accessible description, also shown as a tooltip. */
+ label: string;
+ className?: string;
+}) {
+ const pct = (x: number) => clamp(((x - min) / (max - min || 1)) * 100);
+ const lo = pct(Math.min(lower, upper));
+ const hi = pct(Math.max(lower, upper));
+ const valid = [estimate, lower, upper].every(Number.isFinite);
+ return (
+
+
+ {reference !== undefined && (
+
+ )}
+ {valid && (
+ <>
+
+
+
+
+ >
+ )}
+
+ );
+}
+
+/** Axis labels for a column of IntervalBars (put it in the header cell). */
+export function IntervalAxis({
+ min,
+ max,
+ ticks,
+ format,
+}: {
+ min: number;
+ max: number;
+ ticks: number[];
+ format: (x: number) => string;
+}) {
+ return (
+
+ {ticks.map((t, i) => {
+ const left = clamp(((t - min) / (max - min || 1)) * 100);
+ const align =
+ i === 0
+ ? "translate-x-0"
+ : i === ticks.length - 1
+ ? "-translate-x-full"
+ : "-translate-x-1/2";
+ return (
+
+ {format(t)}
+
+ );
+ })}
+
+ );
+}
+
+/** "76.0% [72.0, 79.6]" style estimate with its interval, interval de-emphasised. */
+export function EstimateCI({
+ estimate,
+ interval,
+ className,
+}: {
+ estimate: string;
+ interval: string;
+ className?: string;
+}) {
+ return (
+
+ {estimate} {interval}
+
+ );
+}
+
+/** Nice round ticks spanning [min, max]. */
+export function niceTicks(min: number, max: number, count = 4): number[] {
+ const span = max - min || 1;
+ const raw = span / count;
+ const mag = 10 ** Math.floor(Math.log10(raw));
+ const step = [1, 2, 2.5, 5, 10].map((m) => m * mag).find((s) => span / s <= count) ?? 10 * mag;
+ const out: number[] = [];
+ for (let t = Math.ceil(min / step) * step; t <= max + 1e-9; t += step)
+ out.push(Number(t.toFixed(10)));
+ return out;
+}
diff --git a/web/src/components/stats/scroll-table.tsx b/web/src/components/stats/scroll-table.tsx
new file mode 100644
index 0000000..f65940b
--- /dev/null
+++ b/web/src/components/stats/scroll-table.tsx
@@ -0,0 +1,27 @@
+import type { ReactNode } from "react";
+
+import { cn } from "@/lib/utils";
+
+/**
+ * A table that scrolls sideways on narrow screens, with its caption kept
+ * outside the scroll area so it always wraps to the viewport.
+ */
+export function ScrollTable({
+ caption,
+ className,
+ children,
+}: {
+ caption?: ReactNode;
+ /** Classes for the (e.g. a min-width). */
+ className?: string;
+ children: ReactNode;
+}) {
+ return (
+
+ {caption && {caption} }
+
+
+ );
+}
diff --git a/web/src/components/tournament/alpha-beta-table.tsx b/web/src/components/tournament/alpha-beta-table.tsx
new file mode 100644
index 0000000..6320845
--- /dev/null
+++ b/web/src/components/tournament/alpha-beta-table.tsx
@@ -0,0 +1,98 @@
+/**
+ * Alpha-beta efficiency table: share of the full minimax tree each search
+ * visits, per board size and depth, with bootstrap intervals over positions.
+ */
+import { EstimateCI, IntervalAxis, IntervalBar } from "@/components/stats/interval";
+import { ScrollTable } from "@/components/stats/scroll-table";
+import type { PruningGroup } from "@/lib/analysis/alpha-beta";
+import { formatNumber, formatPct } from "@/lib/stats/format";
+
+const ci = (lo: number, hi: number) => `[${(lo * 100).toFixed(1)}, ${(hi * 100).toFixed(1)}]`;
+
+export function AlphaBetaTable({ groups, caption }: { groups: PruningGroup[]; caption: string }) {
+ return (
+ {caption}>}>
+
+
+
+ Board · depth
+
+
+ Full tree (nodes)
+
+
+ Share of tree visited
+ `${t * 100}%`} />
+
+
+ Original: share visited
+
+
+ Textbook: share visited
+
+
+ Same value
+
+
+
+
+ {groups.map((g) => (
+
+
+ {g.n}×{g.n} · d{g.depth}
+
+ {g.positions} positions
+
+
+
+ {formatNumber(g.meanFull, 0)}
+
+
+
+
+
+
+
+
+ {formatNumber(g.meanPruned, 0)} nodes
+
+
+
+
+
+ {formatNumber(g.meanTextbook, 0)} nodes
+
+
+
+ {g.valueMatches}/{g.positions} · {g.textbookValueMatches}/{g.positions}
+
+
+ ))}
+
+
+ );
+}
diff --git a/web/src/components/tournament/reference-tournament.tsx b/web/src/components/tournament/reference-tournament.tsx
new file mode 100644
index 0000000..da9d8b3
--- /dev/null
+++ b/web/src/components/tournament/reference-tournament.tsx
@@ -0,0 +1,38 @@
+"use client";
+
+import { useState } from "react";
+
+import { Segmented } from "@/components/play/primitives";
+import type { TournamentSummary } from "@/lib/tournament/analyse";
+import { Leaderboard, PairwiseTable, SummaryStats } from "./tournament-results";
+
+/** Switches between precomputed summaries (all sizes, or one board size). */
+export function ReferenceTournament({
+ summaries,
+ hardware,
+}: {
+ summaries: { key: string; label: string; summary: TournamentSummary }[];
+ /** Where the move times were measured, e.g. "Apple M4, Node v26". */
+ hardware: string;
+}) {
+ const [key, setKey] = useState(summaries[0].key);
+ const current = summaries.find((s) => s.key === key) ?? summaries[0];
+ return (
+
+
+ ({ value: s.key, label: s.label }))}
+ />
+
+
+
+
+
+ );
+}
diff --git a/web/src/components/tournament/tournament-results.tsx b/web/src/components/tournament/tournament-results.tsx
new file mode 100644
index 0000000..9a5caf4
--- /dev/null
+++ b/web/src/components/tournament/tournament-results.tsx
@@ -0,0 +1,214 @@
+/**
+ * Results tables shared by the precomputed reference tournament and the
+ * in-browser runner. Pure presentational components (no hooks), so they render
+ * on the server for the reference and on the client for live runs.
+ */
+import { EstimateCI, IntervalAxis, IntervalBar, niceTicks } from "@/components/stats/interval";
+import { ScrollTable } from "@/components/stats/scroll-table";
+import { AGENTS } from "@/lib/tournament/agents";
+import type { TournamentSummary } from "@/lib/tournament/analyse";
+import { formatNumber, formatPct } from "@/lib/stats/format";
+
+const pctCI = (lo: number, hi: number) => `[${(lo * 100).toFixed(1)}, ${(hi * 100).toFixed(1)}]`;
+
+export function Leaderboard({ summary, caption }: { summary: TournamentSummary; caption: string }) {
+ const finite = summary.standings
+ .flatMap((s) => [s.elo.lower, s.elo.upper])
+ .filter(Number.isFinite);
+ const lo = Math.min(0, ...finite);
+ const hi = Math.max(100, ...finite);
+ const pad = (hi - lo) * 0.06;
+ const min = lo - pad;
+ const max = hi + pad;
+ return (
+ {caption}>}>
+
+
+
+ Agent
+
+
+ Strength interval
+ String(t)}
+ />
+
+
+ Elo vs random (95% CI)
+
+
+ Win rate (95% CI)
+
+
+ W–D–L
+
+
+ Illegal
+
+
+ ms / move (95% CI)
+
+
+
+
+ {summary.standings.map((s) => {
+ const anchor = s.id === summary.anchor;
+ return (
+
+
+ {AGENTS[s.id].label}
+ {AGENTS[s.id].knob}
+
+
+ {anchor ? (
+ reference (0)
+ ) : (
+
+ )}
+
+
+ {anchor ? (
+ 0
+ ) : (
+
+ )}
+
+
+
+
+
+ {s.wins}–{s.draws}–{s.losses}
+
+ {s.illegalMoves}
+
+
+
+
+ );
+ })}
+
+
+ );
+}
+
+export function PairwiseTable({ summary }: { summary: TournamentSummary }) {
+ return (
+
+ Head to head. Win rate of the first-named agent; the vertical line marks 50%. Each pairing
+ played equal games as Red and as Blue.
+ >
+ }
+ >
+
+
+
+ Pairing
+
+
+ W–L (D)
+
+
+ Win rate interval
+ `${t * 100}%`} />
+
+
+ Win rate (95% CI)
+
+
+ As Red / as Blue
+
+
+
+
+ {summary.pairs.map((p) => (
+
+
+ {AGENTS[p.a].short} vs {" "}
+ {AGENTS[p.b].short}
+
+
+ {p.aWins}–{p.bWins}
+ {p.draws > 0 && ({p.draws}) }
+
+
+
+
+
+
+
+
+ {p.aAsRed.wins}/{p.aAsRed.games} · {p.aAsBlue.wins}/{p.aAsBlue.games}
+
+
+ ))}
+
+
+ );
+}
+
+export function SummaryStats({ summary }: { summary: TournamentSummary }) {
+ const c = summary.colour;
+ return (
+
+
+
+
+
+ );
+}
+
+function Stat({ label, value, hint }: { label: string; value: string; hint?: string }) {
+ return (
+
+
{label}
+ {value}
+ {hint && {hint} }
+
+ );
+}
diff --git a/web/src/components/tournament/tournament-runner.tsx b/web/src/components/tournament/tournament-runner.tsx
new file mode 100644
index 0000000..f9c5957
--- /dev/null
+++ b/web/src/components/tournament/tournament-runner.tsx
@@ -0,0 +1,268 @@
+"use client";
+
+import { Download, Loader2, Play, Shuffle, Square } from "lucide-react";
+import { useMemo, useState } from "react";
+
+import { Field, Panel } from "@/components/play/primitives";
+import { Button } from "@/components/ui/button";
+import { Checkbox } from "@/components/ui/checkbox";
+import { Input } from "@/components/ui/input";
+import { Label } from "@/components/ui/label";
+import { useTournamentPool } from "@/hooks/use-tournament-pool";
+import { downloadText } from "@/lib/download";
+import { randomSeed } from "@/lib/rng";
+import { AGENT_IDS, AGENTS, type AgentId } from "@/lib/tournament/agents";
+import { gamesCsv, summariseTournament, summaryCsv } from "@/lib/tournament/analyse";
+import type { GameRecord } from "@/lib/tournament/play";
+import { buildSchedule } from "@/lib/tournament/schedule";
+import { Leaderboard, PairwiseTable, SummaryStats } from "./tournament-results";
+
+const SIZES = [3, 4, 5, 6, 7];
+const ROUNDS = [1, 2, 5, 10, 20];
+
+type Status =
+ | { kind: "idle" }
+ | { kind: "running"; total: number; started: number }
+ | { kind: "done"; elapsedMs: number; cancelled: boolean }
+ | { kind: "error"; message: string };
+
+export function TournamentRunner() {
+ const [agents, setAgents] = useState([
+ "minimax-dynamic",
+ "minimax-d2",
+ "greedy",
+ "random",
+ ]);
+ const [sizes, setSizes] = useState([4, 5]);
+ const [rounds, setRounds] = useState(5);
+ const [seed, setSeed] = useState(4399);
+ const [seedText, setSeedText] = useState("4399");
+ const [records, setRecords] = useState([]);
+ const [status, setStatus] = useState({ kind: "idle" });
+ const [ranSeed, setRanSeed] = useState(seed);
+ const pool = useTournamentPool();
+
+ const running = status.kind === "running";
+ const games =
+ agents.length >= 2 && sizes.length
+ ? ((agents.length * (agents.length - 1)) / 2) * sizes.length * rounds * 2
+ : 0;
+ const slow = agents.includes("minimax-d3") && sizes.some((n) => n >= 6);
+ const tooBig = agents.some((a) => sizes.some((n) => n > AGENTS[a].maxLiveN));
+
+ const toggle = (list: T[], item: T) =>
+ list.includes(item) ? list.filter((x) => x !== item) : [...list, item];
+
+ const start = async () => {
+ const schedule = buildSchedule({ agents, sizes, rounds, seed });
+ setRecords([]);
+ setRanSeed(seed);
+ const started = performance.now();
+ setStatus({ kind: "running", total: schedule.length, started });
+ const collected: GameRecord[] = [];
+ try {
+ const outcome = await pool.run(schedule, (r) => {
+ collected.push(r);
+ setRecords([...collected]);
+ });
+ setStatus({
+ kind: "done",
+ elapsedMs: performance.now() - started,
+ cancelled: outcome === "cancelled",
+ });
+ } catch (err) {
+ setStatus({ kind: "error", message: err instanceof Error ? err.message : String(err) });
+ }
+ };
+
+ const summary = useMemo(
+ () =>
+ status.kind === "done" && records.length > 0
+ ? summariseTournament(records, { reps: 500, seed: ranSeed })
+ : null,
+ [records, ranSeed, status.kind],
+ );
+
+ const stamp = `seed-${ranSeed}`;
+
+ return (
+
+
+
+
+
+ Agents
+
+ {AGENT_IDS.map((id) => (
+
+ setAgents((a) => toggle(a, id))}
+ className="mt-0.5"
+ />
+
+ {AGENTS[id].label}
+ {AGENTS[id].knob}
+
+
+ ))}
+
+
+
+
+ Board sizes
+
+
+ {SIZES.map((n) => (
+ setSizes((s) => toggle(s, n))}
+ className="aria-pressed:border-gold/60 aria-pressed:bg-gold/15 font-mono aria-pressed:font-semibold"
+ >
+ {n}×{n}
+
+ ))}
+
+
+
+
+
+ Colour-swapped pairs per pairing and size
+
+
+ {ROUNDS.map((r) => (
+ setRounds(r)}
+ className="aria-pressed:border-gold/60 aria-pressed:bg-gold/15 font-mono aria-pressed:font-semibold"
+ >
+ {r}
+
+ ))}
+
+
+
+
+
+ {
+ setSeedText(e.target.value);
+ const v = Number.parseInt(e.target.value, 10);
+ if (Number.isFinite(v) && v >= 0) setSeed(v);
+ }}
+ />
+ {
+ const s = randomSeed();
+ setSeed(s);
+ setSeedText(String(s));
+ }}
+ >
+
+
+
+
+
+
+ {games.toLocaleString("en-AU")} games, played in parallel Web Workers.
+ {slow && " Depth 3 on 6 × 6 and above takes a few seconds per game."}
+ {tooBig && " Some agents are slow at the larger sizes selected."}
+
+
+ {running ? (
+
+ Stop
+
+ ) : (
+
+ Run {games.toLocaleString("en-AU")} games
+
+ )}
+
+
+
+
+ {status.kind === "idle" && (
+
+ Choose agents and board sizes, then run. Every game is reproducible from the seed; each
+ pairing plays the same seed twice with colours swapped.
+
+ )}
+ {status.kind === "running" && (
+
+
+ Played {records.length} of {status.total}{" "}
+ games…
+
+
+
+ )}
+ {status.kind === "error" && (
+
+ {status.message}
+
+ )}
+ {summary && status.kind === "done" && (
+ <>
+
+
+ {status.cancelled ? "Stopped early: " : ""}
+ {records.length} games in {(status.elapsedMs / 1000).toFixed(1)} s · seed {ranSeed}
+
+
+ downloadText(`cachex-tournament-games-${stamp}.csv`, gamesCsv(records))
+ }
+ >
+ Games CSV
+
+
+ downloadText(`cachex-tournament-summary-${stamp}.csv`, summaryCsv(summary))
+ }
+ >
+ Summary CSV
+
+
+
+
+
+ >
+ )}
+
+
+ );
+}
diff --git a/web/src/components/ui/checkbox.tsx b/web/src/components/ui/checkbox.tsx
new file mode 100644
index 0000000..4f33bf0
--- /dev/null
+++ b/web/src/components/ui/checkbox.tsx
@@ -0,0 +1,25 @@
+"use client"
+
+import * as React from "react"
+import { cn } from "cn"
+import { CheckIcon } from "lucide-react"
+import { Checkbox as CheckboxPrimitive } from "radix-ui"
+
+function Checkbox({ className, ...props }: React.ComponentProps) {
+ return (
+
+
+
+
+
+ )
+}
+
+export { Checkbox }
diff --git a/web/src/components/ui/input.tsx b/web/src/components/ui/input.tsx
new file mode 100644
index 0000000..2a7d204
--- /dev/null
+++ b/web/src/components/ui/input.tsx
@@ -0,0 +1,18 @@
+import * as React from "react"
+import { cn } from "cn"
+
+function Input({ className, type, ...props }: React.ComponentProps<"input">) {
+ return (
+
+ )
+}
+
+export { Input }
diff --git a/web/src/hooks/use-astar-benchmark.ts b/web/src/hooks/use-astar-benchmark.ts
index 3992385..d40017a 100644
--- a/web/src/hooks/use-astar-benchmark.ts
+++ b/web/src/hooks/use-astar-benchmark.ts
@@ -2,16 +2,22 @@
import { useCallback, useEffect, useRef, useState } from "react";
-import { type BenchmarkRow, runHeuristicBenchmark } from "@/lib/astar/random-board";
+import { type PairedStudyRow, runPairedStudy } from "@/lib/analysis/astar-paired";
import type { BenchmarkResponse } from "@/workers/astar-benchmark.worker";
type State =
| { status: "idle" }
- | { status: "running"; seed: number }
- | { status: "done"; seed: number; rows: BenchmarkRow[]; elapsedMs: number }
+ | { status: "running"; seed: number; boardsPerDimension: number }
+ | {
+ status: "done";
+ seed: number;
+ boardsPerDimension: number;
+ rows: PairedStudyRow[];
+ elapsedMs: number;
+ }
| { status: "error"; message: string };
-/** Runs the heuristic study in a Web Worker (main-thread fallback). */
+/** Runs the paired heuristic study in a Web Worker (main-thread fallback). */
export function useAstarBenchmark() {
const [state, setState] = useState({ status: "idle" });
const workerRef = useRef(null);
@@ -31,6 +37,7 @@ export function useAstarBenchmark() {
? {
status: "done",
seed: prev.status === "running" ? prev.seed : 0,
+ boardsPerDimension: prev.status === "running" ? prev.boardsPerDimension : 1,
rows: res.rows,
elapsedMs: res.elapsedMs,
}
@@ -46,18 +53,24 @@ export function useAstarBenchmark() {
return () => worker?.terminate();
}, []);
- const run = useCallback((dimensions: number[], seed: number) => {
+ const run = useCallback((dimensions: number[], boardsPerDimension: number, seed: number) => {
const id = ++latest.current;
- setState({ status: "running", seed });
+ setState({ status: "running", seed, boardsPerDimension });
const worker = workerRef.current;
if (worker) {
- worker.postMessage({ id, dimensions, seed });
+ worker.postMessage({ id, dimensions, boardsPerDimension, seed });
} else {
setTimeout(() => {
const started = performance.now();
- const rows = runHeuristicBenchmark(dimensions, seed);
+ const rows = runPairedStudy({ dimensions, boardsPerDimension, seed });
if (id === latest.current)
- setState({ status: "done", seed, rows, elapsedMs: performance.now() - started });
+ setState({
+ status: "done",
+ seed,
+ boardsPerDimension,
+ rows,
+ elapsedMs: performance.now() - started,
+ });
}, 0);
}
}, []);
diff --git a/web/src/hooks/use-tournament-pool.ts b/web/src/hooks/use-tournament-pool.ts
new file mode 100644
index 0000000..c9caccb
--- /dev/null
+++ b/web/src/hooks/use-tournament-pool.ts
@@ -0,0 +1,111 @@
+"use client";
+
+import { useCallback, useEffect, useRef } from "react";
+
+import { type GameRecord, playTournamentGame } from "@/lib/tournament/play";
+import type { GameSpec } from "@/lib/tournament/schedule";
+import type { TournamentJobResult } from "@/workers/tournament.worker";
+
+/** Number of parallel workers: leave one core for the page, cap at 4. */
+export function poolSize(): number {
+ const cores = typeof navigator !== "undefined" ? navigator.hardwareConcurrency || 2 : 2;
+ return Math.max(1, Math.min(4, cores - 1));
+}
+
+/**
+ * Runs a list of games across a small pool of Web Workers, reporting each
+ * record as it finishes. Falls back to the main thread (yielding between
+ * games) when workers are unavailable. Cancelling terminates the workers.
+ */
+export function useTournamentPool() {
+ const workers = useRef([]);
+ const cancelled = useRef(false);
+
+ const stop = useCallback(() => {
+ cancelled.current = true;
+ for (const w of workers.current) w.terminate();
+ workers.current = [];
+ }, []);
+
+ useEffect(() => stop, [stop]);
+
+ const run = useCallback(
+ (specs: GameSpec[], onRecord: (record: GameRecord) => void): Promise<"done" | "cancelled"> => {
+ stop();
+ cancelled.current = false;
+ let next = 0;
+ let finished = 0;
+
+ return new Promise((resolve, reject) => {
+ const finishIfDone = () => {
+ if (finished === specs.length) {
+ stop();
+ cancelled.current = false;
+ resolve("done");
+ }
+ };
+ if (specs.length === 0) return resolve("done");
+
+ let pool: Worker[] = [];
+ try {
+ pool = Array.from(
+ { length: Math.min(poolSize(), specs.length) },
+ () =>
+ new Worker(new URL("../workers/tournament.worker.ts", import.meta.url), {
+ type: "module",
+ }),
+ );
+ } catch {
+ pool = [];
+ }
+
+ if (pool.length === 0) {
+ // Main-thread fallback.
+ const step = () => {
+ if (cancelled.current) return resolve("cancelled");
+ if (next >= specs.length) return resolve("done");
+ onRecord(playTournamentGame(specs[next++]));
+ setTimeout(step, 0);
+ };
+ return step();
+ }
+
+ workers.current = pool;
+ const dispatch = (w: Worker) => {
+ if (next >= specs.length) return;
+ const id = next++;
+ w.postMessage({ id, spec: specs[id] });
+ };
+ for (const w of pool) {
+ w.onmessage = (event: MessageEvent) => {
+ if (cancelled.current) return;
+ const res = event.data;
+ if (!res.ok) {
+ stop();
+ reject(new Error(res.error));
+ return;
+ }
+ finished++;
+ onRecord(res.record);
+ dispatch(w);
+ finishIfDone();
+ };
+ w.onerror = () => {
+ stop();
+ reject(new Error("A tournament worker crashed."));
+ };
+ dispatch(w);
+ }
+ const poll = setInterval(() => {
+ if (cancelled.current) {
+ clearInterval(poll);
+ resolve("cancelled");
+ } else if (finished === specs.length) clearInterval(poll);
+ }, 200);
+ });
+ },
+ [stop],
+ );
+
+ return { run, stop };
+}
diff --git a/web/src/lib/agent/minimax.ts b/web/src/lib/agent/minimax.ts
index ee99493..8f6cb9e 100644
--- a/web/src/lib/agent/minimax.ts
+++ b/web/src/lib/agent/minimax.ts
@@ -17,6 +17,11 @@ export interface SearchContext {
*/
order: MoveOrder;
bias: BiasFn;
+ /**
+ * Alpha-beta cut-offs (the original always prunes). Turning this off gives
+ * plain minimax with the same move order, for the pruning-efficiency study.
+ */
+ prune: boolean;
/** Number of nodes visited (for the UI). */
nodes: number;
/** Root-level (action, score) pairs, recorded when requested. */
@@ -26,9 +31,11 @@ export interface SearchContext {
export const createContext = (
order: MoveOrder = "canonical",
bias: BiasFn = noBias,
+ prune = true,
): SearchContext => ({
order,
bias,
+ prune,
nodes: 0,
});
@@ -109,7 +116,7 @@ export function minimax(
maxAction = action;
}
if (maxScore >= alpha) alpha = maxScore;
- if (alpha >= beta) break;
+ if (ctx.prune && alpha >= beta) break;
}
return [maxScore, maxAction];
}
@@ -126,7 +133,7 @@ export function minimax(
minAction = action;
}
if (beta <= minScore) beta = minScore;
- if (alpha >= beta) break;
+ if (ctx.prune && alpha >= beta) break;
}
return [minScore, minAction];
}
diff --git a/web/src/lib/agent/player.ts b/web/src/lib/agent/player.ts
index 860752c..50fc57d 100644
--- a/web/src/lib/agent/player.ts
+++ b/web/src/lib/agent/player.ts
@@ -78,6 +78,11 @@ export interface AgentOptions {
bias?: BiasFn;
/** Use the opening book on turns 1 and 2 (the original's default). */
enforceGamePlay?: boolean;
+ /**
+ * Search to this depth instead of `dynamic_depth_allocation` (used by the
+ * tournament's fixed-depth and greedy variants; the original never sets it).
+ */
+ fixedDepth?: number;
}
/** Choose the agent's action for `colour`, given the full action history. */
@@ -96,7 +101,7 @@ export function agentAction(
colour: Colour,
options: AgentOptions = {},
): AgentDecision {
- const { order = "canonical", bias = noBias, enforceGamePlay = true } = options;
+ const { order = "canonical", bias = noBias, enforceGamePlay = true, fixedDepth } = options;
if (board.turn <= 2 && enforceGamePlay) {
const { action, rule } = enforcedGamestartPlay(board.n, colour, board);
@@ -110,7 +115,7 @@ export function agentAction(
if (gameEnd(tmp)) return { action, explanation: { kind: "instant-win" } };
}
- const depth = dynamicDepthAllocation(board);
+ const depth = fixedDepth ?? dynamicDepthAllocation(board);
const ctx = createContext(order, bias);
ctx.rootScores = [];
const [score, action] = minimax(board, depth, -Infinity, Infinity, colour === "red", ctx, true);
diff --git a/web/src/lib/analysis/alpha-beta.ts b/web/src/lib/analysis/alpha-beta.ts
new file mode 100644
index 0000000..1c1fcfc
--- /dev/null
+++ b/web/src/lib/analysis/alpha-beta.ts
@@ -0,0 +1,256 @@
+/**
+ * How much work does alpha-beta pruning save the `_4399` search?
+ *
+ * For a sample of mid-game positions, the ported minimax runs twice at the
+ * same depth from the same position: once as written (with cut-offs) and once
+ * with pruning switched off. Plain minimax visits every node, so its count does
+ * not depend on move order; the pruned count does, so it is measured with both
+ * the agent's shuffled order and the canonical (r, q) order. The evaluation's
+ * random tie-break bias is switched off so both runs score positions
+ * identically, which lets the study check that pruning never changes the
+ * value of the root.
+ *
+ * Finding: the original's minimising branch updates beta with
+ * `if beta <= min_score: beta = min_score`, which only ever raises beta, so
+ * the window never tightens there and most cut-offs are lost. The result is
+ * still correct (a looser window never changes the minimax value), just slow.
+ * The study therefore also measures a textbook alpha-beta (beta =
+ * min(beta, score)) with identical move generation and evaluation, to show
+ * what the one-line fix would buy. The agent itself is left as submitted.
+ */
+import { AgentBoard } from "@/lib/agent/agent-board";
+import { noBias } from "@/lib/agent/evaluation";
+import { evaluate } from "@/lib/agent/evaluation";
+import {
+ type SearchContext,
+ createContext,
+ gameEnd,
+ getValidActions,
+ minimax,
+} from "@/lib/agent/minimax";
+import type { Action, Colour } from "@/lib/cachex/types";
+import { createRng, deriveSeed, randInt } from "@/lib/rng";
+import { type BootstrapCI, bootstrap, bootstrapMean } from "@/lib/stats/bootstrap";
+import { geometricMean, median } from "@/lib/stats/descriptive";
+import { tournamentMove } from "@/lib/tournament/agents";
+import { playTournamentGame } from "@/lib/tournament/play";
+
+export type SearchOrder = "shuffled" | "canonical";
+
+export interface PruningPosition {
+ n: number;
+ actions: Action[];
+ /** Cells still empty. */
+ empty: number;
+ toMove: Colour;
+ seed: number;
+}
+
+export interface PruningSample {
+ n: number;
+ depth: number;
+ order: SearchOrder;
+ empty: number;
+ nodesPruned: number;
+ nodesFull: number;
+ /** nodesPruned / nodesFull: the share of the full tree alpha-beta still visits. */
+ ratio: number;
+ /** Did pruning return the same root value as full minimax? */
+ valueMatches: boolean;
+ /** Nodes visited by textbook alpha-beta (corrected beta update), same order. */
+ nodesTextbook: number;
+ ratioTextbook: number;
+ textbookValueMatches: boolean;
+}
+
+/**
+ * Mid-game positions from seeded greedy-vs-random games, taken after the
+ * opening (turn 3 onwards) and before the game ends.
+ */
+export function samplePositions({
+ sizes,
+ perSize,
+ seed,
+}: {
+ sizes: readonly number[];
+ perSize: number;
+ seed: number;
+}): PruningPosition[] {
+ const out: PruningPosition[] = [];
+ for (const n of sizes) {
+ let attempt = 0;
+ let found = 0;
+ while (found < perSize && attempt < perSize * 20) {
+ const gameSeed = deriveSeed(seed, n, attempt++);
+ const actions = replayActions(n, gameSeed);
+ if (actions.length < 4) continue;
+ const rng = createRng(deriveSeed(gameSeed, 1));
+ const cut = randInt(rng, 2, actions.length - 1);
+ const board = AgentBoard.fromActions(n, actions.slice(0, cut));
+ out.push({
+ n,
+ actions: actions.slice(0, cut),
+ empty: board.emptyCount(),
+ toMove: cut % 2 === 0 ? "red" : "blue",
+ seed: gameSeed,
+ });
+ found++;
+ }
+ }
+ return out;
+}
+
+/** The actions of one seeded greedy (Red) vs random (Blue) game. */
+function replayActions(n: number, seed: number): Action[] {
+ const actions: Action[] = [];
+ playTournamentGame(
+ { id: "sample", n, red: "greedy", blue: "random", seed, round: 0 },
+ {
+ now: () => 0,
+ move: (id, size, history, colour, moveSeed) => {
+ const { action } = tournamentMove(id, size, history, colour, createRng(moveSeed));
+ actions.push(action);
+ return action;
+ },
+ },
+ );
+ return actions;
+}
+
+/**
+ * Textbook alpha-beta: identical to the port except that the minimising
+ * branch lowers beta (beta = min(beta, score)). Study-only; never used to play.
+ */
+export function textbookAlphaBeta(
+ board: AgentBoard,
+ depth: number,
+ alpha: number,
+ beta: number,
+ maximizingPlayer: boolean,
+ ctx: SearchContext,
+): number {
+ ctx.nodes += 1;
+ const player: Colour = maximizingPlayer ? "red" : "blue";
+ if (depth === 0 || gameEnd(board)) {
+ if (board.winner === null) return evaluate(board, ctx.bias);
+ return board.winner === "red" ? Infinity : -Infinity;
+ }
+ const actions = getValidActions(board, ctx.order);
+ if (maximizingPlayer) {
+ let best = -Infinity;
+ for (const action of actions) {
+ const child = board.clone();
+ child.update(player, action);
+ best = Math.max(best, textbookAlphaBeta(child, depth - 1, alpha, beta, false, ctx));
+ alpha = Math.max(alpha, best);
+ if (alpha >= beta) break;
+ }
+ return best;
+ }
+ let best = Infinity;
+ for (const action of actions) {
+ const child = board.clone();
+ child.update(player, action);
+ best = Math.min(best, textbookAlphaBeta(child, depth - 1, alpha, beta, true, ctx));
+ beta = Math.min(beta, best);
+ if (alpha >= beta) break;
+ }
+ return best;
+}
+
+export function measurePruning(
+ position: PruningPosition,
+ depth: number,
+ order: SearchOrder,
+): PruningSample {
+ const board = AgentBoard.fromActions(position.n, position.actions);
+ const maximizing = position.toMove === "red";
+ const context = (prune: boolean) =>
+ createContext(
+ order === "canonical" ? "canonical" : createRng(deriveSeed(position.seed, depth)),
+ noBias,
+ prune,
+ );
+ const search = (prune: boolean) => {
+ const ctx = context(prune);
+ const [score] = minimax(board.clone(), depth, -Infinity, Infinity, maximizing, ctx);
+ return { score, nodes: ctx.nodes };
+ };
+ const pruned = search(true);
+ const full = search(false);
+ const tctx = context(true);
+ const textbook = textbookAlphaBeta(board.clone(), depth, -Infinity, Infinity, maximizing, tctx);
+ return {
+ n: position.n,
+ depth,
+ order,
+ empty: position.empty,
+ nodesPruned: pruned.nodes,
+ nodesFull: full.nodes,
+ ratio: pruned.nodes / full.nodes,
+ valueMatches: pruned.score === full.score,
+ nodesTextbook: tctx.nodes,
+ ratioTextbook: tctx.nodes / full.nodes,
+ textbookValueMatches: textbook === full.score,
+ };
+}
+
+export interface PruningGroup {
+ n: number;
+ depth: number;
+ order: SearchOrder;
+ positions: number;
+ meanFull: number;
+ meanPruned: number;
+ /** Mean per-position ratio with a bootstrap CI over positions. */
+ meanRatio: BootstrapCI;
+ medianRatio: number;
+ geoMeanRatio: number;
+ /** Σ pruned / Σ full, with a bootstrap CI over positions. */
+ pooledRatio: BootstrapCI;
+ valueMatches: number;
+ meanTextbook: number;
+ /** Mean per-position ratio for textbook alpha-beta. */
+ textbookRatio: BootstrapCI;
+ textbookValueMatches: number;
+}
+
+export function summarisePruning(
+ samples: readonly PruningSample[],
+ { reps = 2000, seed = 30024 }: { reps?: number; seed?: number } = {},
+): PruningGroup[] {
+ const groups = new Map();
+ for (const s of samples) {
+ const key = `${s.n}|${s.depth}|${s.order}`;
+ groups.set(key, [...(groups.get(key) ?? []), s]);
+ }
+ return [...groups.values()]
+ .map((list, k) => {
+ const ratios = list.map((s) => s.ratio);
+ return {
+ n: list[0].n,
+ depth: list[0].depth,
+ order: list[0].order,
+ positions: list.length,
+ meanFull: list.reduce((s, x) => s + x.nodesFull, 0) / list.length,
+ meanPruned: list.reduce((s, x) => s + x.nodesPruned, 0) / list.length,
+ meanRatio: bootstrapMean(ratios, { reps, seed: seed + k }),
+ medianRatio: median(ratios),
+ geoMeanRatio: geometricMean(ratios),
+ pooledRatio: bootstrap(
+ list,
+ (xs) =>
+ xs.reduce((s, x) => s + x.nodesPruned, 0) / xs.reduce((s, x) => s + x.nodesFull, 0),
+ { reps, seed: seed + 1000 + k },
+ ),
+ valueMatches: list.filter((s) => s.valueMatches).length,
+ meanTextbook: list.reduce((s, x) => s + x.nodesTextbook, 0) / list.length,
+ textbookRatio: bootstrapMean(
+ list.map((s) => s.ratioTextbook),
+ { reps, seed: seed + 2000 + k },
+ ),
+ textbookValueMatches: list.filter((s) => s.textbookValueMatches).length,
+ };
+ })
+ .sort((a, b) => a.order.localeCompare(b.order) || a.n - b.n || a.depth - b.depth);
+}
diff --git a/web/src/lib/analysis/analysis.test.ts b/web/src/lib/analysis/analysis.test.ts
new file mode 100644
index 0000000..29d3053
--- /dev/null
+++ b/web/src/lib/analysis/analysis.test.ts
@@ -0,0 +1,168 @@
+import { describe, expect, it } from "vitest";
+
+import { astar } from "@/lib/astar/astar";
+import { PRESETS } from "@/lib/astar/presets";
+import { parsePartAInput } from "@/lib/astar/input";
+import { runHeuristicBenchmark } from "@/lib/astar/random-board";
+import { measurePruning, samplePositions, summarisePruning } from "./alpha-beta";
+import {
+ bfsPathCells,
+ hexDistance,
+ overestimationRate,
+ pairedStudyCsvRows,
+ runPairedStudy,
+ summarisePairedStudy,
+} from "./astar-paired";
+
+describe("hex distance and BFS ground truth", () => {
+ it("measures distance in the six HEX_STEPS directions", () => {
+ expect(hexDistance([0, 0], [1, -1])).toBe(1);
+ expect(hexDistance([0, 0], [1, 1])).toBe(2);
+ expect(hexDistance([2, 2], [0, 4])).toBe(2);
+ expect(hexDistance([0, 0], [3, 0])).toBe(3);
+ });
+
+ it("both heuristics overestimate exactly when dr and dq have opposite signs", () => {
+ // (1, -1) is one step away, but Manhattan says 2 and Euclidean √2.
+ const rates = overestimationRate(5);
+ expect(rates.manhattan).toBeCloseTo(rates.euclidean, 12);
+ // opposite-sign pairs on a 5×5 board: Σ over dr,dq ≠ 0 with opposite signs
+ let count = 0;
+ for (let a = 0; a < 25; a++)
+ for (let b = 0; b < 25; b++) {
+ const dr = Math.floor(b / 5) - Math.floor(a / 5);
+ const dq = (b % 5) - (a % 5);
+ if (dr * dq < 0) count++;
+ }
+ expect(rates.manhattan).toBeCloseTo(count / (25 * 24), 12);
+ });
+
+ it("BFS agrees with A* on the sample inputs (which are shortest paths)", () => {
+ for (const preset of PRESETS) {
+ const board = parsePartAInput(JSON.stringify(preset.input));
+ const bfs = bfsPathCells(board);
+ const m = astar(board, "manhattan");
+ if (preset.originalPath === null) {
+ expect(bfs).toBeNull();
+ expect(m.path).toEqual([]);
+ } else {
+ expect(bfs).not.toBeNull();
+ expect(m.path.length).toBeGreaterThanOrEqual(bfs!);
+ }
+ }
+ const s1 = bfsPathCells(parsePartAInput(JSON.stringify(PRESETS[0].input)));
+ const s2 = bfsPathCells(parsePartAInput(JSON.stringify(PRESETS[1].input)));
+ expect([s1, s2]).toEqual([8, 13]);
+ });
+});
+
+describe("paired heuristic study", () => {
+ it("reproduces the existing one-board-per-size benchmark exactly", () => {
+ const dims = [3, 8, 15, 30];
+ const rows = runPairedStudy({ dimensions: dims, boardsPerDimension: 1, seed: 17 });
+ const old = runHeuristicBenchmark(dims, 17);
+ rows.forEach((r, i) => {
+ expect(r.manhattan.expansions).toBe(old[i].manhattan);
+ expect(r.euclidean.expansions).toBe(old[i].euclidean);
+ expect(r.manhattan.cells > 0).toBe(old[i].pathFound);
+ });
+ });
+
+ const rows = runPairedStudy({
+ dimensions: Array.from({ length: 20 }, (_, i) => i + 4),
+ boardsPerDimension: 3,
+ seed: 5,
+ });
+ const summary = summarisePairedStudy(rows, { reps: 500, seed: 1 });
+
+ it("never finds a path shorter than BFS, and finds one exactly when BFS does", () => {
+ for (const r of rows) {
+ if (r.optimalCells === null) {
+ expect(r.manhattan.cells).toBe(0);
+ expect(r.euclidean.cells).toBe(0);
+ } else {
+ expect(r.manhattan.cells).toBeGreaterThanOrEqual(r.optimalCells);
+ expect(r.euclidean.cells).toBeGreaterThanOrEqual(r.optimalCells);
+ }
+ }
+ });
+
+ it("summarises paired differences consistently", () => {
+ const e = summary.expansions;
+ expect(summary.boards).toBe(60);
+ expect(e.manhattanFewer + e.euclideanFewer + e.ties).toBe(60);
+ expect(e.meanDiff.estimate).toBeCloseTo(e.meanManhattan - e.meanEuclidean, 9);
+ expect(e.meanDiff.lower).toBeLessThanOrEqual(e.meanDiff.estimate);
+ expect(e.meanDiff.upper).toBeGreaterThanOrEqual(e.meanDiff.estimate);
+ expect(e.wilcoxon.n + e.wilcoxon.zeros).toBe(60);
+ expect(e.wilcoxon.pValue).toBeGreaterThan(0);
+ expect(e.wilcoxon.pValue).toBeLessThanOrEqual(1);
+ const o = summary.optimality;
+ expect(o.manhattan.n).toBe(summary.boardsWithPath);
+ expect(o.manhattanExcess).toBeGreaterThanOrEqual(0);
+ expect(pairedStudyCsvRows(rows)).toHaveLength(60);
+ });
+});
+
+describe("alpha-beta efficiency", () => {
+ const positions = samplePositions({ sizes: [4, 5], perSize: 6, seed: 3 });
+
+ it("samples reproducible mid-game positions", () => {
+ expect(positions).toHaveLength(12);
+ expect(samplePositions({ sizes: [4, 5], perSize: 6, seed: 3 })).toEqual(positions);
+ for (const p of positions) {
+ expect(p.actions.length).toBeGreaterThanOrEqual(2);
+ expect(p.toMove).toBe(p.actions.length % 2 === 0 ? "red" : "blue");
+ }
+ });
+
+ it("pruning visits no more nodes and never changes the root value", () => {
+ for (const p of positions) {
+ for (const depth of [2, 3]) {
+ for (const order of ["canonical", "shuffled"] as const) {
+ const s = measurePruning(p, depth, order);
+ expect(s.valueMatches).toBe(true);
+ expect(s.textbookValueMatches).toBe(true);
+ expect(s.nodesPruned).toBeLessThanOrEqual(s.nodesFull);
+ expect(s.nodesTextbook).toBeLessThanOrEqual(s.nodesFull);
+ expect(s.ratio).toBeGreaterThan(0);
+ }
+ }
+ }
+ });
+
+ it("the original's inverted beta update costs pruning (textbook prunes at least as much here)", () => {
+ let original = 0;
+ let textbook = 0;
+ for (const p of positions) {
+ const s = measurePruning(p, 3, "canonical");
+ original += s.nodesPruned;
+ textbook += s.nodesTextbook;
+ }
+ expect(textbook).toBeLessThan(original);
+ });
+
+ it("full minimax visits 1 + b + b(b−1) nodes at depth 2 when nothing ends early", () => {
+ const p = positions[0];
+ const s = measurePruning(p, 2, "canonical");
+ const b = p.empty;
+ // A depth-2 subtree can end early only if a move wins, which is rare this early.
+ expect(s.nodesFull).toBeLessThanOrEqual(1 + b + b * (b - 1));
+ });
+
+ it("summarises by board size, depth and order", () => {
+ const samples = positions.flatMap((p) => [
+ measurePruning(p, 2, "canonical"),
+ measurePruning(p, 2, "shuffled"),
+ ]);
+ const groups = summarisePruning(samples, { reps: 200, seed: 1 });
+ expect(groups).toHaveLength(4);
+ for (const g of groups) {
+ expect(g.positions).toBe(6);
+ expect(g.valueMatches).toBe(6);
+ expect(g.meanRatio.estimate).toBeGreaterThan(0);
+ expect(g.meanRatio.estimate).toBeLessThanOrEqual(1);
+ expect(g.pooledRatio.lower).toBeLessThanOrEqual(g.pooledRatio.estimate);
+ }
+ });
+});
diff --git a/web/src/lib/analysis/astar-paired.ts b/web/src/lib/analysis/astar-paired.ts
new file mode 100644
index 0000000..16b17d5
--- /dev/null
+++ b/web/src/lib/analysis/astar-paired.ts
@@ -0,0 +1,241 @@
+/**
+ * Paired Manhattan vs Euclidean study for the Part A A* search.
+ *
+ * Both heuristics run on the *same* random boards (the notebook's generator),
+ * so the comparison is paired: the unit of analysis is a board, and the
+ * quantity of interest is the per-board difference in node expansions.
+ *
+ * It also checks optimality. On this hex grid (axial coordinates, the six
+ * steps in HEX_STEPS) the true distance between two cells is
+ * max(|dr|, |dq|, |dr + dq|). Manhattan |dr| + |dq| and Euclidean
+ * sqrt(dr² + dq²) both exceed it whenever dr and dq have opposite signs, so
+ * neither heuristic is admissible and A* may return a longer path than
+ * necessary. A breadth-first search gives the true shortest path to compare
+ * against.
+ */
+import { type AStarBoard, astar } from "@/lib/astar/astar";
+import { notebookExpansions, randomNotebookBoard } from "@/lib/astar/random-board";
+import { HEX_STEPS } from "@/lib/cachex/board";
+import type { Coord } from "@/lib/cachex/types";
+import { createRng } from "@/lib/rng";
+import { type BootstrapCI, pairedMeanDifference } from "@/lib/stats/bootstrap";
+import { median } from "@/lib/stats/descriptive";
+import { type ProportionCI, wilson } from "@/lib/stats/proportion";
+import { type WilcoxonResult, wilcoxonSignedRank } from "@/lib/stats/wilcoxon";
+
+/** True shortest-path distance (in steps) between two cells on an empty board. */
+export function hexDistance(a: Coord, b: Coord): number {
+ const dr = b[0] - a[0];
+ const dq = b[1] - a[1];
+ return Math.max(Math.abs(dr), Math.abs(dq), Math.abs(dr + dq));
+}
+
+/**
+ * Shortest path length in cells (start and goal included, like the A* output)
+ * when every occupied tile blocks, or null when the goal is unreachable.
+ */
+export function bfsPathCells(board: AStarBoard): number | null {
+ const { n, cells, start, goal } = board;
+ const id = (r: number, q: number) => r * n + q;
+ if (cells[id(start[0], start[1])] !== null) return null;
+ const dist = new Int32Array(n * n).fill(-1);
+ const queue = new Int32Array(n * n);
+ let head = 0;
+ let tail = 0;
+ const s = id(start[0], start[1]);
+ dist[s] = 0;
+ queue[tail++] = s;
+ const g = id(goal[0], goal[1]);
+ while (head < tail) {
+ const cur = queue[head++];
+ if (cur === g) return dist[cur] + 1;
+ const r = Math.floor(cur / n);
+ const q = cur % n;
+ for (const [dr, dq] of HEX_STEPS) {
+ const nr = r + dr;
+ const nq = q + dq;
+ if (nr < 0 || nq < 0 || nr >= n || nq >= n) continue;
+ const ni = id(nr, nq);
+ if (dist[ni] !== -1 || cells[ni] !== null) continue;
+ dist[ni] = dist[cur] + 1;
+ queue[tail++] = ni;
+ }
+ }
+ return null;
+}
+
+export interface HeuristicRun {
+ /** The notebook's expansion counter (queue insertions after the start). */
+ expansions: number;
+ /** Priority-queue pops. */
+ pops: number;
+ /** Path length in cells, or 0 when no path was found. */
+ cells: number;
+}
+
+export interface PairedStudyRow {
+ dimension: number;
+ /** Index of the board within its dimension. */
+ board: number;
+ /** BFS shortest path in cells, or null when start and goal are disconnected. */
+ optimalCells: number | null;
+ manhattan: HeuristicRun;
+ euclidean: HeuristicRun;
+}
+
+export interface PairedStudyConfig {
+ dimensions: readonly number[];
+ boardsPerDimension: number;
+ seed: number;
+}
+
+const run = (board: AStarBoard, heuristic: "manhattan" | "euclidean"): HeuristicRun => {
+ const r = astar(board, heuristic);
+ return { expansions: notebookExpansions(r), pops: r.pops, cells: r.path.length };
+};
+
+/**
+ * Generate boards in dimension order from one seeded stream. With one board
+ * per dimension this reproduces `runHeuristicBenchmark` board for board.
+ */
+export function runPairedStudy({
+ dimensions,
+ boardsPerDimension,
+ seed,
+}: PairedStudyConfig): PairedStudyRow[] {
+ const rng = createRng(seed);
+ const rows: PairedStudyRow[] = [];
+ for (const dimension of dimensions) {
+ for (let b = 0; b < boardsPerDimension; b++) {
+ const board = randomNotebookBoard(dimension, rng);
+ rows.push({
+ dimension,
+ board: b,
+ optimalCells: bfsPathCells(board),
+ manhattan: run(board, "manhattan"),
+ euclidean: run(board, "euclidean"),
+ });
+ }
+ }
+ return rows;
+}
+
+export interface PairedStudySummary {
+ boards: number;
+ boardsWithPath: number;
+ expansions: {
+ meanManhattan: number;
+ meanEuclidean: number;
+ /** Mean of (Manhattan − Euclidean) per board, with a paired bootstrap CI. */
+ meanDiff: BootstrapCI;
+ medianDiff: number;
+ /** Cohen's d_z of the paired differences. */
+ dz: number;
+ wilcoxon: WilcoxonResult;
+ manhattanFewer: number;
+ euclideanFewer: number;
+ ties: number;
+ };
+ optimality: {
+ /** Boards (with a path) where A* returned a shortest path. */
+ manhattan: ProportionCI;
+ euclidean: ProportionCI;
+ /** Boards where both heuristics returned paths of the same length. */
+ agreement: ProportionCI;
+ /** Mean extra cells over the shortest path, across boards with a path. */
+ manhattanExcess: number;
+ euclideanExcess: number;
+ /** Largest extra length seen. */
+ maxExcess: number;
+ };
+ /** Proportion of ordered cell pairs on an empty board where each heuristic overestimates. */
+ overestimation: { dimension: number; manhattan: number; euclidean: number };
+}
+
+/** Share of ordered (start, goal) pairs on an empty d × d board where h > true distance. */
+export function overestimationRate(dimension: number): { manhattan: number; euclidean: number } {
+ let pairs = 0;
+ let m = 0;
+ let e = 0;
+ for (let a = 0; a < dimension * dimension; a++) {
+ for (let b = 0; b < dimension * dimension; b++) {
+ if (a === b) continue;
+ const s: Coord = [Math.floor(a / dimension), a % dimension];
+ const g: Coord = [Math.floor(b / dimension), b % dimension];
+ const d = hexDistance(s, g);
+ const dr = Math.abs(g[0] - s[0]);
+ const dq = Math.abs(g[1] - s[1]);
+ pairs++;
+ if (dr + dq > d) m++;
+ if (Math.sqrt(dr * dr + dq * dq) > d + 1e-12) e++;
+ }
+ }
+ return { manhattan: m / pairs, euclidean: e / pairs };
+}
+
+export function summarisePairedStudy(
+ rows: readonly PairedStudyRow[],
+ { reps = 2000, seed = 2022 }: { reps?: number; seed?: number } = {},
+): PairedStudySummary {
+ const m = rows.map((r) => r.manhattan.expansions);
+ const e = rows.map((r) => r.euclidean.expansions);
+ const paired = pairedMeanDifference(m, e, { reps, seed });
+ const diffs = m.map((x, i) => x - e[i]);
+ const withPath = rows.filter((r) => r.optimalCells !== null);
+ const optimal = (key: "manhattan" | "euclidean") =>
+ withPath.filter((r) => r[key].cells === r.optimalCells).length;
+ const excess = (key: "manhattan" | "euclidean") =>
+ withPath.length
+ ? withPath.reduce((s, r) => s + (r[key].cells - r.optimalCells!), 0) / withPath.length
+ : 0;
+ const maxExcess = withPath.reduce(
+ (mx, r) =>
+ Math.max(mx, r.manhattan.cells - r.optimalCells!, r.euclidean.cells - r.optimalCells!),
+ 0,
+ );
+ const reference = 10;
+ return {
+ boards: rows.length,
+ boardsWithPath: withPath.length,
+ expansions: {
+ meanManhattan: paired.meanX,
+ meanEuclidean: paired.meanY,
+ meanDiff: paired.meanDiff,
+ medianDiff: median(diffs),
+ dz: paired.dz,
+ wilcoxon: wilcoxonSignedRank(m, e),
+ manhattanFewer: diffs.filter((d) => d < 0).length,
+ euclideanFewer: diffs.filter((d) => d > 0).length,
+ ties: diffs.filter((d) => d === 0).length,
+ },
+ optimality: {
+ manhattan: wilson(optimal("manhattan"), withPath.length),
+ euclidean: wilson(optimal("euclidean"), withPath.length),
+ agreement: wilson(
+ withPath.filter((r) => r.manhattan.cells === r.euclidean.cells).length,
+ withPath.length,
+ ),
+ manhattanExcess: excess("manhattan"),
+ euclideanExcess: excess("euclidean"),
+ maxExcess,
+ },
+ overestimation: { dimension: reference, ...overestimationRate(reference) },
+ };
+}
+
+/** One row per board, for CSV export. */
+export function pairedStudyCsvRows(rows: readonly PairedStudyRow[]) {
+ return rows.map((r) => ({
+ dimension: r.dimension,
+ board: r.board,
+ path_exists: r.optimalCells !== null,
+ shortest_path_cells: r.optimalCells,
+ manhattan_expansions: r.manhattan.expansions,
+ euclidean_expansions: r.euclidean.expansions,
+ diff_m_minus_e: r.manhattan.expansions - r.euclidean.expansions,
+ manhattan_pops: r.manhattan.pops,
+ euclidean_pops: r.euclidean.pops,
+ manhattan_path_cells: r.manhattan.cells,
+ euclidean_path_cells: r.euclidean.cells,
+ }));
+}
diff --git a/web/src/lib/csv.ts b/web/src/lib/csv.ts
new file mode 100644
index 0000000..18a15fc
--- /dev/null
+++ b/web/src/lib/csv.ts
@@ -0,0 +1,28 @@
+/**
+ * Minimal RFC 4180 CSV writer. String cells that start with a formula
+ * character are prefixed with an apostrophe so spreadsheet apps do not
+ * evaluate text (for example LLM output) as a formula.
+ */
+export type CsvValue = string | number | boolean | null | undefined;
+
+const FORMULA_START = /^[=+\-@\t\r]/;
+
+export function csvCell(value: CsvValue): string {
+ if (value === null || value === undefined) return "";
+ if (typeof value === "number") return Number.isFinite(value) ? String(value) : "";
+ if (typeof value === "boolean") return value ? "true" : "false";
+ let s = value;
+ if (FORMULA_START.test(s)) s = `'${s}`;
+ return /[",\n\r]/.test(s) ? `"${s.replace(/"/g, '""')}"` : s;
+}
+
+export function toCsv>(
+ rows: readonly T[],
+ columns: readonly (keyof T & string)[] = rows.length
+ ? (Object.keys(rows[0]) as (keyof T & string)[])
+ : [],
+): string {
+ const lines = [columns.map(csvCell).join(",")];
+ for (const row of rows) lines.push(columns.map((c) => csvCell(row[c])).join(","));
+ return `${lines.join("\r\n")}\r\n`;
+}
diff --git a/web/src/lib/data/alpha-beta-study.json b/web/src/lib/data/alpha-beta-study.json
new file mode 100644
index 0000000..9215841
--- /dev/null
+++ b/web/src/lib/data/alpha-beta-study.json
@@ -0,0 +1 @@
+{"meta":{"generatedBy":"web/scripts/generate-reference-studies.ts","generatedAt":"2026-10-05","node":"v26.10.0","cpu":"Apple M4","implementation":"TypeScript port (parity-tested against the original Python)","config":{"sizes":[4,5,6],"perSize":40,"depths":[2,3],"seed":2022}},"samples":[{"n":4,"depth":2,"order":"shuffled","empty":11,"nodesPruned":124,"nodesFull":124,"ratio":1,"valueMatches":true,"nodesTextbook":80,"ratioTextbook":0.6451612903225806,"textbookValueMatches":true},{"n":4,"depth":2,"order":"canonical","empty":11,"nodesPruned":124,"nodesFull":124,"ratio":1,"valueMatches":true,"nodesTextbook":51,"ratioTextbook":0.4112903225806452,"textbookValueMatches":true},{"n":4,"depth":3,"order":"shuffled","empty":11,"nodesPruned":1081,"nodesFull":1081,"ratio":1,"valueMatches":true,"nodesTextbook":190,"ratioTextbook":0.1757631822386679,"textbookValueMatches":true},{"n":4,"depth":3,"order":"canonical","empty":11,"nodesPruned":1081,"nodesFull":1081,"ratio":1,"valueMatches":true,"nodesTextbook":203,"ratioTextbook":0.1877890841813136,"textbookValueMatches":true},{"n":4,"depth":2,"order":"shuffled","empty":8,"nodesPruned":65,"nodesFull":65,"ratio":1,"valueMatches":true,"nodesTextbook":29,"ratioTextbook":0.4461538461538462,"textbookValueMatches":true},{"n":4,"depth":2,"order":"canonical","empty":8,"nodesPruned":65,"nodesFull":65,"ratio":1,"valueMatches":true,"nodesTextbook":23,"ratioTextbook":0.35384615384615387,"textbookValueMatches":true},{"n":4,"depth":3,"order":"shuffled","empty":8,"nodesPruned":407,"nodesFull":407,"ratio":1,"valueMatches":true,"nodesTextbook":134,"ratioTextbook":0.32923832923832924,"textbookValueMatches":true},{"n":4,"depth":3,"order":"canonical","empty":8,"nodesPruned":407,"nodesFull":407,"ratio":1,"valueMatches":true,"nodesTextbook":87,"ratioTextbook":0.21375921375921375,"textbookValueMatches":true},{"n":4,"depth":2,"order":"shuffled","empty":14,"nodesPruned":197,"nodesFull":197,"ratio":1,"valueMatches":true,"nodesTextbook":65,"ratioTextbook":0.3299492385786802,"textbookValueMatches":true},{"n":4,"depth":2,"order":"canonical","empty":14,"nodesPruned":197,"nodesFull":197,"ratio":1,"valueMatches":true,"nodesTextbook":41,"ratioTextbook":0.20812182741116753,"textbookValueMatches":true},{"n":4,"depth":3,"order":"shuffled","empty":14,"nodesPruned":2381,"nodesFull":2381,"ratio":1,"valueMatches":true,"nodesTextbook":360,"ratioTextbook":0.1511969760604788,"textbookValueMatches":true},{"n":4,"depth":3,"order":"canonical","empty":14,"nodesPruned":2381,"nodesFull":2381,"ratio":1,"valueMatches":true,"nodesTextbook":233,"ratioTextbook":0.09785804283914322,"textbookValueMatches":true},{"n":4,"depth":2,"order":"shuffled","empty":11,"nodesPruned":126,"nodesFull":126,"ratio":1,"valueMatches":true,"nodesTextbook":54,"ratioTextbook":0.42857142857142855,"textbookValueMatches":true},{"n":4,"depth":2,"order":"canonical","empty":11,"nodesPruned":126,"nodesFull":126,"ratio":1,"valueMatches":true,"nodesTextbook":40,"ratioTextbook":0.31746031746031744,"textbookValueMatches":true},{"n":4,"depth":3,"order":"shuffled","empty":11,"nodesPruned":1208,"nodesFull":1208,"ratio":1,"valueMatches":true,"nodesTextbook":252,"ratioTextbook":0.20860927152317882,"textbookValueMatches":true},{"n":4,"depth":3,"order":"canonical","empty":11,"nodesPruned":1208,"nodesFull":1208,"ratio":1,"valueMatches":true,"nodesTextbook":358,"ratioTextbook":0.29635761589403975,"textbookValueMatches":true},{"n":4,"depth":2,"order":"shuffled","empty":8,"nodesPruned":65,"nodesFull":65,"ratio":1,"valueMatches":true,"nodesTextbook":26,"ratioTextbook":0.4,"textbookValueMatches":true},{"n":4,"depth":2,"order":"canonical","empty":8,"nodesPruned":65,"nodesFull":65,"ratio":1,"valueMatches":true,"nodesTextbook":23,"ratioTextbook":0.35384615384615387,"textbookValueMatches":true},{"n":4,"depth":3,"order":"shuffled","empty":8,"nodesPruned":405,"nodesFull":405,"ratio":1,"valueMatches":true,"nodesTextbook":191,"ratioTextbook":0.47160493827160493,"textbookValueMatches":true},{"n":4,"depth":3,"order":"canonical","empty":8,"nodesPruned":405,"nodesFull":405,"ratio":1,"valueMatches":true,"nodesTextbook":100,"ratioTextbook":0.24691358024691357,"textbookValueMatches":true},{"n":4,"depth":2,"order":"shuffled","empty":14,"nodesPruned":197,"nodesFull":197,"ratio":1,"valueMatches":true,"nodesTextbook":78,"ratioTextbook":0.39593908629441626,"textbookValueMatches":true},{"n":4,"depth":2,"order":"canonical","empty":14,"nodesPruned":197,"nodesFull":197,"ratio":1,"valueMatches":true,"nodesTextbook":116,"ratioTextbook":0.5888324873096447,"textbookValueMatches":true},{"n":4,"depth":3,"order":"shuffled","empty":14,"nodesPruned":2387,"nodesFull":2387,"ratio":1,"valueMatches":true,"nodesTextbook":424,"ratioTextbook":0.1776288227901131,"textbookValueMatches":true},{"n":4,"depth":3,"order":"canonical","empty":14,"nodesPruned":2387,"nodesFull":2387,"ratio":1,"valueMatches":true,"nodesTextbook":418,"ratioTextbook":0.17511520737327188,"textbookValueMatches":true},{"n":4,"depth":2,"order":"shuffled","empty":6,"nodesPruned":41,"nodesFull":41,"ratio":1,"valueMatches":true,"nodesTextbook":27,"ratioTextbook":0.6585365853658537,"textbookValueMatches":true},{"n":4,"depth":2,"order":"canonical","empty":6,"nodesPruned":41,"nodesFull":41,"ratio":1,"valueMatches":true,"nodesTextbook":23,"ratioTextbook":0.5609756097560976,"textbookValueMatches":true},{"n":4,"depth":3,"order":"shuffled","empty":6,"nodesPruned":197,"nodesFull":197,"ratio":1,"valueMatches":true,"nodesTextbook":107,"ratioTextbook":0.5431472081218274,"textbookValueMatches":true},{"n":4,"depth":3,"order":"canonical","empty":6,"nodesPruned":197,"nodesFull":197,"ratio":1,"valueMatches":true,"nodesTextbook":95,"ratioTextbook":0.48223350253807107,"textbookValueMatches":true},{"n":4,"depth":2,"order":"shuffled","empty":7,"nodesPruned":9,"nodesFull":44,"ratio":0.20454545454545456,"valueMatches":true,"nodesTextbook":9,"ratioTextbook":0.20454545454545456,"textbookValueMatches":true},{"n":4,"depth":2,"order":"canonical","empty":7,"nodesPruned":23,"nodesFull":44,"ratio":0.5227272727272727,"valueMatches":true,"nodesTextbook":13,"ratioTextbook":0.29545454545454547,"textbookValueMatches":true},{"n":4,"depth":3,"order":"shuffled","empty":7,"nodesPruned":256,"nodesFull":256,"ratio":1,"valueMatches":true,"nodesTextbook":105,"ratioTextbook":0.41015625,"textbookValueMatches":true},{"n":4,"depth":3,"order":"canonical","empty":7,"nodesPruned":127,"nodesFull":256,"ratio":0.49609375,"valueMatches":true,"nodesTextbook":43,"ratioTextbook":0.16796875,"textbookValueMatches":true},{"n":4,"depth":2,"order":"shuffled","empty":8,"nodesPruned":58,"nodesFull":58,"ratio":1,"valueMatches":true,"nodesTextbook":27,"ratioTextbook":0.46551724137931033,"textbookValueMatches":true},{"n":4,"depth":2,"order":"canonical","empty":8,"nodesPruned":58,"nodesFull":58,"ratio":1,"valueMatches":true,"nodesTextbook":2,"ratioTextbook":0.034482758620689655,"textbookValueMatches":true},{"n":4,"depth":3,"order":"shuffled","empty":8,"nodesPruned":362,"nodesFull":362,"ratio":1,"valueMatches":true,"nodesTextbook":119,"ratioTextbook":0.3287292817679558,"textbookValueMatches":true},{"n":4,"depth":3,"order":"canonical","empty":8,"nodesPruned":362,"nodesFull":362,"ratio":1,"valueMatches":true,"nodesTextbook":2,"ratioTextbook":0.0055248618784530384,"textbookValueMatches":true},{"n":4,"depth":2,"order":"shuffled","empty":10,"nodesPruned":101,"nodesFull":101,"ratio":1,"valueMatches":true,"nodesTextbook":41,"ratioTextbook":0.40594059405940597,"textbookValueMatches":true},{"n":4,"depth":2,"order":"canonical","empty":10,"nodesPruned":101,"nodesFull":101,"ratio":1,"valueMatches":true,"nodesTextbook":55,"ratioTextbook":0.5445544554455446,"textbookValueMatches":true},{"n":4,"depth":3,"order":"shuffled","empty":10,"nodesPruned":821,"nodesFull":821,"ratio":1,"valueMatches":true,"nodesTextbook":412,"ratioTextbook":0.5018270401948843,"textbookValueMatches":true},{"n":4,"depth":3,"order":"canonical","empty":10,"nodesPruned":821,"nodesFull":821,"ratio":1,"valueMatches":true,"nodesTextbook":324,"ratioTextbook":0.3946406820950061,"textbookValueMatches":true},{"n":4,"depth":2,"order":"shuffled","empty":14,"nodesPruned":197,"nodesFull":197,"ratio":1,"valueMatches":true,"nodesTextbook":65,"ratioTextbook":0.3299492385786802,"textbookValueMatches":true},{"n":4,"depth":2,"order":"canonical","empty":14,"nodesPruned":197,"nodesFull":197,"ratio":1,"valueMatches":true,"nodesTextbook":93,"ratioTextbook":0.4720812182741117,"textbookValueMatches":true},{"n":4,"depth":3,"order":"shuffled","empty":14,"nodesPruned":2381,"nodesFull":2381,"ratio":1,"valueMatches":true,"nodesTextbook":431,"ratioTextbook":0.18101637967240655,"textbookValueMatches":true},{"n":4,"depth":3,"order":"canonical","empty":14,"nodesPruned":2381,"nodesFull":2381,"ratio":1,"valueMatches":true,"nodesTextbook":639,"ratioTextbook":0.26837463250734983,"textbookValueMatches":true},{"n":4,"depth":2,"order":"shuffled","empty":8,"nodesPruned":50,"nodesFull":58,"ratio":0.8620689655172413,"valueMatches":true,"nodesTextbook":26,"ratioTextbook":0.4482758620689655,"textbookValueMatches":true},{"n":4,"depth":2,"order":"canonical","empty":8,"nodesPruned":34,"nodesFull":58,"ratio":0.5862068965517241,"valueMatches":true,"nodesTextbook":16,"ratioTextbook":0.27586206896551724,"textbookValueMatches":true},{"n":4,"depth":3,"order":"shuffled","empty":8,"nodesPruned":106,"nodesFull":358,"ratio":0.29608938547486036,"valueMatches":true,"nodesTextbook":70,"ratioTextbook":0.19553072625698323,"textbookValueMatches":true},{"n":4,"depth":3,"order":"canonical","empty":8,"nodesPruned":204,"nodesFull":358,"ratio":0.5698324022346368,"valueMatches":true,"nodesTextbook":59,"ratioTextbook":0.164804469273743,"textbookValueMatches":true},{"n":4,"depth":2,"order":"shuffled","empty":12,"nodesPruned":145,"nodesFull":145,"ratio":1,"valueMatches":true,"nodesTextbook":45,"ratioTextbook":0.3103448275862069,"textbookValueMatches":true},{"n":4,"depth":2,"order":"canonical","empty":12,"nodesPruned":145,"nodesFull":145,"ratio":1,"valueMatches":true,"nodesTextbook":54,"ratioTextbook":0.3724137931034483,"textbookValueMatches":true},{"n":4,"depth":3,"order":"shuffled","empty":12,"nodesPruned":1491,"nodesFull":1491,"ratio":1,"valueMatches":true,"nodesTextbook":246,"ratioTextbook":0.16498993963782696,"textbookValueMatches":true},{"n":4,"depth":3,"order":"canonical","empty":12,"nodesPruned":1491,"nodesFull":1491,"ratio":1,"valueMatches":true,"nodesTextbook":328,"ratioTextbook":0.2199865861837693,"textbookValueMatches":true},{"n":4,"depth":2,"order":"shuffled","empty":14,"nodesPruned":197,"nodesFull":197,"ratio":1,"valueMatches":true,"nodesTextbook":54,"ratioTextbook":0.27411167512690354,"textbookValueMatches":true},{"n":4,"depth":2,"order":"canonical","empty":14,"nodesPruned":197,"nodesFull":197,"ratio":1,"valueMatches":true,"nodesTextbook":41,"ratioTextbook":0.20812182741116753,"textbookValueMatches":true},{"n":4,"depth":3,"order":"shuffled","empty":14,"nodesPruned":2383,"nodesFull":2383,"ratio":1,"valueMatches":true,"nodesTextbook":334,"ratioTextbook":0.14015946286193873,"textbookValueMatches":true},{"n":4,"depth":3,"order":"canonical","empty":14,"nodesPruned":2383,"nodesFull":2383,"ratio":1,"valueMatches":true,"nodesTextbook":221,"ratioTextbook":0.09274024339068401,"textbookValueMatches":true},{"n":4,"depth":2,"order":"shuffled","empty":12,"nodesPruned":145,"nodesFull":145,"ratio":1,"valueMatches":true,"nodesTextbook":44,"ratioTextbook":0.30344827586206896,"textbookValueMatches":true},{"n":4,"depth":2,"order":"canonical","empty":12,"nodesPruned":145,"nodesFull":145,"ratio":1,"valueMatches":true,"nodesTextbook":49,"ratioTextbook":0.33793103448275863,"textbookValueMatches":true},{"n":4,"depth":3,"order":"shuffled","empty":12,"nodesPruned":1469,"nodesFull":1469,"ratio":1,"valueMatches":true,"nodesTextbook":423,"ratioTextbook":0.28795098706603134,"textbookValueMatches":true},{"n":4,"depth":3,"order":"canonical","empty":12,"nodesPruned":1469,"nodesFull":1469,"ratio":1,"valueMatches":true,"nodesTextbook":341,"ratioTextbook":0.23213070115724982,"textbookValueMatches":true},{"n":4,"depth":2,"order":"shuffled","empty":11,"nodesPruned":122,"nodesFull":122,"ratio":1,"valueMatches":true,"nodesTextbook":78,"ratioTextbook":0.639344262295082,"textbookValueMatches":true},{"n":4,"depth":2,"order":"canonical","empty":11,"nodesPruned":122,"nodesFull":122,"ratio":1,"valueMatches":true,"nodesTextbook":91,"ratioTextbook":0.7459016393442623,"textbookValueMatches":true},{"n":4,"depth":3,"order":"shuffled","empty":11,"nodesPruned":1114,"nodesFull":1114,"ratio":1,"valueMatches":true,"nodesTextbook":371,"ratioTextbook":0.33303411131059246,"textbookValueMatches":true},{"n":4,"depth":3,"order":"canonical","empty":11,"nodesPruned":1114,"nodesFull":1114,"ratio":1,"valueMatches":true,"nodesTextbook":358,"ratioTextbook":0.3213644524236984,"textbookValueMatches":true},{"n":4,"depth":2,"order":"shuffled","empty":15,"nodesPruned":226,"nodesFull":226,"ratio":1,"valueMatches":true,"nodesTextbook":112,"ratioTextbook":0.49557522123893805,"textbookValueMatches":true},{"n":4,"depth":2,"order":"canonical","empty":15,"nodesPruned":226,"nodesFull":226,"ratio":1,"valueMatches":true,"nodesTextbook":44,"ratioTextbook":0.19469026548672566,"textbookValueMatches":true},{"n":4,"depth":3,"order":"shuffled","empty":15,"nodesPruned":2956,"nodesFull":2956,"ratio":1,"valueMatches":true,"nodesTextbook":794,"ratioTextbook":0.26860622462787553,"textbookValueMatches":true},{"n":4,"depth":3,"order":"canonical","empty":15,"nodesPruned":2956,"nodesFull":2956,"ratio":1,"valueMatches":true,"nodesTextbook":281,"ratioTextbook":0.09506089309878214,"textbookValueMatches":true},{"n":4,"depth":2,"order":"shuffled","empty":13,"nodesPruned":172,"nodesFull":172,"ratio":1,"valueMatches":true,"nodesTextbook":54,"ratioTextbook":0.313953488372093,"textbookValueMatches":true},{"n":4,"depth":2,"order":"canonical","empty":13,"nodesPruned":172,"nodesFull":172,"ratio":1,"valueMatches":true,"nodesTextbook":51,"ratioTextbook":0.29651162790697677,"textbookValueMatches":true},{"n":4,"depth":3,"order":"shuffled","empty":13,"nodesPruned":1948,"nodesFull":1948,"ratio":1,"valueMatches":true,"nodesTextbook":483,"ratioTextbook":0.24794661190965092,"textbookValueMatches":true},{"n":4,"depth":3,"order":"canonical","empty":13,"nodesPruned":1948,"nodesFull":1948,"ratio":1,"valueMatches":true,"nodesTextbook":247,"ratioTextbook":0.12679671457905545,"textbookValueMatches":true},{"n":4,"depth":2,"order":"shuffled","empty":9,"nodesPruned":82,"nodesFull":82,"ratio":1,"valueMatches":true,"nodesTextbook":52,"ratioTextbook":0.6341463414634146,"textbookValueMatches":true},{"n":4,"depth":2,"order":"canonical","empty":9,"nodesPruned":82,"nodesFull":82,"ratio":1,"valueMatches":true,"nodesTextbook":36,"ratioTextbook":0.43902439024390244,"textbookValueMatches":true},{"n":4,"depth":3,"order":"shuffled","empty":9,"nodesPruned":276,"nodesFull":532,"ratio":0.518796992481203,"valueMatches":true,"nodesTextbook":197,"ratioTextbook":0.37030075187969924,"textbookValueMatches":true},{"n":4,"depth":3,"order":"canonical","empty":9,"nodesPruned":364,"nodesFull":532,"ratio":0.6842105263157895,"valueMatches":true,"nodesTextbook":230,"ratioTextbook":0.4323308270676692,"textbookValueMatches":true},{"n":4,"depth":2,"order":"shuffled","empty":12,"nodesPruned":145,"nodesFull":145,"ratio":1,"valueMatches":true,"nodesTextbook":50,"ratioTextbook":0.3448275862068966,"textbookValueMatches":true},{"n":4,"depth":2,"order":"canonical","empty":12,"nodesPruned":145,"nodesFull":145,"ratio":1,"valueMatches":true,"nodesTextbook":35,"ratioTextbook":0.2413793103448276,"textbookValueMatches":true},{"n":4,"depth":3,"order":"shuffled","empty":12,"nodesPruned":1471,"nodesFull":1471,"ratio":1,"valueMatches":true,"nodesTextbook":282,"ratioTextbook":0.19170632222977566,"textbookValueMatches":true},{"n":4,"depth":3,"order":"canonical","empty":12,"nodesPruned":1471,"nodesFull":1471,"ratio":1,"valueMatches":true,"nodesTextbook":231,"ratioTextbook":0.15703602991162474,"textbookValueMatches":true},{"n":4,"depth":2,"order":"shuffled","empty":4,"nodesPruned":19,"nodesFull":19,"ratio":1,"valueMatches":true,"nodesTextbook":15,"ratioTextbook":0.7894736842105263,"textbookValueMatches":true},{"n":4,"depth":2,"order":"canonical","empty":4,"nodesPruned":19,"nodesFull":19,"ratio":1,"valueMatches":true,"nodesTextbook":13,"ratioTextbook":0.6842105263157895,"textbookValueMatches":true},{"n":4,"depth":3,"order":"shuffled","empty":4,"nodesPruned":47,"nodesFull":47,"ratio":1,"valueMatches":true,"nodesTextbook":32,"ratioTextbook":0.6808510638297872,"textbookValueMatches":true},{"n":4,"depth":3,"order":"canonical","empty":4,"nodesPruned":47,"nodesFull":47,"ratio":1,"valueMatches":true,"nodesTextbook":29,"ratioTextbook":0.6170212765957447,"textbookValueMatches":true},{"n":4,"depth":2,"order":"shuffled","empty":5,"nodesPruned":28,"nodesFull":28,"ratio":1,"valueMatches":true,"nodesTextbook":23,"ratioTextbook":0.8214285714285714,"textbookValueMatches":true},{"n":4,"depth":2,"order":"canonical","empty":5,"nodesPruned":28,"nodesFull":28,"ratio":1,"valueMatches":true,"nodesTextbook":16,"ratioTextbook":0.5714285714285714,"textbookValueMatches":true},{"n":4,"depth":3,"order":"shuffled","empty":5,"nodesPruned":67,"nodesFull":101,"ratio":0.6633663366336634,"valueMatches":true,"nodesTextbook":56,"ratioTextbook":0.5544554455445545,"textbookValueMatches":true},{"n":4,"depth":3,"order":"canonical","empty":5,"nodesPruned":93,"nodesFull":101,"ratio":0.9207920792079208,"valueMatches":true,"nodesTextbook":50,"ratioTextbook":0.49504950495049505,"textbookValueMatches":true},{"n":4,"depth":2,"order":"shuffled","empty":13,"nodesPruned":170,"nodesFull":170,"ratio":1,"valueMatches":true,"nodesTextbook":52,"ratioTextbook":0.3058823529411765,"textbookValueMatches":true},{"n":4,"depth":2,"order":"canonical","empty":13,"nodesPruned":170,"nodesFull":170,"ratio":1,"valueMatches":true,"nodesTextbook":38,"ratioTextbook":0.2235294117647059,"textbookValueMatches":true},{"n":4,"depth":3,"order":"shuffled","empty":13,"nodesPruned":1886,"nodesFull":1886,"ratio":1,"valueMatches":true,"nodesTextbook":441,"ratioTextbook":0.23382820784729585,"textbookValueMatches":true},{"n":4,"depth":3,"order":"canonical","empty":13,"nodesPruned":1886,"nodesFull":1886,"ratio":1,"valueMatches":true,"nodesTextbook":368,"ratioTextbook":0.1951219512195122,"textbookValueMatches":true},{"n":4,"depth":2,"order":"shuffled","empty":12,"nodesPruned":145,"nodesFull":145,"ratio":1,"valueMatches":true,"nodesTextbook":47,"ratioTextbook":0.32413793103448274,"textbookValueMatches":true},{"n":4,"depth":2,"order":"canonical","empty":12,"nodesPruned":145,"nodesFull":145,"ratio":1,"valueMatches":true,"nodesTextbook":43,"ratioTextbook":0.296551724137931,"textbookValueMatches":true},{"n":4,"depth":3,"order":"shuffled","empty":12,"nodesPruned":1465,"nodesFull":1465,"ratio":1,"valueMatches":true,"nodesTextbook":452,"ratioTextbook":0.30853242320819113,"textbookValueMatches":true},{"n":4,"depth":3,"order":"canonical","empty":12,"nodesPruned":1465,"nodesFull":1465,"ratio":1,"valueMatches":true,"nodesTextbook":391,"ratioTextbook":0.2668941979522184,"textbookValueMatches":true},{"n":4,"depth":2,"order":"shuffled","empty":14,"nodesPruned":197,"nodesFull":197,"ratio":1,"valueMatches":true,"nodesTextbook":80,"ratioTextbook":0.40609137055837563,"textbookValueMatches":true},{"n":4,"depth":2,"order":"canonical","empty":14,"nodesPruned":197,"nodesFull":197,"ratio":1,"valueMatches":true,"nodesTextbook":41,"ratioTextbook":0.20812182741116753,"textbookValueMatches":true},{"n":4,"depth":3,"order":"shuffled","empty":14,"nodesPruned":2387,"nodesFull":2387,"ratio":1,"valueMatches":true,"nodesTextbook":455,"ratioTextbook":0.1906158357771261,"textbookValueMatches":true},{"n":4,"depth":3,"order":"canonical","empty":14,"nodesPruned":2387,"nodesFull":2387,"ratio":1,"valueMatches":true,"nodesTextbook":313,"ratioTextbook":0.13112693757855048,"textbookValueMatches":true},{"n":4,"depth":2,"order":"shuffled","empty":13,"nodesPruned":170,"nodesFull":170,"ratio":1,"valueMatches":true,"nodesTextbook":54,"ratioTextbook":0.3176470588235294,"textbookValueMatches":true},{"n":4,"depth":2,"order":"canonical","empty":13,"nodesPruned":170,"nodesFull":170,"ratio":1,"valueMatches":true,"nodesTextbook":49,"ratioTextbook":0.28823529411764703,"textbookValueMatches":true},{"n":4,"depth":3,"order":"shuffled","empty":13,"nodesPruned":1890,"nodesFull":1890,"ratio":1,"valueMatches":true,"nodesTextbook":344,"ratioTextbook":0.182010582010582,"textbookValueMatches":true},{"n":4,"depth":3,"order":"canonical","empty":13,"nodesPruned":1890,"nodesFull":1890,"ratio":1,"valueMatches":true,"nodesTextbook":495,"ratioTextbook":0.2619047619047619,"textbookValueMatches":true},{"n":4,"depth":2,"order":"shuffled","empty":9,"nodesPruned":82,"nodesFull":82,"ratio":1,"valueMatches":true,"nodesTextbook":29,"ratioTextbook":0.35365853658536583,"textbookValueMatches":true},{"n":4,"depth":2,"order":"canonical","empty":9,"nodesPruned":82,"nodesFull":82,"ratio":1,"valueMatches":true,"nodesTextbook":33,"ratioTextbook":0.4024390243902439,"textbookValueMatches":true},{"n":4,"depth":3,"order":"shuffled","empty":9,"nodesPruned":592,"nodesFull":592,"ratio":1,"valueMatches":true,"nodesTextbook":180,"ratioTextbook":0.30405405405405406,"textbookValueMatches":true},{"n":4,"depth":3,"order":"canonical","empty":9,"nodesPruned":592,"nodesFull":592,"ratio":1,"valueMatches":true,"nodesTextbook":174,"ratioTextbook":0.2939189189189189,"textbookValueMatches":true},{"n":4,"depth":2,"order":"shuffled","empty":14,"nodesPruned":197,"nodesFull":197,"ratio":1,"valueMatches":true,"nodesTextbook":46,"ratioTextbook":0.233502538071066,"textbookValueMatches":true},{"n":4,"depth":2,"order":"canonical","empty":14,"nodesPruned":197,"nodesFull":197,"ratio":1,"valueMatches":true,"nodesTextbook":41,"ratioTextbook":0.20812182741116753,"textbookValueMatches":true},{"n":4,"depth":3,"order":"shuffled","empty":14,"nodesPruned":2381,"nodesFull":2381,"ratio":1,"valueMatches":true,"nodesTextbook":296,"ratioTextbook":0.124317513649727,"textbookValueMatches":true},{"n":4,"depth":3,"order":"canonical","empty":14,"nodesPruned":2381,"nodesFull":2381,"ratio":1,"valueMatches":true,"nodesTextbook":372,"ratioTextbook":0.15623687526249475,"textbookValueMatches":true},{"n":4,"depth":2,"order":"shuffled","empty":9,"nodesPruned":82,"nodesFull":82,"ratio":1,"valueMatches":true,"nodesTextbook":64,"ratioTextbook":0.7804878048780488,"textbookValueMatches":true},{"n":4,"depth":2,"order":"canonical","empty":9,"nodesPruned":82,"nodesFull":82,"ratio":1,"valueMatches":true,"nodesTextbook":65,"ratioTextbook":0.7926829268292683,"textbookValueMatches":true},{"n":4,"depth":3,"order":"shuffled","empty":9,"nodesPruned":306,"nodesFull":530,"ratio":0.5773584905660377,"valueMatches":true,"nodesTextbook":230,"ratioTextbook":0.4339622641509434,"textbookValueMatches":true},{"n":4,"depth":3,"order":"canonical","empty":9,"nodesPruned":138,"nodesFull":530,"ratio":0.26037735849056604,"valueMatches":true,"nodesTextbook":119,"ratioTextbook":0.22452830188679246,"textbookValueMatches":true},{"n":4,"depth":2,"order":"shuffled","empty":7,"nodesPruned":50,"nodesFull":50,"ratio":1,"valueMatches":true,"nodesTextbook":35,"ratioTextbook":0.7,"textbookValueMatches":true},{"n":4,"depth":2,"order":"canonical","empty":7,"nodesPruned":50,"nodesFull":50,"ratio":1,"valueMatches":true,"nodesTextbook":20,"ratioTextbook":0.4,"textbookValueMatches":true},{"n":4,"depth":3,"order":"shuffled","empty":7,"nodesPruned":266,"nodesFull":266,"ratio":1,"valueMatches":true,"nodesTextbook":161,"ratioTextbook":0.6052631578947368,"textbookValueMatches":true},{"n":4,"depth":3,"order":"canonical","empty":7,"nodesPruned":266,"nodesFull":266,"ratio":1,"valueMatches":true,"nodesTextbook":72,"ratioTextbook":0.2706766917293233,"textbookValueMatches":true},{"n":4,"depth":2,"order":"shuffled","empty":8,"nodesPruned":65,"nodesFull":65,"ratio":1,"valueMatches":true,"nodesTextbook":35,"ratioTextbook":0.5384615384615384,"textbookValueMatches":true},{"n":4,"depth":2,"order":"canonical","empty":8,"nodesPruned":65,"nodesFull":65,"ratio":1,"valueMatches":true,"nodesTextbook":64,"ratioTextbook":0.9846153846153847,"textbookValueMatches":true},{"n":4,"depth":3,"order":"shuffled","empty":8,"nodesPruned":403,"nodesFull":403,"ratio":1,"valueMatches":true,"nodesTextbook":115,"ratioTextbook":0.2853598014888337,"textbookValueMatches":true},{"n":4,"depth":3,"order":"canonical","empty":8,"nodesPruned":403,"nodesFull":403,"ratio":1,"valueMatches":true,"nodesTextbook":317,"ratioTextbook":0.7866004962779156,"textbookValueMatches":true},{"n":4,"depth":2,"order":"shuffled","empty":10,"nodesPruned":101,"nodesFull":101,"ratio":1,"valueMatches":true,"nodesTextbook":49,"ratioTextbook":0.48514851485148514,"textbookValueMatches":true},{"n":4,"depth":2,"order":"canonical","empty":10,"nodesPruned":101,"nodesFull":101,"ratio":1,"valueMatches":true,"nodesTextbook":40,"ratioTextbook":0.39603960396039606,"textbookValueMatches":true},{"n":4,"depth":3,"order":"shuffled","empty":10,"nodesPruned":823,"nodesFull":823,"ratio":1,"valueMatches":true,"nodesTextbook":297,"ratioTextbook":0.36087484811664644,"textbookValueMatches":true},{"n":4,"depth":3,"order":"canonical","empty":10,"nodesPruned":823,"nodesFull":823,"ratio":1,"valueMatches":true,"nodesTextbook":206,"ratioTextbook":0.2503037667071689,"textbookValueMatches":true},{"n":4,"depth":2,"order":"shuffled","empty":14,"nodesPruned":197,"nodesFull":197,"ratio":1,"valueMatches":true,"nodesTextbook":51,"ratioTextbook":0.25888324873096447,"textbookValueMatches":true},{"n":4,"depth":2,"order":"canonical","empty":14,"nodesPruned":197,"nodesFull":197,"ratio":1,"valueMatches":true,"nodesTextbook":47,"ratioTextbook":0.23857868020304568,"textbookValueMatches":true},{"n":4,"depth":3,"order":"shuffled","empty":14,"nodesPruned":2381,"nodesFull":2381,"ratio":1,"valueMatches":true,"nodesTextbook":445,"ratioTextbook":0.1868962620747585,"textbookValueMatches":true},{"n":4,"depth":3,"order":"canonical","empty":14,"nodesPruned":2381,"nodesFull":2381,"ratio":1,"valueMatches":true,"nodesTextbook":488,"ratioTextbook":0.20495590088198237,"textbookValueMatches":true},{"n":4,"depth":2,"order":"shuffled","empty":10,"nodesPruned":101,"nodesFull":101,"ratio":1,"valueMatches":true,"nodesTextbook":61,"ratioTextbook":0.6039603960396039,"textbookValueMatches":true},{"n":4,"depth":2,"order":"canonical","empty":10,"nodesPruned":101,"nodesFull":101,"ratio":1,"valueMatches":true,"nodesTextbook":37,"ratioTextbook":0.36633663366336633,"textbookValueMatches":true},{"n":4,"depth":3,"order":"shuffled","empty":10,"nodesPruned":827,"nodesFull":827,"ratio":1,"valueMatches":true,"nodesTextbook":266,"ratioTextbook":0.3216444981862152,"textbookValueMatches":true},{"n":4,"depth":3,"order":"canonical","empty":10,"nodesPruned":827,"nodesFull":827,"ratio":1,"valueMatches":true,"nodesTextbook":268,"ratioTextbook":0.32406287787182586,"textbookValueMatches":true},{"n":4,"depth":2,"order":"shuffled","empty":15,"nodesPruned":226,"nodesFull":226,"ratio":1,"valueMatches":true,"nodesTextbook":56,"ratioTextbook":0.24778761061946902,"textbookValueMatches":true},{"n":4,"depth":2,"order":"canonical","empty":15,"nodesPruned":226,"nodesFull":226,"ratio":1,"valueMatches":true,"nodesTextbook":44,"ratioTextbook":0.19469026548672566,"textbookValueMatches":true},{"n":4,"depth":3,"order":"shuffled","empty":15,"nodesPruned":2956,"nodesFull":2956,"ratio":1,"valueMatches":true,"nodesTextbook":316,"ratioTextbook":0.10690121786197564,"textbookValueMatches":true},{"n":4,"depth":3,"order":"canonical","empty":15,"nodesPruned":2956,"nodesFull":2956,"ratio":1,"valueMatches":true,"nodesTextbook":252,"ratioTextbook":0.08525033829499323,"textbookValueMatches":true},{"n":4,"depth":2,"order":"shuffled","empty":10,"nodesPruned":101,"nodesFull":101,"ratio":1,"valueMatches":true,"nodesTextbook":55,"ratioTextbook":0.5445544554455446,"textbookValueMatches":true},{"n":4,"depth":2,"order":"canonical","empty":10,"nodesPruned":101,"nodesFull":101,"ratio":1,"valueMatches":true,"nodesTextbook":92,"ratioTextbook":0.9108910891089109,"textbookValueMatches":true},{"n":4,"depth":3,"order":"shuffled","empty":10,"nodesPruned":841,"nodesFull":841,"ratio":1,"valueMatches":true,"nodesTextbook":346,"ratioTextbook":0.4114149821640904,"textbookValueMatches":true},{"n":4,"depth":3,"order":"canonical","empty":10,"nodesPruned":841,"nodesFull":841,"ratio":1,"valueMatches":true,"nodesTextbook":601,"ratioTextbook":0.7146254458977408,"textbookValueMatches":true},{"n":4,"depth":2,"order":"shuffled","empty":15,"nodesPruned":226,"nodesFull":226,"ratio":1,"valueMatches":true,"nodesTextbook":53,"ratioTextbook":0.2345132743362832,"textbookValueMatches":true},{"n":4,"depth":2,"order":"canonical","empty":15,"nodesPruned":226,"nodesFull":226,"ratio":1,"valueMatches":true,"nodesTextbook":44,"ratioTextbook":0.19469026548672566,"textbookValueMatches":true},{"n":4,"depth":3,"order":"shuffled","empty":15,"nodesPruned":2956,"nodesFull":2956,"ratio":1,"valueMatches":true,"nodesTextbook":371,"ratioTextbook":0.12550744248985116,"textbookValueMatches":true},{"n":4,"depth":3,"order":"canonical","empty":15,"nodesPruned":2956,"nodesFull":2956,"ratio":1,"valueMatches":true,"nodesTextbook":252,"ratioTextbook":0.08525033829499323,"textbookValueMatches":true},{"n":4,"depth":2,"order":"shuffled","empty":8,"nodesPruned":65,"nodesFull":65,"ratio":1,"valueMatches":true,"nodesTextbook":49,"ratioTextbook":0.7538461538461538,"textbookValueMatches":true},{"n":4,"depth":2,"order":"canonical","empty":8,"nodesPruned":65,"nodesFull":65,"ratio":1,"valueMatches":true,"nodesTextbook":49,"ratioTextbook":0.7538461538461538,"textbookValueMatches":true},{"n":4,"depth":3,"order":"shuffled","empty":8,"nodesPruned":405,"nodesFull":405,"ratio":1,"valueMatches":true,"nodesTextbook":177,"ratioTextbook":0.43703703703703706,"textbookValueMatches":true},{"n":4,"depth":3,"order":"canonical","empty":8,"nodesPruned":405,"nodesFull":405,"ratio":1,"valueMatches":true,"nodesTextbook":261,"ratioTextbook":0.6444444444444445,"textbookValueMatches":true},{"n":4,"depth":2,"order":"shuffled","empty":13,"nodesPruned":170,"nodesFull":170,"ratio":1,"valueMatches":true,"nodesTextbook":54,"ratioTextbook":0.3176470588235294,"textbookValueMatches":true},{"n":4,"depth":2,"order":"canonical","empty":13,"nodesPruned":170,"nodesFull":170,"ratio":1,"valueMatches":true,"nodesTextbook":60,"ratioTextbook":0.35294117647058826,"textbookValueMatches":true},{"n":4,"depth":3,"order":"shuffled","empty":13,"nodesPruned":1886,"nodesFull":1886,"ratio":1,"valueMatches":true,"nodesTextbook":300,"ratioTextbook":0.15906680805938495,"textbookValueMatches":true},{"n":4,"depth":3,"order":"canonical","empty":13,"nodesPruned":1886,"nodesFull":1886,"ratio":1,"valueMatches":true,"nodesTextbook":330,"ratioTextbook":0.17497348886532343,"textbookValueMatches":true},{"n":4,"depth":2,"order":"shuffled","empty":8,"nodesPruned":18,"nodesFull":58,"ratio":0.3103448275862069,"valueMatches":true,"nodesTextbook":18,"ratioTextbook":0.3103448275862069,"textbookValueMatches":true},{"n":4,"depth":2,"order":"canonical","empty":8,"nodesPruned":2,"nodesFull":58,"ratio":0.034482758620689655,"valueMatches":true,"nodesTextbook":2,"ratioTextbook":0.034482758620689655,"textbookValueMatches":true},{"n":4,"depth":3,"order":"shuffled","empty":8,"nodesPruned":102,"nodesFull":356,"ratio":0.28651685393258425,"valueMatches":true,"nodesTextbook":53,"ratioTextbook":0.14887640449438203,"textbookValueMatches":true},{"n":4,"depth":3,"order":"canonical","empty":8,"nodesPruned":2,"nodesFull":356,"ratio":0.0056179775280898875,"valueMatches":true,"nodesTextbook":2,"ratioTextbook":0.0056179775280898875,"textbookValueMatches":true},{"n":5,"depth":2,"order":"shuffled","empty":4,"nodesPruned":2,"nodesFull":16,"ratio":0.125,"valueMatches":true,"nodesTextbook":2,"ratioTextbook":0.125,"textbookValueMatches":true},{"n":5,"depth":2,"order":"canonical","empty":4,"nodesPruned":16,"nodesFull":16,"ratio":1,"valueMatches":true,"nodesTextbook":15,"ratioTextbook":0.9375,"textbookValueMatches":true},{"n":5,"depth":3,"order":"shuffled","empty":4,"nodesPruned":44,"nodesFull":44,"ratio":1,"valueMatches":true,"nodesTextbook":33,"ratioTextbook":0.75,"textbookValueMatches":true},{"n":5,"depth":3,"order":"canonical","empty":4,"nodesPruned":44,"nodesFull":44,"ratio":1,"valueMatches":true,"nodesTextbook":38,"ratioTextbook":0.8636363636363636,"textbookValueMatches":true},{"n":5,"depth":2,"order":"shuffled","empty":21,"nodesPruned":442,"nodesFull":442,"ratio":1,"valueMatches":true,"nodesTextbook":184,"ratioTextbook":0.416289592760181,"textbookValueMatches":true},{"n":5,"depth":2,"order":"canonical","empty":21,"nodesPruned":442,"nodesFull":442,"ratio":1,"valueMatches":true,"nodesTextbook":125,"ratioTextbook":0.2828054298642534,"textbookValueMatches":true},{"n":5,"depth":3,"order":"shuffled","empty":21,"nodesPruned":8428,"nodesFull":8428,"ratio":1,"valueMatches":true,"nodesTextbook":1868,"ratioTextbook":0.2216421452301851,"textbookValueMatches":true},{"n":5,"depth":3,"order":"canonical","empty":21,"nodesPruned":8428,"nodesFull":8428,"ratio":1,"valueMatches":true,"nodesTextbook":1193,"ratioTextbook":0.14155196962505934,"textbookValueMatches":true},{"n":5,"depth":2,"order":"shuffled","empty":20,"nodesPruned":401,"nodesFull":401,"ratio":1,"valueMatches":true,"nodesTextbook":213,"ratioTextbook":0.5311720698254364,"textbookValueMatches":true},{"n":5,"depth":2,"order":"canonical","empty":20,"nodesPruned":401,"nodesFull":401,"ratio":1,"valueMatches":true,"nodesTextbook":160,"ratioTextbook":0.39900249376558605,"textbookValueMatches":true},{"n":5,"depth":3,"order":"shuffled","empty":20,"nodesPruned":7291,"nodesFull":7291,"ratio":1,"valueMatches":true,"nodesTextbook":1217,"ratioTextbook":0.16691811822795227,"textbookValueMatches":true},{"n":5,"depth":3,"order":"canonical","empty":20,"nodesPruned":7291,"nodesFull":7291,"ratio":1,"valueMatches":true,"nodesTextbook":1143,"ratioTextbook":0.15676861884515156,"textbookValueMatches":true},{"n":5,"depth":2,"order":"shuffled","empty":24,"nodesPruned":577,"nodesFull":577,"ratio":1,"valueMatches":true,"nodesTextbook":78,"ratioTextbook":0.13518197573656845,"textbookValueMatches":true},{"n":5,"depth":2,"order":"canonical","empty":24,"nodesPruned":577,"nodesFull":577,"ratio":1,"valueMatches":true,"nodesTextbook":71,"ratioTextbook":0.12305025996533796,"textbookValueMatches":true},{"n":5,"depth":3,"order":"shuffled","empty":24,"nodesPruned":12721,"nodesFull":12721,"ratio":1,"valueMatches":true,"nodesTextbook":810,"ratioTextbook":0.06367423944658439,"textbookValueMatches":true},{"n":5,"depth":3,"order":"canonical","empty":24,"nodesPruned":12721,"nodesFull":12721,"ratio":1,"valueMatches":true,"nodesTextbook":642,"ratioTextbook":0.050467730524329846,"textbookValueMatches":true},{"n":5,"depth":2,"order":"shuffled","empty":16,"nodesPruned":257,"nodesFull":257,"ratio":1,"valueMatches":true,"nodesTextbook":77,"ratioTextbook":0.29961089494163423,"textbookValueMatches":true},{"n":5,"depth":2,"order":"canonical","empty":16,"nodesPruned":257,"nodesFull":257,"ratio":1,"valueMatches":true,"nodesTextbook":86,"ratioTextbook":0.3346303501945525,"textbookValueMatches":true},{"n":5,"depth":3,"order":"shuffled","empty":16,"nodesPruned":3623,"nodesFull":3623,"ratio":1,"valueMatches":true,"nodesTextbook":697,"ratioTextbook":0.19238200386420093,"textbookValueMatches":true},{"n":5,"depth":3,"order":"canonical","empty":16,"nodesPruned":3623,"nodesFull":3623,"ratio":1,"valueMatches":true,"nodesTextbook":608,"ratioTextbook":0.16781672646977644,"textbookValueMatches":true},{"n":5,"depth":2,"order":"shuffled","empty":23,"nodesPruned":530,"nodesFull":530,"ratio":1,"valueMatches":true,"nodesTextbook":76,"ratioTextbook":0.14339622641509434,"textbookValueMatches":true},{"n":5,"depth":2,"order":"canonical","empty":23,"nodesPruned":530,"nodesFull":530,"ratio":1,"valueMatches":true,"nodesTextbook":68,"ratioTextbook":0.12830188679245283,"textbookValueMatches":true},{"n":5,"depth":3,"order":"shuffled","empty":23,"nodesPruned":11156,"nodesFull":11156,"ratio":1,"valueMatches":true,"nodesTextbook":1004,"ratioTextbook":0.08999641448547867,"textbookValueMatches":true},{"n":5,"depth":3,"order":"canonical","empty":23,"nodesPruned":11156,"nodesFull":11156,"ratio":1,"valueMatches":true,"nodesTextbook":937,"ratioTextbook":0.08399067766224454,"textbookValueMatches":true},{"n":5,"depth":2,"order":"shuffled","empty":15,"nodesPruned":226,"nodesFull":226,"ratio":1,"valueMatches":true,"nodesTextbook":107,"ratioTextbook":0.47345132743362833,"textbookValueMatches":true},{"n":5,"depth":2,"order":"canonical","empty":15,"nodesPruned":226,"nodesFull":226,"ratio":1,"valueMatches":true,"nodesTextbook":81,"ratioTextbook":0.3584070796460177,"textbookValueMatches":true},{"n":5,"depth":3,"order":"shuffled","empty":15,"nodesPruned":2972,"nodesFull":2972,"ratio":1,"valueMatches":true,"nodesTextbook":782,"ratioTextbook":0.2631224764468372,"textbookValueMatches":true},{"n":5,"depth":3,"order":"canonical","empty":15,"nodesPruned":2972,"nodesFull":2972,"ratio":1,"valueMatches":true,"nodesTextbook":656,"ratioTextbook":0.22072678331090176,"textbookValueMatches":true},{"n":5,"depth":2,"order":"shuffled","empty":15,"nodesPruned":226,"nodesFull":226,"ratio":1,"valueMatches":true,"nodesTextbook":66,"ratioTextbook":0.2920353982300885,"textbookValueMatches":true},{"n":5,"depth":2,"order":"canonical","empty":15,"nodesPruned":226,"nodesFull":226,"ratio":1,"valueMatches":true,"nodesTextbook":54,"ratioTextbook":0.23893805309734514,"textbookValueMatches":true},{"n":5,"depth":3,"order":"shuffled","empty":15,"nodesPruned":2962,"nodesFull":2962,"ratio":1,"valueMatches":true,"nodesTextbook":647,"ratioTextbook":0.21843349088453748,"textbookValueMatches":true},{"n":5,"depth":3,"order":"canonical","empty":15,"nodesPruned":2962,"nodesFull":2962,"ratio":1,"valueMatches":true,"nodesTextbook":789,"ratioTextbook":0.2663740715732613,"textbookValueMatches":true},{"n":5,"depth":2,"order":"shuffled","empty":20,"nodesPruned":403,"nodesFull":403,"ratio":1,"valueMatches":true,"nodesTextbook":162,"ratioTextbook":0.40198511166253104,"textbookValueMatches":true},{"n":5,"depth":2,"order":"canonical","empty":20,"nodesPruned":403,"nodesFull":403,"ratio":1,"valueMatches":true,"nodesTextbook":269,"ratioTextbook":0.6674937965260546,"textbookValueMatches":true},{"n":5,"depth":3,"order":"shuffled","empty":20,"nodesPruned":7366,"nodesFull":7366,"ratio":1,"valueMatches":true,"nodesTextbook":2493,"ratioTextbook":0.3384469182731469,"textbookValueMatches":true},{"n":5,"depth":3,"order":"canonical","empty":20,"nodesPruned":7366,"nodesFull":7366,"ratio":1,"valueMatches":true,"nodesTextbook":4087,"ratioTextbook":0.5548465924518056,"textbookValueMatches":true},{"n":5,"depth":2,"order":"shuffled","empty":12,"nodesPruned":145,"nodesFull":145,"ratio":1,"valueMatches":true,"nodesTextbook":44,"ratioTextbook":0.30344827586206896,"textbookValueMatches":true},{"n":5,"depth":2,"order":"canonical","empty":12,"nodesPruned":145,"nodesFull":145,"ratio":1,"valueMatches":true,"nodesTextbook":118,"ratioTextbook":0.8137931034482758,"textbookValueMatches":true},{"n":5,"depth":3,"order":"shuffled","empty":12,"nodesPruned":740,"nodesFull":1373,"ratio":0.538965768390386,"valueMatches":true,"nodesTextbook":483,"ratioTextbook":0.35178441369264385,"textbookValueMatches":true},{"n":5,"depth":3,"order":"canonical","empty":12,"nodesPruned":815,"nodesFull":1373,"ratio":0.593590677348871,"valueMatches":true,"nodesTextbook":539,"ratioTextbook":0.39257101238164605,"textbookValueMatches":true},{"n":5,"depth":2,"order":"shuffled","empty":13,"nodesPruned":172,"nodesFull":172,"ratio":1,"valueMatches":true,"nodesTextbook":63,"ratioTextbook":0.36627906976744184,"textbookValueMatches":true},{"n":5,"depth":2,"order":"canonical","empty":13,"nodesPruned":172,"nodesFull":172,"ratio":1,"valueMatches":true,"nodesTextbook":73,"ratioTextbook":0.42441860465116277,"textbookValueMatches":true},{"n":5,"depth":3,"order":"shuffled","empty":13,"nodesPruned":1954,"nodesFull":1954,"ratio":1,"valueMatches":true,"nodesTextbook":425,"ratioTextbook":0.21750255885363357,"textbookValueMatches":true},{"n":5,"depth":3,"order":"canonical","empty":13,"nodesPruned":1954,"nodesFull":1954,"ratio":1,"valueMatches":true,"nodesTextbook":597,"ratioTextbook":0.3055271238485159,"textbookValueMatches":true},{"n":5,"depth":2,"order":"shuffled","empty":20,"nodesPruned":401,"nodesFull":401,"ratio":1,"valueMatches":true,"nodesTextbook":88,"ratioTextbook":0.2194513715710723,"textbookValueMatches":true},{"n":5,"depth":2,"order":"canonical","empty":20,"nodesPruned":401,"nodesFull":401,"ratio":1,"valueMatches":true,"nodesTextbook":59,"ratioTextbook":0.14713216957605985,"textbookValueMatches":true},{"n":5,"depth":3,"order":"shuffled","empty":20,"nodesPruned":7245,"nodesFull":7245,"ratio":1,"valueMatches":true,"nodesTextbook":1071,"ratioTextbook":0.14782608695652175,"textbookValueMatches":true},{"n":5,"depth":3,"order":"canonical","empty":20,"nodesPruned":7245,"nodesFull":7245,"ratio":1,"valueMatches":true,"nodesTextbook":1025,"ratioTextbook":0.1414768806073154,"textbookValueMatches":true},{"n":5,"depth":2,"order":"shuffled","empty":14,"nodesPruned":197,"nodesFull":197,"ratio":1,"valueMatches":true,"nodesTextbook":79,"ratioTextbook":0.4010152284263959,"textbookValueMatches":true},{"n":5,"depth":2,"order":"canonical","empty":14,"nodesPruned":197,"nodesFull":197,"ratio":1,"valueMatches":true,"nodesTextbook":94,"ratioTextbook":0.47715736040609136,"textbookValueMatches":true},{"n":5,"depth":3,"order":"shuffled","empty":14,"nodesPruned":2395,"nodesFull":2395,"ratio":1,"valueMatches":true,"nodesTextbook":747,"ratioTextbook":0.3118997912317328,"textbookValueMatches":true},{"n":5,"depth":3,"order":"canonical","empty":14,"nodesPruned":2395,"nodesFull":2395,"ratio":1,"valueMatches":true,"nodesTextbook":587,"ratioTextbook":0.24509394572025053,"textbookValueMatches":true},{"n":5,"depth":2,"order":"shuffled","empty":23,"nodesPruned":530,"nodesFull":530,"ratio":1,"valueMatches":true,"nodesTextbook":73,"ratioTextbook":0.13773584905660377,"textbookValueMatches":true},{"n":5,"depth":2,"order":"canonical","empty":23,"nodesPruned":530,"nodesFull":530,"ratio":1,"valueMatches":true,"nodesTextbook":68,"ratioTextbook":0.12830188679245283,"textbookValueMatches":true},{"n":5,"depth":3,"order":"shuffled","empty":23,"nodesPruned":11156,"nodesFull":11156,"ratio":1,"valueMatches":true,"nodesTextbook":1010,"ratioTextbook":0.09053424166367874,"textbookValueMatches":true},{"n":5,"depth":3,"order":"canonical","empty":23,"nodesPruned":11156,"nodesFull":11156,"ratio":1,"valueMatches":true,"nodesTextbook":1651,"ratioTextbook":0.14799211186805306,"textbookValueMatches":true},{"n":5,"depth":2,"order":"shuffled","empty":24,"nodesPruned":577,"nodesFull":577,"ratio":1,"valueMatches":true,"nodesTextbook":74,"ratioTextbook":0.12824956672443674,"textbookValueMatches":true},{"n":5,"depth":2,"order":"canonical","empty":24,"nodesPruned":577,"nodesFull":577,"ratio":1,"valueMatches":true,"nodesTextbook":71,"ratioTextbook":0.12305025996533796,"textbookValueMatches":true},{"n":5,"depth":3,"order":"shuffled","empty":24,"nodesPruned":12721,"nodesFull":12721,"ratio":1,"valueMatches":true,"nodesTextbook":792,"ratioTextbook":0.0622592563477714,"textbookValueMatches":true},{"n":5,"depth":3,"order":"canonical","empty":24,"nodesPruned":12721,"nodesFull":12721,"ratio":1,"valueMatches":true,"nodesTextbook":621,"ratioTextbook":0.04881691690904803,"textbookValueMatches":true},{"n":5,"depth":2,"order":"shuffled","empty":17,"nodesPruned":290,"nodesFull":290,"ratio":1,"valueMatches":true,"nodesTextbook":122,"ratioTextbook":0.4206896551724138,"textbookValueMatches":true},{"n":5,"depth":2,"order":"canonical","empty":17,"nodesPruned":290,"nodesFull":290,"ratio":1,"valueMatches":true,"nodesTextbook":174,"ratioTextbook":0.6,"textbookValueMatches":true},{"n":5,"depth":3,"order":"shuffled","empty":17,"nodesPruned":4384,"nodesFull":4384,"ratio":1,"valueMatches":true,"nodesTextbook":1114,"ratioTextbook":0.2541058394160584,"textbookValueMatches":true},{"n":5,"depth":3,"order":"canonical","empty":17,"nodesPruned":4384,"nodesFull":4384,"ratio":1,"valueMatches":true,"nodesTextbook":1731,"ratioTextbook":0.3948448905109489,"textbookValueMatches":true},{"n":5,"depth":2,"order":"shuffled","empty":13,"nodesPruned":172,"nodesFull":172,"ratio":1,"valueMatches":true,"nodesTextbook":75,"ratioTextbook":0.436046511627907,"textbookValueMatches":true},{"n":5,"depth":2,"order":"canonical","empty":13,"nodesPruned":172,"nodesFull":172,"ratio":1,"valueMatches":true,"nodesTextbook":110,"ratioTextbook":0.6395348837209303,"textbookValueMatches":true},{"n":5,"depth":3,"order":"shuffled","empty":13,"nodesPruned":1823,"nodesFull":1823,"ratio":1,"valueMatches":true,"nodesTextbook":711,"ratioTextbook":0.390016456390565,"textbookValueMatches":true},{"n":5,"depth":3,"order":"canonical","empty":13,"nodesPruned":1823,"nodesFull":1823,"ratio":1,"valueMatches":true,"nodesTextbook":798,"ratioTextbook":0.43773998902907296,"textbookValueMatches":true},{"n":5,"depth":2,"order":"shuffled","empty":15,"nodesPruned":226,"nodesFull":226,"ratio":1,"valueMatches":true,"nodesTextbook":82,"ratioTextbook":0.36283185840707965,"textbookValueMatches":true},{"n":5,"depth":2,"order":"canonical","empty":15,"nodesPruned":226,"nodesFull":226,"ratio":1,"valueMatches":true,"nodesTextbook":66,"ratioTextbook":0.2920353982300885,"textbookValueMatches":true},{"n":5,"depth":3,"order":"shuffled","empty":15,"nodesPruned":2960,"nodesFull":2960,"ratio":1,"valueMatches":true,"nodesTextbook":537,"ratioTextbook":0.18141891891891893,"textbookValueMatches":true},{"n":5,"depth":3,"order":"canonical","empty":15,"nodesPruned":2960,"nodesFull":2960,"ratio":1,"valueMatches":true,"nodesTextbook":525,"ratioTextbook":0.17736486486486486,"textbookValueMatches":true},{"n":5,"depth":2,"order":"shuffled","empty":21,"nodesPruned":442,"nodesFull":442,"ratio":1,"valueMatches":true,"nodesTextbook":141,"ratioTextbook":0.3190045248868778,"textbookValueMatches":true},{"n":5,"depth":2,"order":"canonical","empty":21,"nodesPruned":442,"nodesFull":442,"ratio":1,"valueMatches":true,"nodesTextbook":95,"ratioTextbook":0.2149321266968326,"textbookValueMatches":true},{"n":5,"depth":3,"order":"shuffled","empty":21,"nodesPruned":8422,"nodesFull":8422,"ratio":1,"valueMatches":true,"nodesTextbook":1068,"ratioTextbook":0.12681073379244834,"textbookValueMatches":true},{"n":5,"depth":3,"order":"canonical","empty":21,"nodesPruned":8422,"nodesFull":8422,"ratio":1,"valueMatches":true,"nodesTextbook":4106,"ratioTextbook":0.4875326525765851,"textbookValueMatches":true},{"n":5,"depth":2,"order":"shuffled","empty":12,"nodesPruned":145,"nodesFull":145,"ratio":1,"valueMatches":true,"nodesTextbook":54,"ratioTextbook":0.3724137931034483,"textbookValueMatches":true},{"n":5,"depth":2,"order":"canonical","empty":12,"nodesPruned":145,"nodesFull":145,"ratio":1,"valueMatches":true,"nodesTextbook":45,"ratioTextbook":0.3103448275862069,"textbookValueMatches":true},{"n":5,"depth":3,"order":"shuffled","empty":12,"nodesPruned":1475,"nodesFull":1475,"ratio":1,"valueMatches":true,"nodesTextbook":399,"ratioTextbook":0.2705084745762712,"textbookValueMatches":true},{"n":5,"depth":3,"order":"canonical","empty":12,"nodesPruned":1475,"nodesFull":1475,"ratio":1,"valueMatches":true,"nodesTextbook":286,"ratioTextbook":0.19389830508474576,"textbookValueMatches":true},{"n":5,"depth":2,"order":"shuffled","empty":11,"nodesPruned":124,"nodesFull":124,"ratio":1,"valueMatches":true,"nodesTextbook":85,"ratioTextbook":0.6854838709677419,"textbookValueMatches":true},{"n":5,"depth":2,"order":"canonical","empty":11,"nodesPruned":124,"nodesFull":124,"ratio":1,"valueMatches":true,"nodesTextbook":34,"ratioTextbook":0.27419354838709675,"textbookValueMatches":true},{"n":5,"depth":3,"order":"shuffled","empty":11,"nodesPruned":1160,"nodesFull":1160,"ratio":1,"valueMatches":true,"nodesTextbook":266,"ratioTextbook":0.2293103448275862,"textbookValueMatches":true},{"n":5,"depth":3,"order":"canonical","empty":11,"nodesPruned":1160,"nodesFull":1160,"ratio":1,"valueMatches":true,"nodesTextbook":178,"ratioTextbook":0.15344827586206897,"textbookValueMatches":true},{"n":5,"depth":2,"order":"shuffled","empty":21,"nodesPruned":442,"nodesFull":442,"ratio":1,"valueMatches":true,"nodesTextbook":207,"ratioTextbook":0.4683257918552036,"textbookValueMatches":true},{"n":5,"depth":2,"order":"canonical","empty":21,"nodesPruned":442,"nodesFull":442,"ratio":1,"valueMatches":true,"nodesTextbook":324,"ratioTextbook":0.7330316742081447,"textbookValueMatches":true},{"n":5,"depth":3,"order":"shuffled","empty":21,"nodesPruned":8470,"nodesFull":8470,"ratio":1,"valueMatches":true,"nodesTextbook":1819,"ratioTextbook":0.21475796930342386,"textbookValueMatches":true},{"n":5,"depth":3,"order":"canonical","empty":21,"nodesPruned":8470,"nodesFull":8470,"ratio":1,"valueMatches":true,"nodesTextbook":3176,"ratioTextbook":0.37497048406139316,"textbookValueMatches":true},{"n":5,"depth":2,"order":"shuffled","empty":23,"nodesPruned":530,"nodesFull":530,"ratio":1,"valueMatches":true,"nodesTextbook":107,"ratioTextbook":0.2018867924528302,"textbookValueMatches":true},{"n":5,"depth":2,"order":"canonical","empty":23,"nodesPruned":530,"nodesFull":530,"ratio":1,"valueMatches":true,"nodesTextbook":68,"ratioTextbook":0.12830188679245283,"textbookValueMatches":true},{"n":5,"depth":3,"order":"shuffled","empty":23,"nodesPruned":11156,"nodesFull":11156,"ratio":1,"valueMatches":true,"nodesTextbook":966,"ratioTextbook":0.08659017569021155,"textbookValueMatches":true},{"n":5,"depth":3,"order":"canonical","empty":23,"nodesPruned":11156,"nodesFull":11156,"ratio":1,"valueMatches":true,"nodesTextbook":724,"ratioTextbook":0.06489781283614199,"textbookValueMatches":true},{"n":5,"depth":2,"order":"shuffled","empty":22,"nodesPruned":485,"nodesFull":485,"ratio":1,"valueMatches":true,"nodesTextbook":80,"ratioTextbook":0.16494845360824742,"textbookValueMatches":true},{"n":5,"depth":2,"order":"canonical","empty":22,"nodesPruned":485,"nodesFull":485,"ratio":1,"valueMatches":true,"nodesTextbook":65,"ratioTextbook":0.13402061855670103,"textbookValueMatches":true},{"n":5,"depth":3,"order":"shuffled","empty":22,"nodesPruned":9731,"nodesFull":9731,"ratio":1,"valueMatches":true,"nodesTextbook":1163,"ratioTextbook":0.11951495221457199,"textbookValueMatches":true},{"n":5,"depth":3,"order":"canonical","empty":22,"nodesPruned":9731,"nodesFull":9731,"ratio":1,"valueMatches":true,"nodesTextbook":1245,"ratioTextbook":0.12794162984277052,"textbookValueMatches":true},{"n":5,"depth":2,"order":"shuffled","empty":17,"nodesPruned":290,"nodesFull":290,"ratio":1,"valueMatches":true,"nodesTextbook":119,"ratioTextbook":0.4103448275862069,"textbookValueMatches":true},{"n":5,"depth":2,"order":"canonical","empty":17,"nodesPruned":290,"nodesFull":290,"ratio":1,"valueMatches":true,"nodesTextbook":91,"ratioTextbook":0.3137931034482759,"textbookValueMatches":true},{"n":5,"depth":3,"order":"shuffled","empty":17,"nodesPruned":4417,"nodesFull":4417,"ratio":1,"valueMatches":true,"nodesTextbook":875,"ratioTextbook":0.19809825673534073,"textbookValueMatches":true},{"n":5,"depth":3,"order":"canonical","empty":17,"nodesPruned":4417,"nodesFull":4417,"ratio":1,"valueMatches":true,"nodesTextbook":887,"ratioTextbook":0.20081503282771113,"textbookValueMatches":true},{"n":5,"depth":2,"order":"shuffled","empty":18,"nodesPruned":325,"nodesFull":325,"ratio":1,"valueMatches":true,"nodesTextbook":105,"ratioTextbook":0.3230769230769231,"textbookValueMatches":true},{"n":5,"depth":2,"order":"canonical","empty":18,"nodesPruned":325,"nodesFull":325,"ratio":1,"valueMatches":true,"nodesTextbook":265,"ratioTextbook":0.8153846153846154,"textbookValueMatches":true},{"n":5,"depth":3,"order":"shuffled","empty":18,"nodesPruned":5259,"nodesFull":5259,"ratio":1,"valueMatches":true,"nodesTextbook":1208,"ratioTextbook":0.22970146415668377,"textbookValueMatches":true},{"n":5,"depth":3,"order":"canonical","empty":18,"nodesPruned":5259,"nodesFull":5259,"ratio":1,"valueMatches":true,"nodesTextbook":3159,"ratioTextbook":0.6006845407872219,"textbookValueMatches":true},{"n":5,"depth":2,"order":"shuffled","empty":21,"nodesPruned":442,"nodesFull":442,"ratio":1,"valueMatches":true,"nodesTextbook":176,"ratioTextbook":0.39819004524886875,"textbookValueMatches":true},{"n":5,"depth":2,"order":"canonical","empty":21,"nodesPruned":442,"nodesFull":442,"ratio":1,"valueMatches":true,"nodesTextbook":277,"ratioTextbook":0.6266968325791855,"textbookValueMatches":true},{"n":5,"depth":3,"order":"shuffled","empty":21,"nodesPruned":8422,"nodesFull":8422,"ratio":1,"valueMatches":true,"nodesTextbook":1058,"ratioTextbook":0.12562336737117075,"textbookValueMatches":true},{"n":5,"depth":3,"order":"canonical","empty":21,"nodesPruned":8422,"nodesFull":8422,"ratio":1,"valueMatches":true,"nodesTextbook":1710,"ratioTextbook":0.20303965803847068,"textbookValueMatches":true},{"n":5,"depth":2,"order":"shuffled","empty":8,"nodesPruned":67,"nodesFull":67,"ratio":1,"valueMatches":true,"nodesTextbook":31,"ratioTextbook":0.4626865671641791,"textbookValueMatches":true},{"n":5,"depth":2,"order":"canonical","empty":8,"nodesPruned":67,"nodesFull":67,"ratio":1,"valueMatches":true,"nodesTextbook":61,"ratioTextbook":0.9104477611940298,"textbookValueMatches":true},{"n":5,"depth":3,"order":"shuffled","empty":8,"nodesPruned":132,"nodesFull":289,"ratio":0.45674740484429066,"valueMatches":true,"nodesTextbook":84,"ratioTextbook":0.2906574394463668,"textbookValueMatches":true},{"n":5,"depth":3,"order":"canonical","empty":8,"nodesPruned":181,"nodesFull":289,"ratio":0.6262975778546713,"valueMatches":true,"nodesTextbook":117,"ratioTextbook":0.40484429065743943,"textbookValueMatches":true},{"n":5,"depth":2,"order":"shuffled","empty":21,"nodesPruned":442,"nodesFull":442,"ratio":1,"valueMatches":true,"nodesTextbook":124,"ratioTextbook":0.28054298642533937,"textbookValueMatches":true},{"n":5,"depth":2,"order":"canonical","empty":21,"nodesPruned":442,"nodesFull":442,"ratio":1,"valueMatches":true,"nodesTextbook":62,"ratioTextbook":0.14027149321266968,"textbookValueMatches":true},{"n":5,"depth":3,"order":"shuffled","empty":21,"nodesPruned":8432,"nodesFull":8432,"ratio":1,"valueMatches":true,"nodesTextbook":1306,"ratioTextbook":0.15488614800759012,"textbookValueMatches":true},{"n":5,"depth":3,"order":"canonical","empty":21,"nodesPruned":8432,"nodesFull":8432,"ratio":1,"valueMatches":true,"nodesTextbook":918,"ratioTextbook":0.10887096774193548,"textbookValueMatches":true},{"n":5,"depth":2,"order":"shuffled","empty":15,"nodesPruned":226,"nodesFull":226,"ratio":1,"valueMatches":true,"nodesTextbook":134,"ratioTextbook":0.5929203539823009,"textbookValueMatches":true},{"n":5,"depth":2,"order":"canonical","empty":15,"nodesPruned":226,"nodesFull":226,"ratio":1,"valueMatches":true,"nodesTextbook":57,"ratioTextbook":0.252212389380531,"textbookValueMatches":true},{"n":5,"depth":3,"order":"shuffled","empty":15,"nodesPruned":2966,"nodesFull":2966,"ratio":1,"valueMatches":true,"nodesTextbook":638,"ratioTextbook":0.21510451786918408,"textbookValueMatches":true},{"n":5,"depth":3,"order":"canonical","empty":15,"nodesPruned":2966,"nodesFull":2966,"ratio":1,"valueMatches":true,"nodesTextbook":418,"ratioTextbook":0.1409305461901551,"textbookValueMatches":true},{"n":5,"depth":2,"order":"shuffled","empty":18,"nodesPruned":325,"nodesFull":325,"ratio":1,"valueMatches":true,"nodesTextbook":100,"ratioTextbook":0.3076923076923077,"textbookValueMatches":true},{"n":5,"depth":2,"order":"canonical","empty":18,"nodesPruned":325,"nodesFull":325,"ratio":1,"valueMatches":true,"nodesTextbook":53,"ratioTextbook":0.16307692307692306,"textbookValueMatches":true},{"n":5,"depth":3,"order":"shuffled","empty":18,"nodesPruned":5243,"nodesFull":5243,"ratio":1,"valueMatches":true,"nodesTextbook":829,"ratioTextbook":0.1581155826816708,"textbookValueMatches":true},{"n":5,"depth":3,"order":"canonical","empty":18,"nodesPruned":5243,"nodesFull":5243,"ratio":1,"valueMatches":true,"nodesTextbook":733,"ratioTextbook":0.13980545489223728,"textbookValueMatches":true},{"n":5,"depth":2,"order":"shuffled","empty":23,"nodesPruned":530,"nodesFull":530,"ratio":1,"valueMatches":true,"nodesTextbook":123,"ratioTextbook":0.2320754716981132,"textbookValueMatches":true},{"n":5,"depth":2,"order":"canonical","empty":23,"nodesPruned":530,"nodesFull":530,"ratio":1,"valueMatches":true,"nodesTextbook":110,"ratioTextbook":0.20754716981132076,"textbookValueMatches":true},{"n":5,"depth":3,"order":"shuffled","empty":23,"nodesPruned":11156,"nodesFull":11156,"ratio":1,"valueMatches":true,"nodesTextbook":1025,"ratioTextbook":0.09187880960917892,"textbookValueMatches":true},{"n":5,"depth":3,"order":"canonical","empty":23,"nodesPruned":11156,"nodesFull":11156,"ratio":1,"valueMatches":true,"nodesTextbook":1651,"ratioTextbook":0.14799211186805306,"textbookValueMatches":true},{"n":5,"depth":2,"order":"shuffled","empty":17,"nodesPruned":290,"nodesFull":290,"ratio":1,"valueMatches":true,"nodesTextbook":109,"ratioTextbook":0.3758620689655172,"textbookValueMatches":true},{"n":5,"depth":2,"order":"canonical","empty":17,"nodesPruned":290,"nodesFull":290,"ratio":1,"valueMatches":true,"nodesTextbook":50,"ratioTextbook":0.1724137931034483,"textbookValueMatches":true},{"n":5,"depth":3,"order":"shuffled","empty":17,"nodesPruned":4380,"nodesFull":4380,"ratio":1,"valueMatches":true,"nodesTextbook":897,"ratioTextbook":0.2047945205479452,"textbookValueMatches":true},{"n":5,"depth":3,"order":"canonical","empty":17,"nodesPruned":4380,"nodesFull":4380,"ratio":1,"valueMatches":true,"nodesTextbook":369,"ratioTextbook":0.08424657534246575,"textbookValueMatches":true},{"n":5,"depth":2,"order":"shuffled","empty":17,"nodesPruned":292,"nodesFull":292,"ratio":1,"valueMatches":true,"nodesTextbook":146,"ratioTextbook":0.5,"textbookValueMatches":true},{"n":5,"depth":2,"order":"canonical","empty":17,"nodesPruned":292,"nodesFull":292,"ratio":1,"valueMatches":true,"nodesTextbook":114,"ratioTextbook":0.3904109589041096,"textbookValueMatches":true},{"n":5,"depth":3,"order":"shuffled","empty":17,"nodesPruned":4444,"nodesFull":4444,"ratio":1,"valueMatches":true,"nodesTextbook":652,"ratioTextbook":0.1467146714671467,"textbookValueMatches":true},{"n":5,"depth":3,"order":"canonical","empty":17,"nodesPruned":4444,"nodesFull":4444,"ratio":1,"valueMatches":true,"nodesTextbook":788,"ratioTextbook":0.1773177317731773,"textbookValueMatches":true},{"n":5,"depth":2,"order":"shuffled","empty":16,"nodesPruned":259,"nodesFull":259,"ratio":1,"valueMatches":true,"nodesTextbook":144,"ratioTextbook":0.555984555984556,"textbookValueMatches":true},{"n":5,"depth":2,"order":"canonical","empty":16,"nodesPruned":259,"nodesFull":259,"ratio":1,"valueMatches":true,"nodesTextbook":86,"ratioTextbook":0.33204633204633205,"textbookValueMatches":true},{"n":5,"depth":3,"order":"shuffled","empty":16,"nodesPruned":3693,"nodesFull":3693,"ratio":1,"valueMatches":true,"nodesTextbook":714,"ratioTextbook":0.1933387489845654,"textbookValueMatches":true},{"n":5,"depth":3,"order":"canonical","empty":16,"nodesPruned":3693,"nodesFull":3693,"ratio":1,"valueMatches":true,"nodesTextbook":630,"ratioTextbook":0.17059301380991065,"textbookValueMatches":true},{"n":5,"depth":2,"order":"shuffled","empty":15,"nodesPruned":226,"nodesFull":226,"ratio":1,"valueMatches":true,"nodesTextbook":104,"ratioTextbook":0.46017699115044247,"textbookValueMatches":true},{"n":5,"depth":2,"order":"canonical","empty":15,"nodesPruned":226,"nodesFull":226,"ratio":1,"valueMatches":true,"nodesTextbook":98,"ratioTextbook":0.4336283185840708,"textbookValueMatches":true},{"n":5,"depth":3,"order":"shuffled","empty":15,"nodesPruned":2960,"nodesFull":2960,"ratio":1,"valueMatches":true,"nodesTextbook":784,"ratioTextbook":0.2648648648648649,"textbookValueMatches":true},{"n":5,"depth":3,"order":"canonical","empty":15,"nodesPruned":2960,"nodesFull":2960,"ratio":1,"valueMatches":true,"nodesTextbook":1077,"ratioTextbook":0.3638513513513513,"textbookValueMatches":true},{"n":5,"depth":2,"order":"shuffled","empty":16,"nodesPruned":257,"nodesFull":257,"ratio":1,"valueMatches":true,"nodesTextbook":111,"ratioTextbook":0.43190661478599224,"textbookValueMatches":true},{"n":5,"depth":2,"order":"canonical","empty":16,"nodesPruned":257,"nodesFull":257,"ratio":1,"valueMatches":true,"nodesTextbook":101,"ratioTextbook":0.39299610894941633,"textbookValueMatches":true},{"n":5,"depth":3,"order":"shuffled","empty":16,"nodesPruned":1132,"nodesFull":3201,"ratio":0.3536394876601062,"valueMatches":true,"nodesTextbook":624,"ratioTextbook":0.1949390815370197,"textbookValueMatches":true},{"n":5,"depth":3,"order":"canonical","empty":16,"nodesPruned":2300,"nodesFull":3201,"ratio":0.718525460793502,"valueMatches":true,"nodesTextbook":845,"ratioTextbook":0.26398000624804746,"textbookValueMatches":true},{"n":5,"depth":2,"order":"shuffled","empty":12,"nodesPruned":145,"nodesFull":145,"ratio":1,"valueMatches":true,"nodesTextbook":49,"ratioTextbook":0.33793103448275863,"textbookValueMatches":true},{"n":5,"depth":2,"order":"canonical","empty":12,"nodesPruned":145,"nodesFull":145,"ratio":1,"valueMatches":true,"nodesTextbook":92,"ratioTextbook":0.6344827586206897,"textbookValueMatches":true},{"n":5,"depth":3,"order":"shuffled","empty":12,"nodesPruned":1496,"nodesFull":1496,"ratio":1,"valueMatches":true,"nodesTextbook":503,"ratioTextbook":0.3362299465240642,"textbookValueMatches":true},{"n":5,"depth":3,"order":"canonical","empty":12,"nodesPruned":1496,"nodesFull":1496,"ratio":1,"valueMatches":true,"nodesTextbook":869,"ratioTextbook":0.5808823529411765,"textbookValueMatches":true},{"n":5,"depth":2,"order":"shuffled","empty":21,"nodesPruned":442,"nodesFull":442,"ratio":1,"valueMatches":true,"nodesTextbook":81,"ratioTextbook":0.1832579185520362,"textbookValueMatches":true},{"n":5,"depth":2,"order":"canonical","empty":21,"nodesPruned":442,"nodesFull":442,"ratio":1,"valueMatches":true,"nodesTextbook":62,"ratioTextbook":0.14027149321266968,"textbookValueMatches":true},{"n":5,"depth":3,"order":"shuffled","empty":21,"nodesPruned":8422,"nodesFull":8422,"ratio":1,"valueMatches":true,"nodesTextbook":904,"ratioTextbook":0.1073379244834956,"textbookValueMatches":true},{"n":5,"depth":3,"order":"canonical","empty":21,"nodesPruned":8422,"nodesFull":8422,"ratio":1,"valueMatches":true,"nodesTextbook":518,"ratioTextbook":0.061505580622180006,"textbookValueMatches":true},{"n":5,"depth":2,"order":"shuffled","empty":19,"nodesPruned":362,"nodesFull":362,"ratio":1,"valueMatches":true,"nodesTextbook":131,"ratioTextbook":0.36187845303867405,"textbookValueMatches":true},{"n":5,"depth":2,"order":"canonical","empty":19,"nodesPruned":362,"nodesFull":362,"ratio":1,"valueMatches":true,"nodesTextbook":163,"ratioTextbook":0.45027624309392267,"textbookValueMatches":true},{"n":5,"depth":3,"order":"shuffled","empty":19,"nodesPruned":6176,"nodesFull":6176,"ratio":1,"valueMatches":true,"nodesTextbook":1224,"ratioTextbook":0.19818652849740934,"textbookValueMatches":true},{"n":5,"depth":3,"order":"canonical","empty":19,"nodesPruned":6176,"nodesFull":6176,"ratio":1,"valueMatches":true,"nodesTextbook":2073,"ratioTextbook":0.33565414507772023,"textbookValueMatches":true},{"n":6,"depth":2,"order":"shuffled","empty":32,"nodesPruned":1025,"nodesFull":1025,"ratio":1,"valueMatches":true,"nodesTextbook":127,"ratioTextbook":0.12390243902439024,"textbookValueMatches":true},{"n":6,"depth":2,"order":"canonical","empty":32,"nodesPruned":1025,"nodesFull":1025,"ratio":1,"valueMatches":true,"nodesTextbook":125,"ratioTextbook":0.12195121951219512,"textbookValueMatches":true},{"n":6,"depth":3,"order":"shuffled","empty":32,"nodesPruned":30785,"nodesFull":30785,"ratio":1,"valueMatches":true,"nodesTextbook":3259,"ratioTextbook":0.10586324508689297,"textbookValueMatches":true},{"n":6,"depth":3,"order":"canonical","empty":32,"nodesPruned":30785,"nodesFull":30785,"ratio":1,"valueMatches":true,"nodesTextbook":1207,"ratioTextbook":0.03920740620432028,"textbookValueMatches":true},{"n":6,"depth":2,"order":"shuffled","empty":29,"nodesPruned":842,"nodesFull":842,"ratio":1,"valueMatches":true,"nodesTextbook":88,"ratioTextbook":0.10451306413301663,"textbookValueMatches":true},{"n":6,"depth":2,"order":"canonical","empty":29,"nodesPruned":842,"nodesFull":842,"ratio":1,"valueMatches":true,"nodesTextbook":113,"ratioTextbook":0.1342042755344418,"textbookValueMatches":true},{"n":6,"depth":3,"order":"shuffled","empty":29,"nodesPruned":22772,"nodesFull":22772,"ratio":1,"valueMatches":true,"nodesTextbook":2703,"ratioTextbook":0.11869840154575795,"textbookValueMatches":true},{"n":6,"depth":3,"order":"canonical","empty":29,"nodesPruned":22772,"nodesFull":22772,"ratio":1,"valueMatches":true,"nodesTextbook":1431,"ratioTextbook":0.06284033023010716,"textbookValueMatches":true},{"n":6,"depth":2,"order":"shuffled","empty":29,"nodesPruned":842,"nodesFull":842,"ratio":1,"valueMatches":true,"nodesTextbook":312,"ratioTextbook":0.37054631828978624,"textbookValueMatches":true},{"n":6,"depth":2,"order":"canonical","empty":29,"nodesPruned":842,"nodesFull":842,"ratio":1,"valueMatches":true,"nodesTextbook":141,"ratioTextbook":0.167458432304038,"textbookValueMatches":true},{"n":6,"depth":3,"order":"shuffled","empty":29,"nodesPruned":22766,"nodesFull":22766,"ratio":1,"valueMatches":true,"nodesTextbook":3658,"ratioTextbook":0.16067820433980498,"textbookValueMatches":true},{"n":6,"depth":3,"order":"canonical","empty":29,"nodesPruned":22766,"nodesFull":22766,"ratio":1,"valueMatches":true,"nodesTextbook":1355,"ratioTextbook":0.05951858033910217,"textbookValueMatches":true},{"n":6,"depth":2,"order":"shuffled","empty":25,"nodesPruned":626,"nodesFull":626,"ratio":1,"valueMatches":true,"nodesTextbook":156,"ratioTextbook":0.24920127795527156,"textbookValueMatches":true},{"n":6,"depth":2,"order":"canonical","empty":25,"nodesPruned":626,"nodesFull":626,"ratio":1,"valueMatches":true,"nodesTextbook":168,"ratioTextbook":0.268370607028754,"textbookValueMatches":true},{"n":6,"depth":3,"order":"shuffled","empty":25,"nodesPruned":14440,"nodesFull":14440,"ratio":1,"valueMatches":true,"nodesTextbook":1742,"ratioTextbook":0.1206371191135734,"textbookValueMatches":true},{"n":6,"depth":3,"order":"canonical","empty":25,"nodesPruned":14440,"nodesFull":14440,"ratio":1,"valueMatches":true,"nodesTextbook":1576,"ratioTextbook":0.10914127423822714,"textbookValueMatches":true},{"n":6,"depth":2,"order":"shuffled","empty":27,"nodesPruned":730,"nodesFull":730,"ratio":1,"valueMatches":true,"nodesTextbook":238,"ratioTextbook":0.32602739726027397,"textbookValueMatches":true},{"n":6,"depth":2,"order":"canonical","empty":27,"nodesPruned":730,"nodesFull":730,"ratio":1,"valueMatches":true,"nodesTextbook":187,"ratioTextbook":0.25616438356164384,"textbookValueMatches":true},{"n":6,"depth":3,"order":"shuffled","empty":27,"nodesPruned":18288,"nodesFull":18288,"ratio":1,"valueMatches":true,"nodesTextbook":2288,"ratioTextbook":0.12510936132983377,"textbookValueMatches":true},{"n":6,"depth":3,"order":"canonical","empty":27,"nodesPruned":18288,"nodesFull":18288,"ratio":1,"valueMatches":true,"nodesTextbook":1112,"ratioTextbook":0.06080489938757655,"textbookValueMatches":true},{"n":6,"depth":2,"order":"shuffled","empty":22,"nodesPruned":398,"nodesFull":466,"ratio":0.8540772532188842,"valueMatches":true,"nodesTextbook":167,"ratioTextbook":0.3583690987124464,"textbookValueMatches":true},{"n":6,"depth":2,"order":"canonical","empty":22,"nodesPruned":24,"nodesFull":466,"ratio":0.05150214592274678,"valueMatches":true,"nodesTextbook":24,"ratioTextbook":0.05150214592274678,"textbookValueMatches":true},{"n":6,"depth":3,"order":"shuffled","empty":22,"nodesPruned":2220,"nodesFull":9424,"ratio":0.23556876061120544,"valueMatches":true,"nodesTextbook":558,"ratioTextbook":0.05921052631578947,"textbookValueMatches":true},{"n":6,"depth":3,"order":"canonical","empty":22,"nodesPruned":446,"nodesFull":9424,"ratio":0.04732597623089983,"valueMatches":true,"nodesTextbook":92,"ratioTextbook":0.009762308998302207,"textbookValueMatches":true},{"n":6,"depth":2,"order":"shuffled","empty":15,"nodesPruned":226,"nodesFull":226,"ratio":1,"valueMatches":true,"nodesTextbook":85,"ratioTextbook":0.37610619469026546,"textbookValueMatches":true},{"n":6,"depth":2,"order":"canonical","empty":15,"nodesPruned":226,"nodesFull":226,"ratio":1,"valueMatches":true,"nodesTextbook":100,"ratioTextbook":0.4424778761061947,"textbookValueMatches":true},{"n":6,"depth":3,"order":"shuffled","empty":15,"nodesPruned":3004,"nodesFull":3004,"ratio":1,"valueMatches":true,"nodesTextbook":790,"ratioTextbook":0.262982689747004,"textbookValueMatches":true},{"n":6,"depth":3,"order":"canonical","empty":15,"nodesPruned":3004,"nodesFull":3004,"ratio":1,"valueMatches":true,"nodesTextbook":632,"ratioTextbook":0.2103861517976032,"textbookValueMatches":true},{"n":6,"depth":2,"order":"shuffled","empty":22,"nodesPruned":485,"nodesFull":485,"ratio":1,"valueMatches":true,"nodesTextbook":238,"ratioTextbook":0.49072164948453606,"textbookValueMatches":true},{"n":6,"depth":2,"order":"canonical","empty":22,"nodesPruned":485,"nodesFull":485,"ratio":1,"valueMatches":true,"nodesTextbook":127,"ratioTextbook":0.2618556701030928,"textbookValueMatches":true},{"n":6,"depth":3,"order":"shuffled","empty":22,"nodesPruned":9771,"nodesFull":9771,"ratio":1,"valueMatches":true,"nodesTextbook":2718,"ratioTextbook":0.27817009517961316,"textbookValueMatches":true},{"n":6,"depth":3,"order":"canonical","empty":22,"nodesPruned":9771,"nodesFull":9771,"ratio":1,"valueMatches":true,"nodesTextbook":1225,"ratioTextbook":0.12537099580390954,"textbookValueMatches":true},{"n":6,"depth":2,"order":"shuffled","empty":19,"nodesPruned":362,"nodesFull":362,"ratio":1,"valueMatches":true,"nodesTextbook":173,"ratioTextbook":0.47790055248618785,"textbookValueMatches":true},{"n":6,"depth":2,"order":"canonical","empty":19,"nodesPruned":362,"nodesFull":362,"ratio":1,"valueMatches":true,"nodesTextbook":232,"ratioTextbook":0.6408839779005525,"textbookValueMatches":true},{"n":6,"depth":3,"order":"shuffled","empty":19,"nodesPruned":2343,"nodesFull":5568,"ratio":0.4207974137931034,"valueMatches":true,"nodesTextbook":1083,"ratioTextbook":0.1945043103448276,"textbookValueMatches":true},{"n":6,"depth":3,"order":"canonical","empty":19,"nodesPruned":705,"nodesFull":5568,"ratio":0.12661637931034483,"valueMatches":true,"nodesTextbook":480,"ratioTextbook":0.08620689655172414,"textbookValueMatches":true},{"n":6,"depth":2,"order":"shuffled","empty":29,"nodesPruned":842,"nodesFull":842,"ratio":1,"valueMatches":true,"nodesTextbook":139,"ratioTextbook":0.16508313539192399,"textbookValueMatches":true},{"n":6,"depth":2,"order":"canonical","empty":29,"nodesPruned":842,"nodesFull":842,"ratio":1,"valueMatches":true,"nodesTextbook":105,"ratioTextbook":0.12470308788598575,"textbookValueMatches":true},{"n":6,"depth":3,"order":"shuffled","empty":29,"nodesPruned":22774,"nodesFull":22774,"ratio":1,"valueMatches":true,"nodesTextbook":1878,"ratioTextbook":0.08246245718802143,"textbookValueMatches":true},{"n":6,"depth":3,"order":"canonical","empty":29,"nodesPruned":22774,"nodesFull":22774,"ratio":1,"valueMatches":true,"nodesTextbook":1861,"ratioTextbook":0.08171599192061123,"textbookValueMatches":true},{"n":6,"depth":2,"order":"shuffled","empty":18,"nodesPruned":325,"nodesFull":325,"ratio":1,"valueMatches":true,"nodesTextbook":144,"ratioTextbook":0.4430769230769231,"textbookValueMatches":true},{"n":6,"depth":2,"order":"canonical","empty":18,"nodesPruned":325,"nodesFull":325,"ratio":1,"valueMatches":true,"nodesTextbook":230,"ratioTextbook":0.7076923076923077,"textbookValueMatches":true},{"n":6,"depth":3,"order":"shuffled","empty":18,"nodesPruned":5229,"nodesFull":5229,"ratio":1,"valueMatches":true,"nodesTextbook":1368,"ratioTextbook":0.26161790017211706,"textbookValueMatches":true},{"n":6,"depth":3,"order":"canonical","empty":18,"nodesPruned":5229,"nodesFull":5229,"ratio":1,"valueMatches":true,"nodesTextbook":1497,"ratioTextbook":0.2862880091795754,"textbookValueMatches":true},{"n":6,"depth":2,"order":"shuffled","empty":33,"nodesPruned":1090,"nodesFull":1090,"ratio":1,"valueMatches":true,"nodesTextbook":466,"ratioTextbook":0.42752293577981654,"textbookValueMatches":true},{"n":6,"depth":2,"order":"canonical","empty":33,"nodesPruned":1090,"nodesFull":1090,"ratio":1,"valueMatches":true,"nodesTextbook":908,"ratioTextbook":0.8330275229357799,"textbookValueMatches":true},{"n":6,"depth":3,"order":"shuffled","empty":33,"nodesPruned":33826,"nodesFull":33826,"ratio":1,"valueMatches":true,"nodesTextbook":6589,"ratioTextbook":0.19479098917992077,"textbookValueMatches":true},{"n":6,"depth":3,"order":"canonical","empty":33,"nodesPruned":33826,"nodesFull":33826,"ratio":1,"valueMatches":true,"nodesTextbook":15273,"ratioTextbook":0.45151658487553953,"textbookValueMatches":true},{"n":6,"depth":2,"order":"shuffled","empty":35,"nodesPruned":1226,"nodesFull":1226,"ratio":1,"valueMatches":true,"nodesTextbook":117,"ratioTextbook":0.09543230016313213,"textbookValueMatches":true},{"n":6,"depth":2,"order":"canonical","empty":35,"nodesPruned":1226,"nodesFull":1226,"ratio":1,"valueMatches":true,"nodesTextbook":104,"ratioTextbook":0.08482871125611746,"textbookValueMatches":true},{"n":6,"depth":3,"order":"shuffled","empty":35,"nodesPruned":40496,"nodesFull":40496,"ratio":1,"valueMatches":true,"nodesTextbook":1935,"ratioTextbook":0.04778249703674437,"textbookValueMatches":true},{"n":6,"depth":3,"order":"canonical","empty":35,"nodesPruned":40496,"nodesFull":40496,"ratio":1,"valueMatches":true,"nodesTextbook":1324,"ratioTextbook":0.032694587119715526,"textbookValueMatches":true},{"n":6,"depth":2,"order":"shuffled","empty":24,"nodesPruned":579,"nodesFull":579,"ratio":1,"valueMatches":true,"nodesTextbook":203,"ratioTextbook":0.35060449050086356,"textbookValueMatches":true},{"n":6,"depth":2,"order":"canonical","empty":24,"nodesPruned":579,"nodesFull":579,"ratio":1,"valueMatches":true,"nodesTextbook":198,"ratioTextbook":0.34196891191709844,"textbookValueMatches":true},{"n":6,"depth":3,"order":"shuffled","empty":24,"nodesPruned":12827,"nodesFull":12827,"ratio":1,"valueMatches":true,"nodesTextbook":2169,"ratioTextbook":0.1690964372027754,"textbookValueMatches":true},{"n":6,"depth":3,"order":"canonical","empty":24,"nodesPruned":12827,"nodesFull":12827,"ratio":1,"valueMatches":true,"nodesTextbook":3201,"ratioTextbook":0.24955172682622592,"textbookValueMatches":true},{"n":6,"depth":2,"order":"shuffled","empty":30,"nodesPruned":901,"nodesFull":901,"ratio":1,"valueMatches":true,"nodesTextbook":244,"ratioTextbook":0.27081021087680357,"textbookValueMatches":true},{"n":6,"depth":2,"order":"canonical","empty":30,"nodesPruned":901,"nodesFull":901,"ratio":1,"valueMatches":true,"nodesTextbook":104,"ratioTextbook":0.11542730299667037,"textbookValueMatches":true},{"n":6,"depth":3,"order":"shuffled","empty":30,"nodesPruned":25267,"nodesFull":25267,"ratio":1,"valueMatches":true,"nodesTextbook":2439,"ratioTextbook":0.0965290695373412,"textbookValueMatches":true},{"n":6,"depth":3,"order":"canonical","empty":30,"nodesPruned":25267,"nodesFull":25267,"ratio":1,"valueMatches":true,"nodesTextbook":1455,"ratioTextbook":0.05758499228242372,"textbookValueMatches":true},{"n":6,"depth":2,"order":"shuffled","empty":15,"nodesPruned":226,"nodesFull":226,"ratio":1,"valueMatches":true,"nodesTextbook":81,"ratioTextbook":0.3584070796460177,"textbookValueMatches":true},{"n":6,"depth":2,"order":"canonical","empty":15,"nodesPruned":226,"nodesFull":226,"ratio":1,"valueMatches":true,"nodesTextbook":72,"ratioTextbook":0.3185840707964602,"textbookValueMatches":true},{"n":6,"depth":3,"order":"shuffled","empty":15,"nodesPruned":2972,"nodesFull":2972,"ratio":1,"valueMatches":true,"nodesTextbook":736,"ratioTextbook":0.24764468371467024,"textbookValueMatches":true},{"n":6,"depth":3,"order":"canonical","empty":15,"nodesPruned":2972,"nodesFull":2972,"ratio":1,"valueMatches":true,"nodesTextbook":417,"ratioTextbook":0.14030955585464333,"textbookValueMatches":true},{"n":6,"depth":2,"order":"shuffled","empty":14,"nodesPruned":203,"nodesFull":203,"ratio":1,"valueMatches":true,"nodesTextbook":85,"ratioTextbook":0.4187192118226601,"textbookValueMatches":true},{"n":6,"depth":2,"order":"canonical","empty":14,"nodesPruned":203,"nodesFull":203,"ratio":1,"valueMatches":true,"nodesTextbook":87,"ratioTextbook":0.42857142857142855,"textbookValueMatches":true},{"n":6,"depth":3,"order":"shuffled","empty":14,"nodesPruned":2439,"nodesFull":2439,"ratio":1,"valueMatches":true,"nodesTextbook":742,"ratioTextbook":0.3042230422304223,"textbookValueMatches":true},{"n":6,"depth":3,"order":"canonical","empty":14,"nodesPruned":2439,"nodesFull":2439,"ratio":1,"valueMatches":true,"nodesTextbook":301,"ratioTextbook":0.12341123411234112,"textbookValueMatches":true},{"n":6,"depth":2,"order":"shuffled","empty":18,"nodesPruned":325,"nodesFull":325,"ratio":1,"valueMatches":true,"nodesTextbook":134,"ratioTextbook":0.4123076923076923,"textbookValueMatches":true},{"n":6,"depth":2,"order":"canonical","empty":18,"nodesPruned":325,"nodesFull":325,"ratio":1,"valueMatches":true,"nodesTextbook":138,"ratioTextbook":0.4246153846153846,"textbookValueMatches":true},{"n":6,"depth":3,"order":"shuffled","empty":18,"nodesPruned":5241,"nodesFull":5241,"ratio":1,"valueMatches":true,"nodesTextbook":1032,"ratioTextbook":0.19690898683457356,"textbookValueMatches":true},{"n":6,"depth":3,"order":"canonical","empty":18,"nodesPruned":5241,"nodesFull":5241,"ratio":1,"valueMatches":true,"nodesTextbook":1298,"ratioTextbook":0.2476626597977485,"textbookValueMatches":true},{"n":6,"depth":2,"order":"shuffled","empty":22,"nodesPruned":485,"nodesFull":485,"ratio":1,"valueMatches":true,"nodesTextbook":204,"ratioTextbook":0.42061855670103093,"textbookValueMatches":true},{"n":6,"depth":2,"order":"canonical","empty":22,"nodesPruned":485,"nodesFull":485,"ratio":1,"valueMatches":true,"nodesTextbook":85,"ratioTextbook":0.17525773195876287,"textbookValueMatches":true},{"n":6,"depth":3,"order":"shuffled","empty":22,"nodesPruned":9745,"nodesFull":9745,"ratio":1,"valueMatches":true,"nodesTextbook":1475,"ratioTextbook":0.15135967162647512,"textbookValueMatches":true},{"n":6,"depth":3,"order":"canonical","empty":22,"nodesPruned":9745,"nodesFull":9745,"ratio":1,"valueMatches":true,"nodesTextbook":941,"ratioTextbook":0.09656233966136481,"textbookValueMatches":true},{"n":6,"depth":2,"order":"shuffled","empty":13,"nodesPruned":170,"nodesFull":170,"ratio":1,"valueMatches":true,"nodesTextbook":72,"ratioTextbook":0.4235294117647059,"textbookValueMatches":true},{"n":6,"depth":2,"order":"canonical","empty":13,"nodesPruned":170,"nodesFull":170,"ratio":1,"valueMatches":true,"nodesTextbook":49,"ratioTextbook":0.28823529411764703,"textbookValueMatches":true},{"n":6,"depth":3,"order":"shuffled","empty":13,"nodesPruned":1931,"nodesFull":1931,"ratio":1,"valueMatches":true,"nodesTextbook":505,"ratioTextbook":0.2615225271879855,"textbookValueMatches":true},{"n":6,"depth":3,"order":"canonical","empty":13,"nodesPruned":1931,"nodesFull":1931,"ratio":1,"valueMatches":true,"nodesTextbook":235,"ratioTextbook":0.12169860176074573,"textbookValueMatches":true},{"n":6,"depth":2,"order":"shuffled","empty":23,"nodesPruned":530,"nodesFull":530,"ratio":1,"valueMatches":true,"nodesTextbook":138,"ratioTextbook":0.26037735849056604,"textbookValueMatches":true},{"n":6,"depth":2,"order":"canonical","empty":23,"nodesPruned":530,"nodesFull":530,"ratio":1,"valueMatches":true,"nodesTextbook":210,"ratioTextbook":0.39622641509433965,"textbookValueMatches":true},{"n":6,"depth":3,"order":"shuffled","empty":23,"nodesPruned":11166,"nodesFull":11166,"ratio":1,"valueMatches":true,"nodesTextbook":1803,"ratioTextbook":0.161472326706072,"textbookValueMatches":true},{"n":6,"depth":3,"order":"canonical","empty":23,"nodesPruned":11166,"nodesFull":11166,"ratio":1,"valueMatches":true,"nodesTextbook":2685,"ratioTextbook":0.24046211714132187,"textbookValueMatches":true},{"n":6,"depth":2,"order":"shuffled","empty":18,"nodesPruned":331,"nodesFull":331,"ratio":1,"valueMatches":true,"nodesTextbook":183,"ratioTextbook":0.552870090634441,"textbookValueMatches":true},{"n":6,"depth":2,"order":"canonical","empty":18,"nodesPruned":331,"nodesFull":331,"ratio":1,"valueMatches":true,"nodesTextbook":119,"ratioTextbook":0.3595166163141994,"textbookValueMatches":true},{"n":6,"depth":3,"order":"shuffled","empty":18,"nodesPruned":5453,"nodesFull":5453,"ratio":1,"valueMatches":true,"nodesTextbook":1464,"ratioTextbook":0.2684760682193288,"textbookValueMatches":true},{"n":6,"depth":3,"order":"canonical","empty":18,"nodesPruned":5453,"nodesFull":5453,"ratio":1,"valueMatches":true,"nodesTextbook":768,"ratioTextbook":0.1408399046396479,"textbookValueMatches":true},{"n":6,"depth":2,"order":"shuffled","empty":25,"nodesPruned":626,"nodesFull":626,"ratio":1,"valueMatches":true,"nodesTextbook":177,"ratioTextbook":0.2827476038338658,"textbookValueMatches":true},{"n":6,"depth":2,"order":"canonical","empty":25,"nodesPruned":626,"nodesFull":626,"ratio":1,"valueMatches":true,"nodesTextbook":209,"ratioTextbook":0.33386581469648563,"textbookValueMatches":true},{"n":6,"depth":3,"order":"shuffled","empty":25,"nodesPruned":14430,"nodesFull":14430,"ratio":1,"valueMatches":true,"nodesTextbook":2100,"ratioTextbook":0.14553014553014554,"textbookValueMatches":true},{"n":6,"depth":3,"order":"canonical","empty":25,"nodesPruned":14430,"nodesFull":14430,"ratio":1,"valueMatches":true,"nodesTextbook":3099,"ratioTextbook":0.21476091476091477,"textbookValueMatches":true},{"n":6,"depth":2,"order":"shuffled","empty":12,"nodesPruned":54,"nodesFull":127,"ratio":0.4251968503937008,"valueMatches":true,"nodesTextbook":54,"ratioTextbook":0.4251968503937008,"textbookValueMatches":true},{"n":6,"depth":2,"order":"canonical","empty":12,"nodesPruned":26,"nodesFull":127,"ratio":0.2047244094488189,"valueMatches":true,"nodesTextbook":16,"ratioTextbook":0.12598425196850394,"textbookValueMatches":true},{"n":6,"depth":3,"order":"shuffled","empty":12,"nodesPruned":956,"nodesFull":1323,"ratio":0.7226001511715797,"valueMatches":true,"nodesTextbook":339,"ratioTextbook":0.2562358276643991,"textbookValueMatches":true},{"n":6,"depth":3,"order":"canonical","empty":12,"nodesPruned":248,"nodesFull":1323,"ratio":0.1874527588813303,"valueMatches":true,"nodesTextbook":71,"ratioTextbook":0.05366591080876795,"textbookValueMatches":true},{"n":6,"depth":2,"order":"shuffled","empty":31,"nodesPruned":962,"nodesFull":962,"ratio":1,"valueMatches":true,"nodesTextbook":164,"ratioTextbook":0.1704781704781705,"textbookValueMatches":true},{"n":6,"depth":2,"order":"canonical","empty":31,"nodesPruned":962,"nodesFull":962,"ratio":1,"valueMatches":true,"nodesTextbook":121,"ratioTextbook":0.1257796257796258,"textbookValueMatches":true},{"n":6,"depth":3,"order":"shuffled","empty":31,"nodesPruned":27932,"nodesFull":27932,"ratio":1,"valueMatches":true,"nodesTextbook":3526,"ratioTextbook":0.1262351424889016,"textbookValueMatches":true},{"n":6,"depth":3,"order":"canonical","empty":31,"nodesPruned":27932,"nodesFull":27932,"ratio":1,"valueMatches":true,"nodesTextbook":7890,"ratioTextbook":0.28247171702706575,"textbookValueMatches":true},{"n":6,"depth":2,"order":"shuffled","empty":17,"nodesPruned":274,"nodesFull":274,"ratio":1,"valueMatches":true,"nodesTextbook":45,"ratioTextbook":0.16423357664233576,"textbookValueMatches":true},{"n":6,"depth":2,"order":"canonical","empty":17,"nodesPruned":274,"nodesFull":274,"ratio":1,"valueMatches":true,"nodesTextbook":131,"ratioTextbook":0.4781021897810219,"textbookValueMatches":true},{"n":6,"depth":3,"order":"shuffled","empty":17,"nodesPruned":4178,"nodesFull":4178,"ratio":1,"valueMatches":true,"nodesTextbook":985,"ratioTextbook":0.23575873623743418,"textbookValueMatches":true},{"n":6,"depth":3,"order":"canonical","empty":17,"nodesPruned":4178,"nodesFull":4178,"ratio":1,"valueMatches":true,"nodesTextbook":1547,"ratioTextbook":0.3702728578267113,"textbookValueMatches":true},{"n":6,"depth":2,"order":"shuffled","empty":25,"nodesPruned":626,"nodesFull":626,"ratio":1,"valueMatches":true,"nodesTextbook":227,"ratioTextbook":0.36261980830670926,"textbookValueMatches":true},{"n":6,"depth":2,"order":"canonical","empty":25,"nodesPruned":626,"nodesFull":626,"ratio":1,"valueMatches":true,"nodesTextbook":258,"ratioTextbook":0.41214057507987223,"textbookValueMatches":true},{"n":6,"depth":3,"order":"shuffled","empty":25,"nodesPruned":14428,"nodesFull":14428,"ratio":1,"valueMatches":true,"nodesTextbook":2491,"ratioTextbook":0.17265040199611867,"textbookValueMatches":true},{"n":6,"depth":3,"order":"canonical","empty":25,"nodesPruned":14428,"nodesFull":14428,"ratio":1,"valueMatches":true,"nodesTextbook":2227,"ratioTextbook":0.1543526476296091,"textbookValueMatches":true},{"n":6,"depth":2,"order":"shuffled","empty":20,"nodesPruned":403,"nodesFull":403,"ratio":1,"valueMatches":true,"nodesTextbook":243,"ratioTextbook":0.6029776674937966,"textbookValueMatches":true},{"n":6,"depth":2,"order":"canonical","empty":20,"nodesPruned":403,"nodesFull":403,"ratio":1,"valueMatches":true,"nodesTextbook":137,"ratioTextbook":0.3399503722084367,"textbookValueMatches":true},{"n":6,"depth":3,"order":"shuffled","empty":20,"nodesPruned":7379,"nodesFull":7379,"ratio":1,"valueMatches":true,"nodesTextbook":1864,"ratioTextbook":0.2526087545737905,"textbookValueMatches":true},{"n":6,"depth":3,"order":"canonical","empty":20,"nodesPruned":7379,"nodesFull":7379,"ratio":1,"valueMatches":true,"nodesTextbook":1164,"ratioTextbook":0.15774495189050006,"textbookValueMatches":true},{"n":6,"depth":2,"order":"shuffled","empty":17,"nodesPruned":290,"nodesFull":290,"ratio":1,"valueMatches":true,"nodesTextbook":85,"ratioTextbook":0.29310344827586204,"textbookValueMatches":true},{"n":6,"depth":2,"order":"canonical","empty":17,"nodesPruned":290,"nodesFull":290,"ratio":1,"valueMatches":true,"nodesTextbook":132,"ratioTextbook":0.45517241379310347,"textbookValueMatches":true},{"n":6,"depth":3,"order":"shuffled","empty":17,"nodesPruned":2412,"nodesFull":4204,"ratio":0.5737392959086585,"valueMatches":true,"nodesTextbook":1383,"ratioTextbook":0.32897240723120835,"textbookValueMatches":true},{"n":6,"depth":3,"order":"canonical","empty":17,"nodesPruned":2972,"nodesFull":4204,"ratio":0.7069457659372027,"valueMatches":true,"nodesTextbook":1726,"ratioTextbook":0.4105613701236917,"textbookValueMatches":true},{"n":6,"depth":2,"order":"shuffled","empty":26,"nodesPruned":677,"nodesFull":677,"ratio":1,"valueMatches":true,"nodesTextbook":167,"ratioTextbook":0.2466765140324963,"textbookValueMatches":true},{"n":6,"depth":2,"order":"canonical","empty":26,"nodesPruned":677,"nodesFull":677,"ratio":1,"valueMatches":true,"nodesTextbook":242,"ratioTextbook":0.35745937961595275,"textbookValueMatches":true},{"n":6,"depth":3,"order":"shuffled","empty":26,"nodesPruned":16277,"nodesFull":16277,"ratio":1,"valueMatches":true,"nodesTextbook":2044,"ratioTextbook":0.1255759660871168,"textbookValueMatches":true},{"n":6,"depth":3,"order":"canonical","empty":26,"nodesPruned":16277,"nodesFull":16277,"ratio":1,"valueMatches":true,"nodesTextbook":4414,"ratioTextbook":0.2711801929102414,"textbookValueMatches":true},{"n":6,"depth":2,"order":"shuffled","empty":20,"nodesPruned":401,"nodesFull":401,"ratio":1,"valueMatches":true,"nodesTextbook":99,"ratioTextbook":0.24688279301745636,"textbookValueMatches":true},{"n":6,"depth":2,"order":"canonical","empty":20,"nodesPruned":401,"nodesFull":401,"ratio":1,"valueMatches":true,"nodesTextbook":84,"ratioTextbook":0.20947630922693267,"textbookValueMatches":true},{"n":6,"depth":3,"order":"shuffled","empty":20,"nodesPruned":7255,"nodesFull":7255,"ratio":1,"valueMatches":true,"nodesTextbook":1096,"ratioTextbook":0.1510682288077188,"textbookValueMatches":true},{"n":6,"depth":3,"order":"canonical","empty":20,"nodesPruned":7255,"nodesFull":7255,"ratio":1,"valueMatches":true,"nodesTextbook":651,"ratioTextbook":0.08973121984838042,"textbookValueMatches":true},{"n":6,"depth":2,"order":"shuffled","empty":31,"nodesPruned":962,"nodesFull":962,"ratio":1,"valueMatches":true,"nodesTextbook":347,"ratioTextbook":0.3607068607068607,"textbookValueMatches":true},{"n":6,"depth":2,"order":"canonical","empty":31,"nodesPruned":962,"nodesFull":962,"ratio":1,"valueMatches":true,"nodesTextbook":385,"ratioTextbook":0.4002079002079002,"textbookValueMatches":true},{"n":6,"depth":3,"order":"shuffled","empty":31,"nodesPruned":27932,"nodesFull":27932,"ratio":1,"valueMatches":true,"nodesTextbook":5362,"ratioTextbook":0.19196620363740513,"textbookValueMatches":true},{"n":6,"depth":3,"order":"canonical","empty":31,"nodesPruned":27932,"nodesFull":27932,"ratio":1,"valueMatches":true,"nodesTextbook":7198,"ratioTextbook":0.25769726478590865,"textbookValueMatches":true},{"n":6,"depth":2,"order":"shuffled","empty":29,"nodesPruned":844,"nodesFull":844,"ratio":1,"valueMatches":true,"nodesTextbook":164,"ratioTextbook":0.1943127962085308,"textbookValueMatches":true},{"n":6,"depth":2,"order":"canonical","empty":29,"nodesPruned":844,"nodesFull":844,"ratio":1,"valueMatches":true,"nodesTextbook":127,"ratioTextbook":0.1504739336492891,"textbookValueMatches":true},{"n":6,"depth":3,"order":"shuffled","empty":29,"nodesPruned":22898,"nodesFull":22898,"ratio":1,"valueMatches":true,"nodesTextbook":1960,"ratioTextbook":0.08559699537077474,"textbookValueMatches":true},{"n":6,"depth":3,"order":"canonical","empty":29,"nodesPruned":22898,"nodesFull":22898,"ratio":1,"valueMatches":true,"nodesTextbook":1576,"ratioTextbook":0.06882697178792907,"textbookValueMatches":true},{"n":6,"depth":2,"order":"shuffled","empty":22,"nodesPruned":485,"nodesFull":485,"ratio":1,"valueMatches":true,"nodesTextbook":129,"ratioTextbook":0.26597938144329897,"textbookValueMatches":true},{"n":6,"depth":2,"order":"canonical","empty":22,"nodesPruned":485,"nodesFull":485,"ratio":1,"valueMatches":true,"nodesTextbook":105,"ratioTextbook":0.21649484536082475,"textbookValueMatches":true},{"n":6,"depth":3,"order":"shuffled","empty":22,"nodesPruned":9735,"nodesFull":9735,"ratio":1,"valueMatches":true,"nodesTextbook":1363,"ratioTextbook":0.14001027221366205,"textbookValueMatches":true},{"n":6,"depth":3,"order":"canonical","empty":22,"nodesPruned":9735,"nodesFull":9735,"ratio":1,"valueMatches":true,"nodesTextbook":2016,"ratioTextbook":0.20708782742681048,"textbookValueMatches":true},{"n":6,"depth":2,"order":"shuffled","empty":19,"nodesPruned":362,"nodesFull":362,"ratio":1,"valueMatches":true,"nodesTextbook":140,"ratioTextbook":0.3867403314917127,"textbookValueMatches":true},{"n":6,"depth":2,"order":"canonical","empty":19,"nodesPruned":362,"nodesFull":362,"ratio":1,"valueMatches":true,"nodesTextbook":76,"ratioTextbook":0.20994475138121546,"textbookValueMatches":true},{"n":6,"depth":3,"order":"shuffled","empty":19,"nodesPruned":6188,"nodesFull":6188,"ratio":1,"valueMatches":true,"nodesTextbook":1670,"ratioTextbook":0.2698771816418875,"textbookValueMatches":true},{"n":6,"depth":3,"order":"canonical","empty":19,"nodesPruned":6188,"nodesFull":6188,"ratio":1,"valueMatches":true,"nodesTextbook":761,"ratioTextbook":0.12297996121525533,"textbookValueMatches":true},{"n":6,"depth":2,"order":"shuffled","empty":31,"nodesPruned":962,"nodesFull":962,"ratio":1,"valueMatches":true,"nodesTextbook":207,"ratioTextbook":0.2151767151767152,"textbookValueMatches":true},{"n":6,"depth":2,"order":"canonical","empty":31,"nodesPruned":962,"nodesFull":962,"ratio":1,"valueMatches":true,"nodesTextbook":361,"ratioTextbook":0.37525987525987525,"textbookValueMatches":true},{"n":6,"depth":3,"order":"shuffled","empty":31,"nodesPruned":27932,"nodesFull":27932,"ratio":1,"valueMatches":true,"nodesTextbook":5732,"ratioTextbook":0.20521265931548044,"textbookValueMatches":true},{"n":6,"depth":3,"order":"canonical","empty":31,"nodesPruned":27932,"nodesFull":27932,"ratio":1,"valueMatches":true,"nodesTextbook":10069,"ratioTextbook":0.3604826006014607,"textbookValueMatches":true},{"n":6,"depth":2,"order":"shuffled","empty":17,"nodesPruned":292,"nodesFull":292,"ratio":1,"valueMatches":true,"nodesTextbook":106,"ratioTextbook":0.363013698630137,"textbookValueMatches":true},{"n":6,"depth":2,"order":"canonical","empty":17,"nodesPruned":292,"nodesFull":292,"ratio":1,"valueMatches":true,"nodesTextbook":88,"ratioTextbook":0.3013698630136986,"textbookValueMatches":true},{"n":6,"depth":3,"order":"shuffled","empty":17,"nodesPruned":4450,"nodesFull":4450,"ratio":1,"valueMatches":true,"nodesTextbook":1083,"ratioTextbook":0.24337078651685393,"textbookValueMatches":true},{"n":6,"depth":3,"order":"canonical","empty":17,"nodesPruned":4450,"nodesFull":4450,"ratio":1,"valueMatches":true,"nodesTextbook":1233,"ratioTextbook":0.27707865168539325,"textbookValueMatches":true},{"n":6,"depth":2,"order":"shuffled","empty":27,"nodesPruned":730,"nodesFull":730,"ratio":1,"valueMatches":true,"nodesTextbook":195,"ratioTextbook":0.2671232876712329,"textbookValueMatches":true},{"n":6,"depth":2,"order":"canonical","empty":27,"nodesPruned":730,"nodesFull":730,"ratio":1,"valueMatches":true,"nodesTextbook":172,"ratioTextbook":0.2356164383561644,"textbookValueMatches":true},{"n":6,"depth":3,"order":"shuffled","empty":27,"nodesPruned":18300,"nodesFull":18300,"ratio":1,"valueMatches":true,"nodesTextbook":2260,"ratioTextbook":0.12349726775956284,"textbookValueMatches":true},{"n":6,"depth":3,"order":"canonical","empty":27,"nodesPruned":18300,"nodesFull":18300,"ratio":1,"valueMatches":true,"nodesTextbook":2017,"ratioTextbook":0.11021857923497268,"textbookValueMatches":true},{"n":6,"depth":2,"order":"shuffled","empty":19,"nodesPruned":362,"nodesFull":362,"ratio":1,"valueMatches":true,"nodesTextbook":109,"ratioTextbook":0.3011049723756906,"textbookValueMatches":true},{"n":6,"depth":2,"order":"canonical","empty":19,"nodesPruned":362,"nodesFull":362,"ratio":1,"valueMatches":true,"nodesTextbook":58,"ratioTextbook":0.16022099447513813,"textbookValueMatches":true},{"n":6,"depth":3,"order":"shuffled","empty":19,"nodesPruned":6230,"nodesFull":6230,"ratio":1,"valueMatches":true,"nodesTextbook":992,"ratioTextbook":0.1592295345104334,"textbookValueMatches":true},{"n":6,"depth":3,"order":"canonical","empty":19,"nodesPruned":6230,"nodesFull":6230,"ratio":1,"valueMatches":true,"nodesTextbook":618,"ratioTextbook":0.09919743178170144,"textbookValueMatches":true},{"n":6,"depth":2,"order":"shuffled","empty":20,"nodesPruned":401,"nodesFull":401,"ratio":1,"valueMatches":true,"nodesTextbook":128,"ratioTextbook":0.3192019950124688,"textbookValueMatches":true},{"n":6,"depth":2,"order":"canonical","empty":20,"nodesPruned":401,"nodesFull":401,"ratio":1,"valueMatches":true,"nodesTextbook":77,"ratioTextbook":0.19201995012468828,"textbookValueMatches":true},{"n":6,"depth":3,"order":"shuffled","empty":20,"nodesPruned":7289,"nodesFull":7289,"ratio":1,"valueMatches":true,"nodesTextbook":1077,"ratioTextbook":0.14775689394978736,"textbookValueMatches":true},{"n":6,"depth":3,"order":"canonical","empty":20,"nodesPruned":7289,"nodesFull":7289,"ratio":1,"valueMatches":true,"nodesTextbook":1249,"ratioTextbook":0.17135409521196324,"textbookValueMatches":true}]}
diff --git a/web/src/lib/data/astar-paired-study.json b/web/src/lib/data/astar-paired-study.json
new file mode 100644
index 0000000..cbc1adf
--- /dev/null
+++ b/web/src/lib/data/astar-paired-study.json
@@ -0,0 +1 @@
+{"meta":{"generatedBy":"web/scripts/generate-reference-studies.ts","generatedAt":"2026-10-05","node":"v26.10.0","cpu":"Apple M4","implementation":"TypeScript port (parity-tested against the original Python)","config":{"dimensions":[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99],"boardsPerDimension":10,"seed":2022}},"rows":[{"dimension":2,"board":0,"optimalCells":3,"manhattan":{"expansions":3,"pops":4,"cells":3},"euclidean":{"expansions":3,"pops":4,"cells":3}},{"dimension":2,"board":1,"optimalCells":2,"manhattan":{"expansions":2,"pops":2,"cells":2},"euclidean":{"expansions":2,"pops":2,"cells":2}},{"dimension":2,"board":2,"optimalCells":2,"manhattan":{"expansions":3,"pops":2,"cells":2},"euclidean":{"expansions":3,"pops":2,"cells":2}},{"dimension":2,"board":3,"optimalCells":2,"manhattan":{"expansions":2,"pops":2,"cells":2},"euclidean":{"expansions":2,"pops":2,"cells":2}},{"dimension":2,"board":4,"optimalCells":3,"manhattan":{"expansions":3,"pops":4,"cells":3},"euclidean":{"expansions":3,"pops":4,"cells":3}},{"dimension":2,"board":5,"optimalCells":2,"manhattan":{"expansions":2,"pops":2,"cells":2},"euclidean":{"expansions":2,"pops":2,"cells":2}},{"dimension":2,"board":6,"optimalCells":2,"manhattan":{"expansions":2,"pops":2,"cells":2},"euclidean":{"expansions":2,"pops":2,"cells":2}},{"dimension":2,"board":7,"optimalCells":2,"manhattan":{"expansions":3,"pops":2,"cells":2},"euclidean":{"expansions":3,"pops":2,"cells":2}},{"dimension":2,"board":8,"optimalCells":2,"manhattan":{"expansions":3,"pops":2,"cells":2},"euclidean":{"expansions":3,"pops":2,"cells":2}},{"dimension":2,"board":9,"optimalCells":2,"manhattan":{"expansions":2,"pops":2,"cells":2},"euclidean":{"expansions":2,"pops":2,"cells":2}},{"dimension":3,"board":0,"optimalCells":4,"manhattan":{"expansions":7,"pops":6,"cells":4},"euclidean":{"expansions":7,"pops":6,"cells":4}},{"dimension":3,"board":1,"optimalCells":2,"manhattan":{"expansions":2,"pops":2,"cells":2},"euclidean":{"expansions":2,"pops":2,"cells":2}},{"dimension":3,"board":2,"optimalCells":4,"manhattan":{"expansions":5,"pops":4,"cells":4},"euclidean":{"expansions":5,"pops":4,"cells":4}},{"dimension":3,"board":3,"optimalCells":2,"manhattan":{"expansions":3,"pops":2,"cells":2},"euclidean":{"expansions":3,"pops":2,"cells":2}},{"dimension":3,"board":4,"optimalCells":3,"manhattan":{"expansions":5,"pops":3,"cells":3},"euclidean":{"expansions":5,"pops":3,"cells":3}},{"dimension":3,"board":5,"optimalCells":2,"manhattan":{"expansions":3,"pops":2,"cells":2},"euclidean":{"expansions":3,"pops":2,"cells":2}},{"dimension":3,"board":6,"optimalCells":3,"manhattan":{"expansions":5,"pops":3,"cells":3},"euclidean":{"expansions":5,"pops":3,"cells":3}},{"dimension":3,"board":7,"optimalCells":2,"manhattan":{"expansions":4,"pops":2,"cells":2},"euclidean":{"expansions":4,"pops":2,"cells":2}},{"dimension":3,"board":8,"optimalCells":4,"manhattan":{"expansions":6,"pops":5,"cells":4},"euclidean":{"expansions":6,"pops":5,"cells":4}},{"dimension":3,"board":9,"optimalCells":4,"manhattan":{"expansions":5,"pops":4,"cells":4},"euclidean":{"expansions":5,"pops":4,"cells":4}},{"dimension":4,"board":0,"optimalCells":2,"manhattan":{"expansions":3,"pops":2,"cells":2},"euclidean":{"expansions":3,"pops":2,"cells":2}},{"dimension":4,"board":1,"optimalCells":2,"manhattan":{"expansions":6,"pops":2,"cells":2},"euclidean":{"expansions":6,"pops":2,"cells":2}},{"dimension":4,"board":2,"optimalCells":2,"manhattan":{"expansions":2,"pops":2,"cells":2},"euclidean":{"expansions":2,"pops":2,"cells":2}},{"dimension":4,"board":3,"optimalCells":3,"manhattan":{"expansions":6,"pops":4,"cells":3},"euclidean":{"expansions":4,"pops":3,"cells":3}},{"dimension":4,"board":4,"optimalCells":null,"manhattan":{"expansions":5,"pops":6,"cells":0},"euclidean":{"expansions":5,"pops":6,"cells":0}},{"dimension":4,"board":5,"optimalCells":2,"manhattan":{"expansions":6,"pops":2,"cells":2},"euclidean":{"expansions":6,"pops":2,"cells":2}},{"dimension":4,"board":6,"optimalCells":4,"manhattan":{"expansions":6,"pops":4,"cells":4},"euclidean":{"expansions":6,"pops":4,"cells":4}},{"dimension":4,"board":7,"optimalCells":4,"manhattan":{"expansions":11,"pops":5,"cells":4},"euclidean":{"expansions":8,"pops":4,"cells":4}},{"dimension":4,"board":8,"optimalCells":6,"manhattan":{"expansions":9,"pops":7,"cells":6},"euclidean":{"expansions":9,"pops":8,"cells":6}},{"dimension":4,"board":9,"optimalCells":3,"manhattan":{"expansions":5,"pops":3,"cells":3},"euclidean":{"expansions":5,"pops":3,"cells":3}},{"dimension":5,"board":0,"optimalCells":5,"manhattan":{"expansions":11,"pops":7,"cells":5},"euclidean":{"expansions":13,"pops":8,"cells":5}},{"dimension":5,"board":1,"optimalCells":4,"manhattan":{"expansions":12,"pops":5,"cells":4},"euclidean":{"expansions":12,"pops":5,"cells":4}},{"dimension":5,"board":2,"optimalCells":4,"manhattan":{"expansions":7,"pops":4,"cells":4},"euclidean":{"expansions":7,"pops":4,"cells":4}},{"dimension":5,"board":3,"optimalCells":4,"manhattan":{"expansions":8,"pops":4,"cells":4},"euclidean":{"expansions":8,"pops":4,"cells":4}},{"dimension":5,"board":4,"optimalCells":7,"manhattan":{"expansions":19,"pops":13,"cells":7},"euclidean":{"expansions":20,"pops":15,"cells":7}},{"dimension":5,"board":5,"optimalCells":4,"manhattan":{"expansions":9,"pops":4,"cells":4},"euclidean":{"expansions":9,"pops":4,"cells":4}},{"dimension":5,"board":6,"optimalCells":3,"manhattan":{"expansions":4,"pops":3,"cells":3},"euclidean":{"expansions":4,"pops":3,"cells":3}},{"dimension":5,"board":7,"optimalCells":3,"manhattan":{"expansions":6,"pops":3,"cells":3},"euclidean":{"expansions":6,"pops":3,"cells":3}},{"dimension":5,"board":8,"optimalCells":3,"manhattan":{"expansions":4,"pops":3,"cells":3},"euclidean":{"expansions":4,"pops":3,"cells":3}},{"dimension":5,"board":9,"optimalCells":5,"manhattan":{"expansions":8,"pops":5,"cells":5},"euclidean":{"expansions":8,"pops":5,"cells":5}},{"dimension":6,"board":0,"optimalCells":5,"manhattan":{"expansions":9,"pops":5,"cells":5},"euclidean":{"expansions":9,"pops":5,"cells":5}},{"dimension":6,"board":1,"optimalCells":4,"manhattan":{"expansions":10,"pops":4,"cells":4},"euclidean":{"expansions":10,"pops":4,"cells":4}},{"dimension":6,"board":2,"optimalCells":5,"manhattan":{"expansions":10,"pops":6,"cells":6},"euclidean":{"expansions":16,"pops":8,"cells":5}},{"dimension":6,"board":3,"optimalCells":3,"manhattan":{"expansions":11,"pops":4,"cells":3},"euclidean":{"expansions":8,"pops":3,"cells":3}},{"dimension":6,"board":4,"optimalCells":4,"manhattan":{"expansions":8,"pops":6,"cells":4},"euclidean":{"expansions":8,"pops":6,"cells":4}},{"dimension":6,"board":5,"optimalCells":8,"manhattan":{"expansions":19,"pops":13,"cells":8},"euclidean":{"expansions":19,"pops":13,"cells":8}},{"dimension":6,"board":6,"optimalCells":2,"manhattan":{"expansions":5,"pops":2,"cells":2},"euclidean":{"expansions":5,"pops":2,"cells":2}},{"dimension":6,"board":7,"optimalCells":2,"manhattan":{"expansions":3,"pops":2,"cells":2},"euclidean":{"expansions":3,"pops":2,"cells":2}},{"dimension":6,"board":8,"optimalCells":3,"manhattan":{"expansions":3,"pops":3,"cells":3},"euclidean":{"expansions":3,"pops":3,"cells":3}},{"dimension":6,"board":9,"optimalCells":5,"manhattan":{"expansions":11,"pops":6,"cells":5},"euclidean":{"expansions":12,"pops":7,"cells":5}},{"dimension":7,"board":0,"optimalCells":4,"manhattan":{"expansions":9,"pops":4,"cells":4},"euclidean":{"expansions":9,"pops":4,"cells":4}},{"dimension":7,"board":1,"optimalCells":8,"manhattan":{"expansions":17,"pops":12,"cells":8},"euclidean":{"expansions":17,"pops":13,"cells":8}},{"dimension":7,"board":2,"optimalCells":4,"manhattan":{"expansions":8,"pops":4,"cells":4},"euclidean":{"expansions":8,"pops":4,"cells":4}},{"dimension":7,"board":3,"optimalCells":null,"manhattan":{"expansions":24,"pops":25,"cells":0},"euclidean":{"expansions":24,"pops":25,"cells":0}},{"dimension":7,"board":4,"optimalCells":3,"manhattan":{"expansions":9,"pops":3,"cells":3},"euclidean":{"expansions":9,"pops":3,"cells":3}},{"dimension":7,"board":5,"optimalCells":7,"manhattan":{"expansions":24,"pops":16,"cells":7},"euclidean":{"expansions":22,"pops":14,"cells":7}},{"dimension":7,"board":6,"optimalCells":9,"manhattan":{"expansions":21,"pops":15,"cells":9},"euclidean":{"expansions":29,"pops":22,"cells":9}},{"dimension":7,"board":7,"optimalCells":5,"manhattan":{"expansions":12,"pops":6,"cells":6},"euclidean":{"expansions":12,"pops":5,"cells":5}},{"dimension":7,"board":8,"optimalCells":2,"manhattan":{"expansions":4,"pops":2,"cells":2},"euclidean":{"expansions":4,"pops":2,"cells":2}},{"dimension":7,"board":9,"optimalCells":3,"manhattan":{"expansions":10,"pops":4,"cells":3},"euclidean":{"expansions":10,"pops":4,"cells":3}},{"dimension":8,"board":0,"optimalCells":11,"manhattan":{"expansions":13,"pops":12,"cells":11},"euclidean":{"expansions":13,"pops":12,"cells":11}},{"dimension":8,"board":1,"optimalCells":7,"manhattan":{"expansions":10,"pops":8,"cells":7},"euclidean":{"expansions":12,"pops":10,"cells":7}},{"dimension":8,"board":2,"optimalCells":5,"manhattan":{"expansions":13,"pops":5,"cells":5},"euclidean":{"expansions":13,"pops":5,"cells":5}},{"dimension":8,"board":3,"optimalCells":4,"manhattan":{"expansions":7,"pops":4,"cells":4},"euclidean":{"expansions":7,"pops":4,"cells":4}},{"dimension":8,"board":4,"optimalCells":6,"manhattan":{"expansions":12,"pops":6,"cells":6},"euclidean":{"expansions":12,"pops":6,"cells":6}},{"dimension":8,"board":5,"optimalCells":7,"manhattan":{"expansions":19,"pops":13,"cells":7},"euclidean":{"expansions":20,"pops":14,"cells":7}},{"dimension":8,"board":6,"optimalCells":4,"manhattan":{"expansions":7,"pops":4,"cells":4},"euclidean":{"expansions":7,"pops":4,"cells":4}},{"dimension":8,"board":7,"optimalCells":3,"manhattan":{"expansions":7,"pops":3,"cells":3},"euclidean":{"expansions":7,"pops":3,"cells":3}},{"dimension":8,"board":8,"optimalCells":8,"manhattan":{"expansions":24,"pops":12,"cells":8},"euclidean":{"expansions":24,"pops":16,"cells":8}},{"dimension":8,"board":9,"optimalCells":8,"manhattan":{"expansions":18,"pops":15,"cells":8},"euclidean":{"expansions":20,"pops":16,"cells":8}},{"dimension":9,"board":0,"optimalCells":4,"manhattan":{"expansions":8,"pops":4,"cells":4},"euclidean":{"expansions":8,"pops":4,"cells":4}},{"dimension":9,"board":1,"optimalCells":13,"manhattan":{"expansions":44,"pops":38,"cells":13},"euclidean":{"expansions":44,"pops":38,"cells":13}},{"dimension":9,"board":2,"optimalCells":10,"manhattan":{"expansions":31,"pops":19,"cells":10},"euclidean":{"expansions":36,"pops":22,"cells":10}},{"dimension":9,"board":3,"optimalCells":10,"manhattan":{"expansions":39,"pops":21,"cells":10},"euclidean":{"expansions":48,"pops":30,"cells":10}},{"dimension":9,"board":4,"optimalCells":2,"manhattan":{"expansions":4,"pops":2,"cells":2},"euclidean":{"expansions":4,"pops":2,"cells":2}},{"dimension":9,"board":5,"optimalCells":7,"manhattan":{"expansions":21,"pops":14,"cells":7},"euclidean":{"expansions":21,"pops":13,"cells":7}},{"dimension":9,"board":6,"optimalCells":6,"manhattan":{"expansions":14,"pops":9,"cells":6},"euclidean":{"expansions":17,"pops":11,"cells":6}},{"dimension":9,"board":7,"optimalCells":6,"manhattan":{"expansions":8,"pops":7,"cells":6},"euclidean":{"expansions":8,"pops":7,"cells":6}},{"dimension":9,"board":8,"optimalCells":7,"manhattan":{"expansions":18,"pops":11,"cells":7},"euclidean":{"expansions":16,"pops":10,"cells":7}},{"dimension":9,"board":9,"optimalCells":8,"manhattan":{"expansions":23,"pops":12,"cells":8},"euclidean":{"expansions":32,"pops":19,"cells":8}},{"dimension":10,"board":0,"optimalCells":9,"manhattan":{"expansions":19,"pops":11,"cells":9},"euclidean":{"expansions":29,"pops":20,"cells":9}},{"dimension":10,"board":1,"optimalCells":null,"manhattan":{"expansions":52,"pops":53,"cells":0},"euclidean":{"expansions":52,"pops":53,"cells":0}},{"dimension":10,"board":2,"optimalCells":4,"manhattan":{"expansions":8,"pops":4,"cells":4},"euclidean":{"expansions":8,"pops":4,"cells":4}},{"dimension":10,"board":3,"optimalCells":5,"manhattan":{"expansions":10,"pops":5,"cells":5},"euclidean":{"expansions":10,"pops":5,"cells":5}},{"dimension":10,"board":4,"optimalCells":9,"manhattan":{"expansions":30,"pops":21,"cells":9},"euclidean":{"expansions":34,"pops":23,"cells":9}},{"dimension":10,"board":5,"optimalCells":7,"manhattan":{"expansions":13,"pops":9,"cells":7},"euclidean":{"expansions":13,"pops":8,"cells":7}},{"dimension":10,"board":6,"optimalCells":6,"manhattan":{"expansions":9,"pops":7,"cells":6},"euclidean":{"expansions":9,"pops":7,"cells":6}},{"dimension":10,"board":7,"optimalCells":2,"manhattan":{"expansions":4,"pops":2,"cells":2},"euclidean":{"expansions":4,"pops":2,"cells":2}},{"dimension":10,"board":8,"optimalCells":4,"manhattan":{"expansions":11,"pops":4,"cells":4},"euclidean":{"expansions":11,"pops":4,"cells":4}},{"dimension":10,"board":9,"optimalCells":9,"manhattan":{"expansions":19,"pops":12,"cells":9},"euclidean":{"expansions":19,"pops":12,"cells":9}},{"dimension":11,"board":0,"optimalCells":7,"manhattan":{"expansions":12,"pops":7,"cells":7},"euclidean":{"expansions":12,"pops":7,"cells":7}},{"dimension":11,"board":1,"optimalCells":7,"manhattan":{"expansions":19,"pops":7,"cells":7},"euclidean":{"expansions":19,"pops":7,"cells":7}},{"dimension":11,"board":2,"optimalCells":6,"manhattan":{"expansions":18,"pops":7,"cells":6},"euclidean":{"expansions":22,"pops":9,"cells":6}},{"dimension":11,"board":3,"optimalCells":null,"manhattan":{"expansions":43,"pops":44,"cells":0},"euclidean":{"expansions":43,"pops":44,"cells":0}},{"dimension":11,"board":4,"optimalCells":9,"manhattan":{"expansions":28,"pops":16,"cells":9},"euclidean":{"expansions":35,"pops":22,"cells":9}},{"dimension":11,"board":5,"optimalCells":9,"manhattan":{"expansions":25,"pops":16,"cells":9},"euclidean":{"expansions":34,"pops":23,"cells":9}},{"dimension":11,"board":6,"optimalCells":7,"manhattan":{"expansions":23,"pops":11,"cells":7},"euclidean":{"expansions":27,"pops":14,"cells":7}},{"dimension":11,"board":7,"optimalCells":5,"manhattan":{"expansions":10,"pops":5,"cells":5},"euclidean":{"expansions":10,"pops":5,"cells":5}},{"dimension":11,"board":8,"optimalCells":11,"manhattan":{"expansions":35,"pops":24,"cells":11},"euclidean":{"expansions":46,"pops":29,"cells":11}},{"dimension":11,"board":9,"optimalCells":5,"manhattan":{"expansions":10,"pops":5,"cells":5},"euclidean":{"expansions":10,"pops":5,"cells":5}},{"dimension":12,"board":0,"optimalCells":14,"manhattan":{"expansions":46,"pops":30,"cells":14},"euclidean":{"expansions":66,"pops":50,"cells":14}},{"dimension":12,"board":1,"optimalCells":11,"manhattan":{"expansions":25,"pops":19,"cells":11},"euclidean":{"expansions":25,"pops":19,"cells":11}},{"dimension":12,"board":2,"optimalCells":6,"manhattan":{"expansions":11,"pops":6,"cells":6},"euclidean":{"expansions":11,"pops":6,"cells":6}},{"dimension":12,"board":3,"optimalCells":3,"manhattan":{"expansions":9,"pops":3,"cells":3},"euclidean":{"expansions":9,"pops":3,"cells":3}},{"dimension":12,"board":4,"optimalCells":4,"manhattan":{"expansions":10,"pops":4,"cells":4},"euclidean":{"expansions":10,"pops":4,"cells":4}},{"dimension":12,"board":5,"optimalCells":9,"manhattan":{"expansions":27,"pops":9,"cells":9},"euclidean":{"expansions":27,"pops":9,"cells":9}},{"dimension":12,"board":6,"optimalCells":6,"manhattan":{"expansions":11,"pops":6,"cells":6},"euclidean":{"expansions":11,"pops":6,"cells":6}},{"dimension":12,"board":7,"optimalCells":4,"manhattan":{"expansions":12,"pops":4,"cells":4},"euclidean":{"expansions":12,"pops":4,"cells":4}},{"dimension":12,"board":8,"optimalCells":4,"manhattan":{"expansions":4,"pops":4,"cells":4},"euclidean":{"expansions":4,"pops":4,"cells":4}},{"dimension":12,"board":9,"optimalCells":6,"manhattan":{"expansions":17,"pops":11,"cells":6},"euclidean":{"expansions":17,"pops":10,"cells":6}},{"dimension":13,"board":0,"optimalCells":2,"manhattan":{"expansions":3,"pops":2,"cells":2},"euclidean":{"expansions":3,"pops":2,"cells":2}},{"dimension":13,"board":1,"optimalCells":5,"manhattan":{"expansions":15,"pops":5,"cells":5},"euclidean":{"expansions":15,"pops":5,"cells":5}},{"dimension":13,"board":2,"optimalCells":null,"manhattan":{"expansions":98,"pops":99,"cells":0},"euclidean":{"expansions":97,"pops":98,"cells":0}},{"dimension":13,"board":3,"optimalCells":7,"manhattan":{"expansions":14,"pops":9,"cells":7},"euclidean":{"expansions":12,"pops":8,"cells":7}},{"dimension":13,"board":4,"optimalCells":10,"manhattan":{"expansions":35,"pops":22,"cells":10},"euclidean":{"expansions":45,"pops":30,"cells":10}},{"dimension":13,"board":5,"optimalCells":9,"manhattan":{"expansions":25,"pops":17,"cells":9},"euclidean":{"expansions":29,"pops":19,"cells":9}},{"dimension":13,"board":6,"optimalCells":14,"manhattan":{"expansions":40,"pops":23,"cells":14},"euclidean":{"expansions":47,"pops":31,"cells":14}},{"dimension":13,"board":7,"optimalCells":null,"manhattan":{"expansions":100,"pops":101,"cells":0},"euclidean":{"expansions":84,"pops":85,"cells":0}},{"dimension":13,"board":8,"optimalCells":5,"manhattan":{"expansions":10,"pops":5,"cells":5},"euclidean":{"expansions":10,"pops":5,"cells":5}},{"dimension":13,"board":9,"optimalCells":9,"manhattan":{"expansions":21,"pops":9,"cells":9},"euclidean":{"expansions":21,"pops":9,"cells":9}},{"dimension":14,"board":0,"optimalCells":11,"manhattan":{"expansions":24,"pops":13,"cells":11},"euclidean":{"expansions":24,"pops":13,"cells":11}},{"dimension":14,"board":1,"optimalCells":19,"manhattan":{"expansions":95,"pops":70,"cells":19},"euclidean":{"expansions":136,"pops":102,"cells":19}},{"dimension":14,"board":2,"optimalCells":11,"manhattan":{"expansions":43,"pops":27,"cells":11},"euclidean":{"expansions":49,"pops":29,"cells":11}},{"dimension":14,"board":3,"optimalCells":9,"manhattan":{"expansions":27,"pops":9,"cells":9},"euclidean":{"expansions":27,"pops":9,"cells":9}},{"dimension":14,"board":4,"optimalCells":7,"manhattan":{"expansions":21,"pops":7,"cells":7},"euclidean":{"expansions":21,"pops":7,"cells":7}},{"dimension":14,"board":5,"optimalCells":9,"manhattan":{"expansions":21,"pops":14,"cells":9},"euclidean":{"expansions":25,"pops":17,"cells":9}},{"dimension":14,"board":6,"optimalCells":7,"manhattan":{"expansions":31,"pops":16,"cells":7},"euclidean":{"expansions":25,"pops":11,"cells":7}},{"dimension":14,"board":7,"optimalCells":8,"manhattan":{"expansions":34,"pops":15,"cells":9},"euclidean":{"expansions":38,"pops":18,"cells":9}},{"dimension":14,"board":8,"optimalCells":5,"manhattan":{"expansions":13,"pops":6,"cells":5},"euclidean":{"expansions":13,"pops":6,"cells":5}},{"dimension":14,"board":9,"optimalCells":7,"manhattan":{"expansions":19,"pops":13,"cells":7},"euclidean":{"expansions":19,"pops":13,"cells":7}},{"dimension":15,"board":0,"optimalCells":7,"manhattan":{"expansions":27,"pops":12,"cells":7},"euclidean":{"expansions":31,"pops":15,"cells":7}},{"dimension":15,"board":1,"optimalCells":3,"manhattan":{"expansions":5,"pops":3,"cells":3},"euclidean":{"expansions":5,"pops":3,"cells":3}},{"dimension":15,"board":2,"optimalCells":16,"manhattan":{"expansions":54,"pops":30,"cells":17},"euclidean":{"expansions":47,"pops":30,"cells":16}},{"dimension":15,"board":3,"optimalCells":6,"manhattan":{"expansions":17,"pops":6,"cells":6},"euclidean":{"expansions":17,"pops":6,"cells":6}},{"dimension":15,"board":4,"optimalCells":6,"manhattan":{"expansions":18,"pops":6,"cells":6},"euclidean":{"expansions":18,"pops":6,"cells":6}},{"dimension":15,"board":5,"optimalCells":6,"manhattan":{"expansions":15,"pops":6,"cells":6},"euclidean":{"expansions":15,"pops":6,"cells":6}},{"dimension":15,"board":6,"optimalCells":17,"manhattan":{"expansions":44,"pops":33,"cells":17},"euclidean":{"expansions":45,"pops":36,"cells":17}},{"dimension":15,"board":7,"optimalCells":12,"manhattan":{"expansions":46,"pops":27,"cells":12},"euclidean":{"expansions":62,"pops":36,"cells":12}},{"dimension":15,"board":8,"optimalCells":10,"manhattan":{"expansions":17,"pops":12,"cells":10},"euclidean":{"expansions":17,"pops":12,"cells":10}},{"dimension":15,"board":9,"optimalCells":7,"manhattan":{"expansions":27,"pops":12,"cells":7},"euclidean":{"expansions":31,"pops":15,"cells":7}},{"dimension":16,"board":0,"optimalCells":11,"manhattan":{"expansions":23,"pops":11,"cells":11},"euclidean":{"expansions":23,"pops":11,"cells":11}},{"dimension":16,"board":1,"optimalCells":5,"manhattan":{"expansions":7,"pops":5,"cells":5},"euclidean":{"expansions":7,"pops":5,"cells":5}},{"dimension":16,"board":2,"optimalCells":14,"manhattan":{"expansions":34,"pops":15,"cells":14},"euclidean":{"expansions":34,"pops":15,"cells":14}},{"dimension":16,"board":3,"optimalCells":23,"manhattan":{"expansions":129,"pops":106,"cells":23},"euclidean":{"expansions":138,"pops":129,"cells":23}},{"dimension":16,"board":4,"optimalCells":null,"manhattan":{"expansions":104,"pops":105,"cells":0},"euclidean":{"expansions":104,"pops":105,"cells":0}},{"dimension":16,"board":5,"optimalCells":12,"manhattan":{"expansions":26,"pops":17,"cells":12},"euclidean":{"expansions":26,"pops":17,"cells":12}},{"dimension":16,"board":6,"optimalCells":9,"manhattan":{"expansions":15,"pops":11,"cells":9},"euclidean":{"expansions":18,"pops":13,"cells":9}},{"dimension":16,"board":7,"optimalCells":13,"manhattan":{"expansions":31,"pops":15,"cells":13},"euclidean":{"expansions":29,"pops":14,"cells":13}},{"dimension":16,"board":8,"optimalCells":7,"manhattan":{"expansions":20,"pops":7,"cells":7},"euclidean":{"expansions":20,"pops":7,"cells":7}},{"dimension":16,"board":9,"optimalCells":11,"manhattan":{"expansions":34,"pops":16,"cells":11},"euclidean":{"expansions":38,"pops":21,"cells":11}},{"dimension":17,"board":0,"optimalCells":2,"manhattan":{"expansions":4,"pops":2,"cells":2},"euclidean":{"expansions":4,"pops":2,"cells":2}},{"dimension":17,"board":1,"optimalCells":3,"manhattan":{"expansions":9,"pops":3,"cells":3},"euclidean":{"expansions":9,"pops":3,"cells":3}},{"dimension":17,"board":2,"optimalCells":13,"manhattan":{"expansions":69,"pops":53,"cells":13},"euclidean":{"expansions":72,"pops":57,"cells":13}},{"dimension":17,"board":3,"optimalCells":5,"manhattan":{"expansions":13,"pops":5,"cells":5},"euclidean":{"expansions":13,"pops":5,"cells":5}},{"dimension":17,"board":4,"optimalCells":null,"manhattan":{"expansions":33,"pops":34,"cells":0},"euclidean":{"expansions":33,"pops":34,"cells":0}},{"dimension":17,"board":5,"optimalCells":4,"manhattan":{"expansions":6,"pops":4,"cells":4},"euclidean":{"expansions":6,"pops":4,"cells":4}},{"dimension":17,"board":6,"optimalCells":23,"manhattan":{"expansions":137,"pops":105,"cells":23},"euclidean":{"expansions":186,"pops":157,"cells":23}},{"dimension":17,"board":7,"optimalCells":15,"manhattan":{"expansions":60,"pops":44,"cells":16},"euclidean":{"expansions":67,"pops":51,"cells":16}},{"dimension":17,"board":8,"optimalCells":17,"manhattan":{"expansions":69,"pops":42,"cells":18},"euclidean":{"expansions":96,"pops":63,"cells":18}},{"dimension":17,"board":9,"optimalCells":10,"manhattan":{"expansions":29,"pops":10,"cells":10},"euclidean":{"expansions":29,"pops":10,"cells":10}},{"dimension":18,"board":0,"optimalCells":12,"manhattan":{"expansions":37,"pops":15,"cells":12},"euclidean":{"expansions":36,"pops":14,"cells":12}},{"dimension":18,"board":1,"optimalCells":11,"manhattan":{"expansions":36,"pops":30,"cells":14},"euclidean":{"expansions":41,"pops":29,"cells":11}},{"dimension":18,"board":2,"optimalCells":8,"manhattan":{"expansions":19,"pops":8,"cells":8},"euclidean":{"expansions":19,"pops":8,"cells":8}},{"dimension":18,"board":3,"optimalCells":5,"manhattan":{"expansions":8,"pops":5,"cells":5},"euclidean":{"expansions":8,"pops":5,"cells":5}},{"dimension":18,"board":4,"optimalCells":9,"manhattan":{"expansions":30,"pops":15,"cells":9},"euclidean":{"expansions":36,"pops":22,"cells":9}},{"dimension":18,"board":5,"optimalCells":7,"manhattan":{"expansions":18,"pops":7,"cells":7},"euclidean":{"expansions":18,"pops":7,"cells":7}},{"dimension":18,"board":6,"optimalCells":20,"manhattan":{"expansions":76,"pops":64,"cells":20},"euclidean":{"expansions":74,"pops":59,"cells":20}},{"dimension":18,"board":7,"optimalCells":8,"manhattan":{"expansions":27,"pops":12,"cells":8},"euclidean":{"expansions":31,"pops":15,"cells":8}},{"dimension":18,"board":8,"optimalCells":11,"manhattan":{"expansions":37,"pops":15,"cells":12},"euclidean":{"expansions":28,"pops":11,"cells":11}},{"dimension":18,"board":9,"optimalCells":12,"manhattan":{"expansions":36,"pops":17,"cells":13},"euclidean":{"expansions":44,"pops":24,"cells":13}},{"dimension":19,"board":0,"optimalCells":20,"manhattan":{"expansions":38,"pops":25,"cells":20},"euclidean":{"expansions":45,"pops":31,"cells":20}},{"dimension":19,"board":1,"optimalCells":16,"manhattan":{"expansions":45,"pops":16,"cells":16},"euclidean":{"expansions":45,"pops":16,"cells":16}},{"dimension":19,"board":2,"optimalCells":14,"manhattan":{"expansions":35,"pops":19,"cells":16},"euclidean":{"expansions":35,"pops":19,"cells":14}},{"dimension":19,"board":3,"optimalCells":16,"manhattan":{"expansions":85,"pops":65,"cells":16},"euclidean":{"expansions":76,"pops":52,"cells":16}},{"dimension":19,"board":4,"optimalCells":15,"manhattan":{"expansions":43,"pops":16,"cells":16},"euclidean":{"expansions":39,"pops":15,"cells":15}},{"dimension":19,"board":5,"optimalCells":11,"manhattan":{"expansions":32,"pops":13,"cells":12},"euclidean":{"expansions":31,"pops":13,"cells":12}},{"dimension":19,"board":6,"optimalCells":14,"manhattan":{"expansions":37,"pops":24,"cells":14},"euclidean":{"expansions":48,"pops":34,"cells":14}},{"dimension":19,"board":7,"optimalCells":26,"manhattan":{"expansions":108,"pops":97,"cells":27},"euclidean":{"expansions":109,"pops":101,"cells":27}},{"dimension":19,"board":8,"optimalCells":10,"manhattan":{"expansions":27,"pops":10,"cells":10},"euclidean":{"expansions":27,"pops":10,"cells":10}},{"dimension":19,"board":9,"optimalCells":15,"manhattan":{"expansions":61,"pops":35,"cells":15},"euclidean":{"expansions":84,"pops":57,"cells":15}},{"dimension":20,"board":0,"optimalCells":11,"manhattan":{"expansions":37,"pops":21,"cells":11},"euclidean":{"expansions":45,"pops":30,"cells":11}},{"dimension":20,"board":1,"optimalCells":9,"manhattan":{"expansions":26,"pops":9,"cells":9},"euclidean":{"expansions":26,"pops":9,"cells":9}},{"dimension":20,"board":2,"optimalCells":15,"manhattan":{"expansions":42,"pops":30,"cells":16},"euclidean":{"expansions":38,"pops":25,"cells":15}},{"dimension":20,"board":3,"optimalCells":null,"manhattan":{"expansions":190,"pops":191,"cells":0},"euclidean":{"expansions":189,"pops":190,"cells":0}},{"dimension":20,"board":4,"optimalCells":13,"manhattan":{"expansions":49,"pops":28,"cells":13},"euclidean":{"expansions":59,"pops":38,"cells":13}},{"dimension":20,"board":5,"optimalCells":19,"manhattan":{"expansions":38,"pops":20,"cells":19},"euclidean":{"expansions":38,"pops":20,"cells":19}},{"dimension":20,"board":6,"optimalCells":13,"manhattan":{"expansions":38,"pops":17,"cells":14},"euclidean":{"expansions":48,"pops":24,"cells":14}},{"dimension":20,"board":7,"optimalCells":18,"manhattan":{"expansions":85,"pops":66,"cells":18},"euclidean":{"expansions":125,"pops":99,"cells":18}},{"dimension":20,"board":8,"optimalCells":16,"manhattan":{"expansions":85,"pops":57,"cells":16},"euclidean":{"expansions":119,"pops":77,"cells":16}},{"dimension":20,"board":9,"optimalCells":null,"manhattan":{"expansions":6,"pops":7,"cells":0},"euclidean":{"expansions":6,"pops":7,"cells":0}},{"dimension":21,"board":0,"optimalCells":27,"manhattan":{"expansions":124,"pops":99,"cells":27},"euclidean":{"expansions":135,"pops":122,"cells":27}},{"dimension":21,"board":1,"optimalCells":19,"manhattan":{"expansions":51,"pops":28,"cells":19},"euclidean":{"expansions":50,"pops":28,"cells":19}},{"dimension":21,"board":2,"optimalCells":20,"manhattan":{"expansions":78,"pops":46,"cells":20},"euclidean":{"expansions":109,"pops":71,"cells":20}},{"dimension":21,"board":3,"optimalCells":26,"manhattan":{"expansions":139,"pops":110,"cells":26},"euclidean":{"expansions":194,"pops":161,"cells":26}},{"dimension":21,"board":4,"optimalCells":9,"manhattan":{"expansions":22,"pops":9,"cells":9},"euclidean":{"expansions":22,"pops":9,"cells":9}},{"dimension":21,"board":5,"optimalCells":9,"manhattan":{"expansions":25,"pops":9,"cells":9},"euclidean":{"expansions":25,"pops":9,"cells":9}},{"dimension":21,"board":6,"optimalCells":24,"manhattan":{"expansions":115,"pops":83,"cells":24},"euclidean":{"expansions":170,"pops":135,"cells":24}},{"dimension":21,"board":7,"optimalCells":15,"manhattan":{"expansions":46,"pops":31,"cells":15},"euclidean":{"expansions":77,"pops":54,"cells":15}},{"dimension":21,"board":8,"optimalCells":null,"manhattan":{"expansions":3,"pops":4,"cells":0},"euclidean":{"expansions":3,"pops":4,"cells":0}},{"dimension":21,"board":9,"optimalCells":null,"manhattan":{"expansions":192,"pops":193,"cells":0},"euclidean":{"expansions":192,"pops":193,"cells":0}},{"dimension":22,"board":0,"optimalCells":19,"manhattan":{"expansions":48,"pops":22,"cells":19},"euclidean":{"expansions":46,"pops":21,"cells":19}},{"dimension":22,"board":1,"optimalCells":28,"manhattan":{"expansions":205,"pops":178,"cells":28},"euclidean":{"expansions":296,"pops":259,"cells":28}},{"dimension":22,"board":2,"optimalCells":12,"manhattan":{"expansions":52,"pops":30,"cells":12},"euclidean":{"expansions":69,"pops":43,"cells":12}},{"dimension":22,"board":3,"optimalCells":9,"manhattan":{"expansions":24,"pops":12,"cells":9},"euclidean":{"expansions":26,"pops":16,"cells":9}},{"dimension":22,"board":4,"optimalCells":21,"manhattan":{"expansions":51,"pops":21,"cells":21},"euclidean":{"expansions":51,"pops":21,"cells":21}},{"dimension":22,"board":5,"optimalCells":null,"manhattan":{"expansions":77,"pops":78,"cells":0},"euclidean":{"expansions":77,"pops":78,"cells":0}},{"dimension":22,"board":6,"optimalCells":26,"manhattan":{"expansions":226,"pops":175,"cells":26},"euclidean":{"expansions":309,"pops":256,"cells":26}},{"dimension":22,"board":7,"optimalCells":17,"manhattan":{"expansions":101,"pops":76,"cells":17},"euclidean":{"expansions":114,"pops":91,"cells":17}},{"dimension":22,"board":8,"optimalCells":10,"manhattan":{"expansions":30,"pops":10,"cells":10},"euclidean":{"expansions":30,"pops":10,"cells":10}},{"dimension":22,"board":9,"optimalCells":11,"manhattan":{"expansions":27,"pops":18,"cells":11},"euclidean":{"expansions":30,"pops":21,"cells":11}},{"dimension":23,"board":0,"optimalCells":22,"manhattan":{"expansions":89,"pops":57,"cells":22},"euclidean":{"expansions":143,"pops":106,"cells":22}},{"dimension":23,"board":1,"optimalCells":9,"manhattan":{"expansions":23,"pops":12,"cells":10},"euclidean":{"expansions":26,"pops":15,"cells":10}},{"dimension":23,"board":2,"optimalCells":25,"manhattan":{"expansions":136,"pops":97,"cells":25},"euclidean":{"expansions":237,"pops":188,"cells":25}},{"dimension":23,"board":3,"optimalCells":29,"manhattan":{"expansions":158,"pops":142,"cells":29},"euclidean":{"expansions":171,"pops":149,"cells":29}},{"dimension":23,"board":4,"optimalCells":19,"manhattan":{"expansions":58,"pops":40,"cells":19},"euclidean":{"expansions":79,"pops":57,"cells":19}},{"dimension":23,"board":5,"optimalCells":17,"manhattan":{"expansions":53,"pops":19,"cells":18},"euclidean":{"expansions":47,"pops":17,"cells":17}},{"dimension":23,"board":6,"optimalCells":16,"manhattan":{"expansions":88,"pops":56,"cells":16},"euclidean":{"expansions":96,"pops":71,"cells":16}},{"dimension":23,"board":7,"optimalCells":16,"manhattan":{"expansions":84,"pops":52,"cells":16},"euclidean":{"expansions":118,"pops":81,"cells":16}},{"dimension":23,"board":8,"optimalCells":4,"manhattan":{"expansions":11,"pops":4,"cells":4},"euclidean":{"expansions":11,"pops":4,"cells":4}},{"dimension":23,"board":9,"optimalCells":28,"manhattan":{"expansions":220,"pops":171,"cells":28},"euclidean":{"expansions":310,"pops":250,"cells":28}},{"dimension":24,"board":0,"optimalCells":24,"manhattan":{"expansions":168,"pops":124,"cells":24},"euclidean":{"expansions":255,"pops":198,"cells":24}},{"dimension":24,"board":1,"optimalCells":null,"manhattan":{"expansions":5,"pops":6,"cells":0},"euclidean":{"expansions":5,"pops":6,"cells":0}},{"dimension":24,"board":2,"optimalCells":18,"manhattan":{"expansions":39,"pops":18,"cells":18},"euclidean":{"expansions":40,"pops":19,"cells":18}},{"dimension":24,"board":3,"optimalCells":7,"manhattan":{"expansions":21,"pops":7,"cells":7},"euclidean":{"expansions":21,"pops":7,"cells":7}},{"dimension":24,"board":4,"optimalCells":4,"manhattan":{"expansions":7,"pops":4,"cells":4},"euclidean":{"expansions":7,"pops":4,"cells":4}},{"dimension":24,"board":5,"optimalCells":35,"manhattan":{"expansions":218,"pops":199,"cells":35},"euclidean":{"expansions":228,"pops":203,"cells":35}},{"dimension":24,"board":6,"optimalCells":15,"manhattan":{"expansions":43,"pops":15,"cells":15},"euclidean":{"expansions":43,"pops":15,"cells":15}},{"dimension":24,"board":7,"optimalCells":13,"manhattan":{"expansions":35,"pops":22,"cells":13},"euclidean":{"expansions":42,"pops":32,"cells":13}},{"dimension":24,"board":8,"optimalCells":30,"manhattan":{"expansions":125,"pops":80,"cells":30},"euclidean":{"expansions":222,"pops":186,"cells":30}},{"dimension":24,"board":9,"optimalCells":15,"manhattan":{"expansions":49,"pops":30,"cells":17},"euclidean":{"expansions":60,"pops":40,"cells":17}},{"dimension":25,"board":0,"optimalCells":21,"manhattan":{"expansions":41,"pops":22,"cells":21},"euclidean":{"expansions":51,"pops":34,"cells":21}},{"dimension":25,"board":1,"optimalCells":17,"manhattan":{"expansions":91,"pops":63,"cells":17},"euclidean":{"expansions":122,"pops":88,"cells":17}},{"dimension":25,"board":2,"optimalCells":5,"manhattan":{"expansions":10,"pops":5,"cells":5},"euclidean":{"expansions":10,"pops":5,"cells":5}},{"dimension":25,"board":3,"optimalCells":6,"manhattan":{"expansions":11,"pops":6,"cells":6},"euclidean":{"expansions":11,"pops":6,"cells":6}},{"dimension":25,"board":4,"optimalCells":null,"manhattan":{"expansions":421,"pops":422,"cells":0},"euclidean":{"expansions":386,"pops":387,"cells":0}},{"dimension":25,"board":5,"optimalCells":8,"manhattan":{"expansions":22,"pops":8,"cells":8},"euclidean":{"expansions":22,"pops":8,"cells":8}},{"dimension":25,"board":6,"optimalCells":11,"manhattan":{"expansions":29,"pops":11,"cells":11},"euclidean":{"expansions":29,"pops":11,"cells":11}},{"dimension":25,"board":7,"optimalCells":14,"manhattan":{"expansions":65,"pops":40,"cells":16},"euclidean":{"expansions":93,"pops":58,"cells":14}},{"dimension":25,"board":8,"optimalCells":19,"manhattan":{"expansions":87,"pops":50,"cells":19},"euclidean":{"expansions":131,"pops":87,"cells":19}},{"dimension":25,"board":9,"optimalCells":19,"manhattan":{"expansions":86,"pops":53,"cells":19},"euclidean":{"expansions":114,"pops":83,"cells":19}},{"dimension":26,"board":0,"optimalCells":21,"manhattan":{"expansions":60,"pops":42,"cells":21},"euclidean":{"expansions":97,"pops":75,"cells":21}},{"dimension":26,"board":1,"optimalCells":22,"manhattan":{"expansions":146,"pops":118,"cells":22},"euclidean":{"expansions":121,"pops":95,"cells":22}},{"dimension":26,"board":2,"optimalCells":25,"manhattan":{"expansions":111,"pops":84,"cells":29},"euclidean":{"expansions":133,"pops":94,"cells":25}},{"dimension":26,"board":3,"optimalCells":19,"manhattan":{"expansions":59,"pops":40,"cells":19},"euclidean":{"expansions":76,"pops":60,"cells":19}},{"dimension":26,"board":4,"optimalCells":10,"manhattan":{"expansions":30,"pops":14,"cells":10},"euclidean":{"expansions":31,"pops":16,"cells":10}},{"dimension":26,"board":5,"optimalCells":16,"manhattan":{"expansions":43,"pops":17,"cells":17},"euclidean":{"expansions":44,"pops":17,"cells":16}},{"dimension":26,"board":6,"optimalCells":19,"manhattan":{"expansions":69,"pops":49,"cells":21},"euclidean":{"expansions":85,"pops":63,"cells":20}},{"dimension":26,"board":7,"optimalCells":16,"manhattan":{"expansions":101,"pops":69,"cells":16},"euclidean":{"expansions":137,"pops":97,"cells":16}},{"dimension":26,"board":8,"optimalCells":11,"manhattan":{"expansions":39,"pops":20,"cells":11},"euclidean":{"expansions":52,"pops":31,"cells":11}},{"dimension":26,"board":9,"optimalCells":13,"manhattan":{"expansions":42,"pops":15,"cells":15},"euclidean":{"expansions":36,"pops":13,"cells":13}},{"dimension":27,"board":0,"optimalCells":7,"manhattan":{"expansions":16,"pops":10,"cells":7},"euclidean":{"expansions":17,"pops":11,"cells":7}},{"dimension":27,"board":1,"optimalCells":27,"manhattan":{"expansions":95,"pops":47,"cells":27},"euclidean":{"expansions":146,"pops":95,"cells":27}},{"dimension":27,"board":2,"optimalCells":17,"manhattan":{"expansions":84,"pops":63,"cells":17},"euclidean":{"expansions":107,"pops":77,"cells":17}},{"dimension":27,"board":3,"optimalCells":12,"manhattan":{"expansions":35,"pops":26,"cells":12},"euclidean":{"expansions":47,"pops":34,"cells":12}},{"dimension":27,"board":4,"optimalCells":12,"manhattan":{"expansions":26,"pops":12,"cells":12},"euclidean":{"expansions":26,"pops":12,"cells":12}},{"dimension":27,"board":5,"optimalCells":8,"manhattan":{"expansions":29,"pops":19,"cells":8},"euclidean":{"expansions":24,"pops":15,"cells":8}},{"dimension":27,"board":6,"optimalCells":10,"manhattan":{"expansions":45,"pops":29,"cells":10},"euclidean":{"expansions":57,"pops":35,"cells":10}},{"dimension":27,"board":7,"optimalCells":17,"manhattan":{"expansions":53,"pops":43,"cells":17},"euclidean":{"expansions":62,"pops":49,"cells":17}},{"dimension":27,"board":8,"optimalCells":null,"manhattan":{"expansions":38,"pops":39,"cells":0},"euclidean":{"expansions":38,"pops":39,"cells":0}},{"dimension":27,"board":9,"optimalCells":9,"manhattan":{"expansions":32,"pops":17,"cells":9},"euclidean":{"expansions":33,"pops":21,"cells":9}},{"dimension":28,"board":0,"optimalCells":35,"manhattan":{"expansions":389,"pops":319,"cells":35},"euclidean":{"expansions":493,"pops":426,"cells":35}},{"dimension":28,"board":1,"optimalCells":13,"manhattan":{"expansions":37,"pops":13,"cells":13},"euclidean":{"expansions":37,"pops":13,"cells":13}},{"dimension":28,"board":2,"optimalCells":17,"manhattan":{"expansions":52,"pops":20,"cells":17},"euclidean":{"expansions":90,"pops":45,"cells":17}},{"dimension":28,"board":3,"optimalCells":18,"manhattan":{"expansions":44,"pops":30,"cells":18},"euclidean":{"expansions":66,"pops":53,"cells":18}},{"dimension":28,"board":4,"optimalCells":10,"manhattan":{"expansions":29,"pops":18,"cells":10},"euclidean":{"expansions":26,"pops":17,"cells":10}},{"dimension":28,"board":5,"optimalCells":28,"manhattan":{"expansions":154,"pops":111,"cells":28},"euclidean":{"expansions":230,"pops":187,"cells":28}},{"dimension":28,"board":6,"optimalCells":17,"manhattan":{"expansions":70,"pops":42,"cells":17},"euclidean":{"expansions":101,"pops":71,"cells":17}},{"dimension":28,"board":7,"optimalCells":25,"manhattan":{"expansions":168,"pops":137,"cells":25},"euclidean":{"expansions":264,"pops":210,"cells":25}},{"dimension":28,"board":8,"optimalCells":28,"manhattan":{"expansions":77,"pops":53,"cells":28},"euclidean":{"expansions":80,"pops":57,"cells":28}},{"dimension":28,"board":9,"optimalCells":22,"manhattan":{"expansions":132,"pops":87,"cells":22},"euclidean":{"expansions":201,"pops":145,"cells":22}},{"dimension":29,"board":0,"optimalCells":27,"manhattan":{"expansions":83,"pops":35,"cells":28},"euclidean":{"expansions":155,"pops":83,"cells":28}},{"dimension":29,"board":1,"optimalCells":7,"manhattan":{"expansions":21,"pops":7,"cells":7},"euclidean":{"expansions":21,"pops":7,"cells":7}},{"dimension":29,"board":2,"optimalCells":8,"manhattan":{"expansions":21,"pops":11,"cells":8},"euclidean":{"expansions":23,"pops":12,"cells":8}},{"dimension":29,"board":3,"optimalCells":10,"manhattan":{"expansions":39,"pops":23,"cells":10},"euclidean":{"expansions":46,"pops":28,"cells":10}},{"dimension":29,"board":4,"optimalCells":15,"manhattan":{"expansions":67,"pops":44,"cells":15},"euclidean":{"expansions":81,"pops":55,"cells":15}},{"dimension":29,"board":5,"optimalCells":11,"manhattan":{"expansions":38,"pops":16,"cells":11},"euclidean":{"expansions":48,"pops":22,"cells":11}},{"dimension":29,"board":6,"optimalCells":22,"manhattan":{"expansions":82,"pops":39,"cells":23},"euclidean":{"expansions":139,"pops":86,"cells":23}},{"dimension":29,"board":7,"optimalCells":25,"manhattan":{"expansions":87,"pops":52,"cells":25},"euclidean":{"expansions":165,"pops":114,"cells":25}},{"dimension":29,"board":8,"optimalCells":9,"manhattan":{"expansions":31,"pops":18,"cells":11},"euclidean":{"expansions":22,"pops":10,"cells":9}},{"dimension":29,"board":9,"optimalCells":12,"manhattan":{"expansions":48,"pops":24,"cells":12},"euclidean":{"expansions":65,"pops":40,"cells":12}},{"dimension":30,"board":0,"optimalCells":28,"manhattan":{"expansions":178,"pops":138,"cells":28},"euclidean":{"expansions":308,"pops":253,"cells":28}},{"dimension":30,"board":1,"optimalCells":17,"manhattan":{"expansions":89,"pops":65,"cells":18},"euclidean":{"expansions":71,"pops":50,"cells":18}},{"dimension":30,"board":2,"optimalCells":36,"manhattan":{"expansions":343,"pops":284,"cells":36},"euclidean":{"expansions":417,"pops":363,"cells":36}},{"dimension":30,"board":3,"optimalCells":13,"manhattan":{"expansions":40,"pops":26,"cells":13},"euclidean":{"expansions":41,"pops":32,"cells":13}},{"dimension":30,"board":4,"optimalCells":6,"manhattan":{"expansions":18,"pops":8,"cells":6},"euclidean":{"expansions":14,"pops":6,"cells":6}},{"dimension":30,"board":5,"optimalCells":42,"manhattan":{"expansions":285,"pops":244,"cells":42},"euclidean":{"expansions":505,"pops":458,"cells":42}},{"dimension":30,"board":6,"optimalCells":29,"manhattan":{"expansions":102,"pops":52,"cells":30},"euclidean":{"expansions":174,"pops":110,"cells":30}},{"dimension":30,"board":7,"optimalCells":18,"manhattan":{"expansions":114,"pops":100,"cells":18},"euclidean":{"expansions":120,"pops":104,"cells":18}},{"dimension":30,"board":8,"optimalCells":13,"manhattan":{"expansions":46,"pops":32,"cells":13},"euclidean":{"expansions":53,"pops":37,"cells":13}},{"dimension":30,"board":9,"optimalCells":27,"manhattan":{"expansions":103,"pops":60,"cells":27},"euclidean":{"expansions":192,"pops":150,"cells":27}},{"dimension":31,"board":0,"optimalCells":33,"manhattan":{"expansions":219,"pops":184,"cells":33},"euclidean":{"expansions":249,"pops":222,"cells":33}},{"dimension":31,"board":1,"optimalCells":24,"manhattan":{"expansions":70,"pops":35,"cells":26},"euclidean":{"expansions":78,"pops":45,"cells":25}},{"dimension":31,"board":2,"optimalCells":26,"manhattan":{"expansions":100,"pops":76,"cells":26},"euclidean":{"expansions":125,"pops":98,"cells":26}},{"dimension":31,"board":3,"optimalCells":29,"manhattan":{"expansions":95,"pops":42,"cells":30},"euclidean":{"expansions":171,"pops":103,"cells":30}},{"dimension":31,"board":4,"optimalCells":14,"manhattan":{"expansions":32,"pops":14,"cells":14},"euclidean":{"expansions":33,"pops":14,"cells":14}},{"dimension":31,"board":5,"optimalCells":8,"manhattan":{"expansions":23,"pops":15,"cells":8},"euclidean":{"expansions":27,"pops":17,"cells":8}},{"dimension":31,"board":6,"optimalCells":27,"manhattan":{"expansions":88,"pops":42,"cells":28},"euclidean":{"expansions":138,"pops":79,"cells":28}},{"dimension":31,"board":7,"optimalCells":22,"manhattan":{"expansions":59,"pops":22,"cells":22},"euclidean":{"expansions":59,"pops":22,"cells":22}},{"dimension":31,"board":8,"optimalCells":10,"manhattan":{"expansions":40,"pops":21,"cells":10},"euclidean":{"expansions":46,"pops":28,"cells":10}},{"dimension":31,"board":9,"optimalCells":10,"manhattan":{"expansions":27,"pops":10,"cells":10},"euclidean":{"expansions":27,"pops":10,"cells":10}},{"dimension":32,"board":0,"optimalCells":10,"manhattan":{"expansions":27,"pops":17,"cells":10},"euclidean":{"expansions":24,"pops":15,"cells":10}},{"dimension":32,"board":1,"optimalCells":23,"manhattan":{"expansions":81,"pops":48,"cells":23},"euclidean":{"expansions":130,"pops":95,"cells":23}},{"dimension":32,"board":2,"optimalCells":31,"manhattan":{"expansions":261,"pops":220,"cells":31},"euclidean":{"expansions":261,"pops":226,"cells":31}},{"dimension":32,"board":3,"optimalCells":41,"manhattan":{"expansions":251,"pops":191,"cells":41},"euclidean":{"expansions":378,"pops":327,"cells":41}},{"dimension":32,"board":4,"optimalCells":34,"manhattan":{"expansions":253,"pops":206,"cells":34},"euclidean":{"expansions":334,"pops":279,"cells":34}},{"dimension":32,"board":5,"optimalCells":16,"manhattan":{"expansions":65,"pops":33,"cells":16},"euclidean":{"expansions":96,"pops":65,"cells":16}},{"dimension":32,"board":6,"optimalCells":9,"manhattan":{"expansions":33,"pops":15,"cells":9},"euclidean":{"expansions":32,"pops":14,"cells":9}},{"dimension":32,"board":7,"optimalCells":18,"manhattan":{"expansions":49,"pops":18,"cells":18},"euclidean":{"expansions":49,"pops":18,"cells":18}},{"dimension":32,"board":8,"optimalCells":17,"manhattan":{"expansions":81,"pops":50,"cells":17},"euclidean":{"expansions":131,"pops":88,"cells":17}},{"dimension":32,"board":9,"optimalCells":7,"manhattan":{"expansions":17,"pops":10,"cells":7},"euclidean":{"expansions":15,"pops":9,"cells":7}},{"dimension":33,"board":0,"optimalCells":4,"manhattan":{"expansions":6,"pops":4,"cells":4},"euclidean":{"expansions":6,"pops":4,"cells":4}},{"dimension":33,"board":1,"optimalCells":37,"manhattan":{"expansions":151,"pops":124,"cells":37},"euclidean":{"expansions":184,"pops":150,"cells":37}},{"dimension":33,"board":2,"optimalCells":46,"manhattan":{"expansions":307,"pops":287,"cells":46},"euclidean":{"expansions":327,"pops":310,"cells":46}},{"dimension":33,"board":3,"optimalCells":13,"manhattan":{"expansions":44,"pops":18,"cells":17},"euclidean":{"expansions":32,"pops":13,"cells":13}},{"dimension":33,"board":4,"optimalCells":18,"manhattan":{"expansions":49,"pops":27,"cells":21},"euclidean":{"expansions":47,"pops":26,"cells":18}},{"dimension":33,"board":5,"optimalCells":13,"manhattan":{"expansions":34,"pops":14,"cells":13},"euclidean":{"expansions":37,"pops":16,"cells":13}},{"dimension":33,"board":6,"optimalCells":21,"manhattan":{"expansions":74,"pops":40,"cells":21},"euclidean":{"expansions":142,"pops":98,"cells":21}},{"dimension":33,"board":7,"optimalCells":18,"manhattan":{"expansions":82,"pops":57,"cells":24},"euclidean":{"expansions":67,"pops":47,"cells":18}},{"dimension":33,"board":8,"optimalCells":15,"manhattan":{"expansions":78,"pops":53,"cells":15},"euclidean":{"expansions":113,"pops":79,"cells":15}},{"dimension":33,"board":9,"optimalCells":31,"manhattan":{"expansions":119,"pops":103,"cells":31},"euclidean":{"expansions":116,"pops":98,"cells":31}},{"dimension":34,"board":0,"optimalCells":17,"manhattan":{"expansions":96,"pops":63,"cells":17},"euclidean":{"expansions":132,"pops":94,"cells":17}},{"dimension":34,"board":1,"optimalCells":26,"manhattan":{"expansions":168,"pops":145,"cells":26},"euclidean":{"expansions":154,"pops":132,"cells":26}},{"dimension":34,"board":2,"optimalCells":8,"manhattan":{"expansions":22,"pops":8,"cells":8},"euclidean":{"expansions":22,"pops":8,"cells":8}},{"dimension":34,"board":3,"optimalCells":16,"manhattan":{"expansions":45,"pops":16,"cells":16},"euclidean":{"expansions":45,"pops":16,"cells":16}},{"dimension":34,"board":4,"optimalCells":10,"manhattan":{"expansions":28,"pops":12,"cells":12},"euclidean":{"expansions":25,"pops":11,"cells":11}},{"dimension":34,"board":5,"optimalCells":6,"manhattan":{"expansions":22,"pops":12,"cells":6},"euclidean":{"expansions":13,"pops":6,"cells":6}},{"dimension":34,"board":6,"optimalCells":26,"manhattan":{"expansions":108,"pops":72,"cells":28},"euclidean":{"expansions":115,"pops":71,"cells":26}},{"dimension":34,"board":7,"optimalCells":18,"manhattan":{"expansions":68,"pops":39,"cells":18},"euclidean":{"expansions":100,"pops":67,"cells":18}},{"dimension":34,"board":8,"optimalCells":33,"manhattan":{"expansions":191,"pops":168,"cells":33},"euclidean":{"expansions":192,"pops":171,"cells":33}},{"dimension":34,"board":9,"optimalCells":16,"manhattan":{"expansions":78,"pops":55,"cells":16},"euclidean":{"expansions":104,"pops":78,"cells":16}},{"dimension":35,"board":0,"optimalCells":30,"manhattan":{"expansions":73,"pops":46,"cells":30},"euclidean":{"expansions":111,"pops":76,"cells":30}},{"dimension":35,"board":1,"optimalCells":25,"manhattan":{"expansions":73,"pops":25,"cells":25},"euclidean":{"expansions":73,"pops":25,"cells":25}},{"dimension":35,"board":2,"optimalCells":16,"manhattan":{"expansions":71,"pops":52,"cells":19},"euclidean":{"expansions":42,"pops":23,"cells":16}},{"dimension":35,"board":3,"optimalCells":43,"manhattan":{"expansions":551,"pops":467,"cells":43},"euclidean":{"expansions":696,"pops":619,"cells":43}},{"dimension":35,"board":4,"optimalCells":7,"manhattan":{"expansions":21,"pops":7,"cells":7},"euclidean":{"expansions":21,"pops":7,"cells":7}},{"dimension":35,"board":5,"optimalCells":17,"manhattan":{"expansions":69,"pops":35,"cells":18},"euclidean":{"expansions":111,"pops":70,"cells":18}},{"dimension":35,"board":6,"optimalCells":null,"manhattan":{"expansions":517,"pops":518,"cells":0},"euclidean":{"expansions":511,"pops":512,"cells":0}},{"dimension":35,"board":7,"optimalCells":13,"manhattan":{"expansions":28,"pops":13,"cells":13},"euclidean":{"expansions":28,"pops":13,"cells":13}},{"dimension":35,"board":8,"optimalCells":9,"manhattan":{"expansions":25,"pops":9,"cells":9},"euclidean":{"expansions":25,"pops":9,"cells":9}},{"dimension":35,"board":9,"optimalCells":45,"manhattan":{"expansions":484,"pops":452,"cells":45},"euclidean":{"expansions":441,"pops":418,"cells":45}},{"dimension":36,"board":0,"optimalCells":21,"manhattan":{"expansions":63,"pops":44,"cells":21},"euclidean":{"expansions":76,"pops":57,"cells":21}},{"dimension":36,"board":1,"optimalCells":37,"manhattan":{"expansions":228,"pops":178,"cells":38},"euclidean":{"expansions":336,"pops":289,"cells":38}},{"dimension":36,"board":2,"optimalCells":27,"manhattan":{"expansions":110,"pops":81,"cells":27},"euclidean":{"expansions":147,"pops":120,"cells":27}},{"dimension":36,"board":3,"optimalCells":43,"manhattan":{"expansions":221,"pops":185,"cells":43},"euclidean":{"expansions":295,"pops":266,"cells":43}},{"dimension":36,"board":4,"optimalCells":48,"manhattan":{"expansions":668,"pops":578,"cells":48},"euclidean":{"expansions":828,"pops":752,"cells":48}},{"dimension":36,"board":5,"optimalCells":35,"manhattan":{"expansions":282,"pops":221,"cells":35},"euclidean":{"expansions":307,"pops":261,"cells":35}},{"dimension":36,"board":6,"optimalCells":29,"manhattan":{"expansions":103,"pops":68,"cells":29},"euclidean":{"expansions":211,"pops":174,"cells":29}},{"dimension":36,"board":7,"optimalCells":27,"manhattan":{"expansions":93,"pops":44,"cells":28},"euclidean":{"expansions":138,"pops":84,"cells":28}},{"dimension":36,"board":8,"optimalCells":19,"manhattan":{"expansions":48,"pops":33,"cells":19},"euclidean":{"expansions":54,"pops":40,"cells":19}},{"dimension":36,"board":9,"optimalCells":17,"manhattan":{"expansions":48,"pops":17,"cells":17},"euclidean":{"expansions":48,"pops":17,"cells":17}},{"dimension":37,"board":0,"optimalCells":31,"manhattan":{"expansions":89,"pops":40,"cells":34},"euclidean":{"expansions":73,"pops":34,"cells":31}},{"dimension":37,"board":1,"optimalCells":15,"manhattan":{"expansions":71,"pops":55,"cells":15},"euclidean":{"expansions":70,"pops":54,"cells":15}},{"dimension":37,"board":2,"optimalCells":63,"manhattan":{"expansions":251,"pops":227,"cells":63},"euclidean":{"expansions":271,"pops":255,"cells":63}},{"dimension":37,"board":3,"optimalCells":12,"manhattan":{"expansions":32,"pops":12,"cells":12},"euclidean":{"expansions":32,"pops":12,"cells":12}},{"dimension":37,"board":4,"optimalCells":53,"manhattan":{"expansions":303,"pops":243,"cells":53},"euclidean":{"expansions":524,"pops":483,"cells":53}},{"dimension":37,"board":5,"optimalCells":12,"manhattan":{"expansions":49,"pops":24,"cells":12},"euclidean":{"expansions":53,"pops":30,"cells":12}},{"dimension":37,"board":6,"optimalCells":19,"manhattan":{"expansions":63,"pops":50,"cells":19},"euclidean":{"expansions":92,"pops":71,"cells":19}},{"dimension":37,"board":7,"optimalCells":21,"manhattan":{"expansions":63,"pops":21,"cells":21},"euclidean":{"expansions":63,"pops":21,"cells":21}},{"dimension":37,"board":8,"optimalCells":14,"manhattan":{"expansions":37,"pops":17,"cells":15},"euclidean":{"expansions":45,"pops":21,"cells":14}},{"dimension":37,"board":9,"optimalCells":20,"manhattan":{"expansions":92,"pops":57,"cells":21},"euclidean":{"expansions":132,"pops":93,"cells":21}},{"dimension":38,"board":0,"optimalCells":14,"manhattan":{"expansions":47,"pops":29,"cells":14},"euclidean":{"expansions":69,"pops":46,"cells":14}},{"dimension":38,"board":1,"optimalCells":27,"manhattan":{"expansions":111,"pops":84,"cells":33},"euclidean":{"expansions":202,"pops":177,"cells":31}},{"dimension":38,"board":2,"optimalCells":25,"manhattan":{"expansions":54,"pops":30,"cells":27},"euclidean":{"expansions":79,"pops":49,"cells":26}},{"dimension":38,"board":3,"optimalCells":34,"manhattan":{"expansions":126,"pops":72,"cells":34},"euclidean":{"expansions":249,"pops":196,"cells":34}},{"dimension":38,"board":4,"optimalCells":28,"manhattan":{"expansions":99,"pops":57,"cells":30},"euclidean":{"expansions":154,"pops":100,"cells":28}},{"dimension":38,"board":5,"optimalCells":40,"manhattan":{"expansions":200,"pops":147,"cells":40},"euclidean":{"expansions":352,"pops":305,"cells":40}},{"dimension":38,"board":6,"optimalCells":34,"manhattan":{"expansions":320,"pops":262,"cells":34},"euclidean":{"expansions":444,"pops":378,"cells":34}},{"dimension":38,"board":7,"optimalCells":18,"manhattan":{"expansions":60,"pops":32,"cells":18},"euclidean":{"expansions":99,"pops":66,"cells":18}},{"dimension":38,"board":8,"optimalCells":20,"manhattan":{"expansions":113,"pops":89,"cells":20},"euclidean":{"expansions":83,"pops":54,"cells":20}},{"dimension":38,"board":9,"optimalCells":15,"manhattan":{"expansions":33,"pops":26,"cells":16},"euclidean":{"expansions":31,"pops":23,"cells":16}},{"dimension":39,"board":0,"optimalCells":null,"manhattan":{"expansions":57,"pops":58,"cells":0},"euclidean":{"expansions":57,"pops":58,"cells":0}},{"dimension":39,"board":1,"optimalCells":35,"manhattan":{"expansions":79,"pops":58,"cells":35},"euclidean":{"expansions":72,"pops":54,"cells":35}},{"dimension":39,"board":2,"optimalCells":13,"manhattan":{"expansions":41,"pops":17,"cells":13},"euclidean":{"expansions":39,"pops":16,"cells":13}},{"dimension":39,"board":3,"optimalCells":21,"manhattan":{"expansions":40,"pops":23,"cells":21},"euclidean":{"expansions":41,"pops":25,"cells":21}},{"dimension":39,"board":4,"optimalCells":15,"manhattan":{"expansions":44,"pops":27,"cells":15},"euclidean":{"expansions":76,"pops":52,"cells":15}},{"dimension":39,"board":5,"optimalCells":31,"manhattan":{"expansions":138,"pops":90,"cells":31},"euclidean":{"expansions":336,"pops":266,"cells":31}},{"dimension":39,"board":6,"optimalCells":11,"manhattan":{"expansions":31,"pops":13,"cells":13},"euclidean":{"expansions":27,"pops":11,"cells":11}},{"dimension":39,"board":7,"optimalCells":19,"manhattan":{"expansions":56,"pops":34,"cells":20},"euclidean":{"expansions":80,"pops":59,"cells":20}},{"dimension":39,"board":8,"optimalCells":85,"manhattan":{"expansions":497,"pops":479,"cells":85},"euclidean":{"expansions":527,"pops":511,"cells":85}},{"dimension":39,"board":9,"optimalCells":27,"manhattan":{"expansions":75,"pops":52,"cells":27},"euclidean":{"expansions":77,"pops":55,"cells":27}},{"dimension":40,"board":0,"optimalCells":19,"manhattan":{"expansions":58,"pops":38,"cells":19},"euclidean":{"expansions":82,"pops":56,"cells":19}},{"dimension":40,"board":1,"optimalCells":51,"manhattan":{"expansions":269,"pops":205,"cells":51},"euclidean":{"expansions":621,"pops":553,"cells":51}},{"dimension":40,"board":2,"optimalCells":47,"manhattan":{"expansions":148,"pops":98,"cells":49},"euclidean":{"expansions":217,"pops":161,"cells":49}},{"dimension":40,"board":3,"optimalCells":9,"manhattan":{"expansions":25,"pops":9,"cells":9},"euclidean":{"expansions":25,"pops":9,"cells":9}},{"dimension":40,"board":4,"optimalCells":60,"manhattan":{"expansions":553,"pops":465,"cells":60},"euclidean":{"expansions":781,"pops":733,"cells":60}},{"dimension":40,"board":5,"optimalCells":29,"manhattan":{"expansions":135,"pops":104,"cells":29},"euclidean":{"expansions":183,"pops":155,"cells":29}},{"dimension":40,"board":6,"optimalCells":31,"manhattan":{"expansions":104,"pops":79,"cells":31},"euclidean":{"expansions":211,"pops":168,"cells":31}},{"dimension":40,"board":7,"optimalCells":17,"manhattan":{"expansions":49,"pops":17,"cells":17},"euclidean":{"expansions":49,"pops":17,"cells":17}},{"dimension":40,"board":8,"optimalCells":20,"manhattan":{"expansions":83,"pops":48,"cells":21},"euclidean":{"expansions":98,"pops":73,"cells":21}},{"dimension":40,"board":9,"optimalCells":8,"manhattan":{"expansions":23,"pops":8,"cells":8},"euclidean":{"expansions":23,"pops":8,"cells":8}},{"dimension":41,"board":0,"optimalCells":24,"manhattan":{"expansions":93,"pops":60,"cells":24},"euclidean":{"expansions":155,"pops":111,"cells":24}},{"dimension":41,"board":1,"optimalCells":68,"manhattan":{"expansions":631,"pops":538,"cells":68},"euclidean":{"expansions":1030,"pops":979,"cells":68}},{"dimension":41,"board":2,"optimalCells":54,"manhattan":{"expansions":283,"pops":246,"cells":56},"euclidean":{"expansions":235,"pops":206,"cells":54}},{"dimension":41,"board":3,"optimalCells":27,"manhattan":{"expansions":68,"pops":27,"cells":27},"euclidean":{"expansions":68,"pops":27,"cells":27}},{"dimension":41,"board":4,"optimalCells":12,"manhattan":{"expansions":29,"pops":12,"cells":12},"euclidean":{"expansions":31,"pops":14,"cells":12}},{"dimension":41,"board":5,"optimalCells":null,"manhattan":{"expansions":700,"pops":701,"cells":0},"euclidean":{"expansions":691,"pops":692,"cells":0}},{"dimension":41,"board":6,"optimalCells":60,"manhattan":{"expansions":390,"pops":362,"cells":60},"euclidean":{"expansions":396,"pops":368,"cells":60}},{"dimension":41,"board":7,"optimalCells":26,"manhattan":{"expansions":114,"pops":76,"cells":26},"euclidean":{"expansions":172,"pops":130,"cells":26}},{"dimension":41,"board":8,"optimalCells":24,"manhattan":{"expansions":66,"pops":24,"cells":24},"euclidean":{"expansions":66,"pops":24,"cells":24}},{"dimension":41,"board":9,"optimalCells":36,"manhattan":{"expansions":202,"pops":178,"cells":37},"euclidean":{"expansions":207,"pops":189,"cells":37}},{"dimension":42,"board":0,"optimalCells":40,"manhattan":{"expansions":258,"pops":181,"cells":40},"euclidean":{"expansions":483,"pops":417,"cells":40}},{"dimension":42,"board":1,"optimalCells":13,"manhattan":{"expansions":46,"pops":28,"cells":13},"euclidean":{"expansions":54,"pops":35,"cells":13}},{"dimension":42,"board":2,"optimalCells":39,"manhattan":{"expansions":251,"pops":205,"cells":39},"euclidean":{"expansions":436,"pops":390,"cells":39}},{"dimension":42,"board":3,"optimalCells":31,"manhattan":{"expansions":80,"pops":62,"cells":31},"euclidean":{"expansions":117,"pops":97,"cells":31}},{"dimension":42,"board":4,"optimalCells":55,"manhattan":{"expansions":449,"pops":417,"cells":55},"euclidean":{"expansions":507,"pops":479,"cells":55}},{"dimension":42,"board":5,"optimalCells":19,"manhattan":{"expansions":103,"pops":64,"cells":19},"euclidean":{"expansions":155,"pops":109,"cells":19}},{"dimension":42,"board":6,"optimalCells":26,"manhattan":{"expansions":70,"pops":56,"cells":26},"euclidean":{"expansions":84,"pops":69,"cells":26}},{"dimension":42,"board":7,"optimalCells":11,"manhattan":{"expansions":27,"pops":13,"cells":11},"euclidean":{"expansions":25,"pops":13,"cells":11}},{"dimension":42,"board":8,"optimalCells":57,"manhattan":{"expansions":718,"pops":620,"cells":57},"euclidean":{"expansions":1007,"pops":902,"cells":57}},{"dimension":42,"board":9,"optimalCells":27,"manhattan":{"expansions":106,"pops":68,"cells":27},"euclidean":{"expansions":165,"pops":124,"cells":27}},{"dimension":43,"board":0,"optimalCells":null,"manhattan":{"expansions":7,"pops":8,"cells":0},"euclidean":{"expansions":7,"pops":8,"cells":0}},{"dimension":43,"board":1,"optimalCells":67,"manhattan":{"expansions":507,"pops":492,"cells":67},"euclidean":{"expansions":596,"pops":585,"cells":67}},{"dimension":43,"board":2,"optimalCells":4,"manhattan":{"expansions":9,"pops":5,"cells":4},"euclidean":{"expansions":9,"pops":5,"cells":4}},{"dimension":43,"board":3,"optimalCells":32,"manhattan":{"expansions":236,"pops":196,"cells":32},"euclidean":{"expansions":394,"pops":332,"cells":32}},{"dimension":43,"board":4,"optimalCells":13,"manhattan":{"expansions":29,"pops":13,"cells":13},"euclidean":{"expansions":29,"pops":13,"cells":13}},{"dimension":43,"board":5,"optimalCells":39,"manhattan":{"expansions":141,"pops":97,"cells":39},"euclidean":{"expansions":311,"pops":272,"cells":39}},{"dimension":43,"board":6,"optimalCells":35,"manhattan":{"expansions":153,"pops":93,"cells":39},"euclidean":{"expansions":184,"pops":114,"cells":36}},{"dimension":43,"board":7,"optimalCells":6,"manhattan":{"expansions":11,"pops":7,"cells":6},"euclidean":{"expansions":11,"pops":7,"cells":6}},{"dimension":43,"board":8,"optimalCells":26,"manhattan":{"expansions":65,"pops":39,"cells":26},"euclidean":{"expansions":103,"pops":72,"cells":26}},{"dimension":43,"board":9,"optimalCells":42,"manhattan":{"expansions":212,"pops":189,"cells":45},"euclidean":{"expansions":275,"pops":249,"cells":42}},{"dimension":44,"board":0,"optimalCells":37,"manhattan":{"expansions":119,"pops":80,"cells":37},"euclidean":{"expansions":380,"pops":315,"cells":37}},{"dimension":44,"board":1,"optimalCells":15,"manhattan":{"expansions":32,"pops":19,"cells":16},"euclidean":{"expansions":42,"pops":26,"cells":15}},{"dimension":44,"board":2,"optimalCells":17,"manhattan":{"expansions":66,"pops":50,"cells":17},"euclidean":{"expansions":61,"pops":46,"cells":17}},{"dimension":44,"board":3,"optimalCells":null,"manhattan":{"expansions":224,"pops":225,"cells":0},"euclidean":{"expansions":204,"pops":205,"cells":0}},{"dimension":44,"board":4,"optimalCells":40,"manhattan":{"expansions":244,"pops":198,"cells":40},"euclidean":{"expansions":115,"pops":82,"cells":40}},{"dimension":44,"board":5,"optimalCells":19,"manhattan":{"expansions":79,"pops":69,"cells":19},"euclidean":{"expansions":73,"pops":64,"cells":19}},{"dimension":44,"board":6,"optimalCells":19,"manhattan":{"expansions":134,"pops":95,"cells":19},"euclidean":{"expansions":185,"pops":137,"cells":19}},{"dimension":44,"board":7,"optimalCells":34,"manhattan":{"expansions":210,"pops":163,"cells":34},"euclidean":{"expansions":424,"pops":353,"cells":34}},{"dimension":44,"board":8,"optimalCells":39,"manhattan":{"expansions":260,"pops":214,"cells":39},"euclidean":{"expansions":346,"pops":305,"cells":39}},{"dimension":44,"board":9,"optimalCells":25,"manhattan":{"expansions":157,"pops":112,"cells":25},"euclidean":{"expansions":230,"pops":182,"cells":25}},{"dimension":45,"board":0,"optimalCells":19,"manhattan":{"expansions":119,"pops":82,"cells":19},"euclidean":{"expansions":166,"pops":118,"cells":19}},{"dimension":45,"board":1,"optimalCells":38,"manhattan":{"expansions":175,"pops":117,"cells":38},"euclidean":{"expansions":437,"pops":365,"cells":38}},{"dimension":45,"board":2,"optimalCells":25,"manhattan":{"expansions":111,"pops":79,"cells":25},"euclidean":{"expansions":150,"pops":119,"cells":25}},{"dimension":45,"board":3,"optimalCells":19,"manhattan":{"expansions":71,"pops":34,"cells":23},"euclidean":{"expansions":51,"pops":24,"cells":19}},{"dimension":45,"board":4,"optimalCells":null,"manhattan":{"expansions":8,"pops":9,"cells":0},"euclidean":{"expansions":8,"pops":9,"cells":0}},{"dimension":45,"board":5,"optimalCells":40,"manhattan":{"expansions":164,"pops":124,"cells":41},"euclidean":{"expansions":364,"pops":325,"cells":40}},{"dimension":45,"board":6,"optimalCells":17,"manhattan":{"expansions":58,"pops":26,"cells":20},"euclidean":{"expansions":53,"pops":23,"cells":17}},{"dimension":45,"board":7,"optimalCells":52,"manhattan":{"expansions":359,"pops":277,"cells":52},"euclidean":{"expansions":646,"pops":565,"cells":52}},{"dimension":45,"board":8,"optimalCells":17,"manhattan":{"expansions":69,"pops":51,"cells":17},"euclidean":{"expansions":66,"pops":48,"cells":17}},{"dimension":45,"board":9,"optimalCells":57,"manhattan":{"expansions":516,"pops":437,"cells":57},"euclidean":{"expansions":882,"pops":823,"cells":57}},{"dimension":46,"board":0,"optimalCells":null,"manhattan":{"expansions":319,"pops":320,"cells":0},"euclidean":{"expansions":318,"pops":319,"cells":0}},{"dimension":46,"board":1,"optimalCells":21,"manhattan":{"expansions":83,"pops":49,"cells":21},"euclidean":{"expansions":131,"pops":93,"cells":21}},{"dimension":46,"board":2,"optimalCells":33,"manhattan":{"expansions":129,"pops":92,"cells":33},"euclidean":{"expansions":310,"pops":255,"cells":33}},{"dimension":46,"board":3,"optimalCells":10,"manhattan":{"expansions":29,"pops":10,"cells":10},"euclidean":{"expansions":29,"pops":10,"cells":10}},{"dimension":46,"board":4,"optimalCells":41,"manhattan":{"expansions":94,"pops":60,"cells":44},"euclidean":{"expansions":118,"pops":76,"cells":42}},{"dimension":46,"board":5,"optimalCells":9,"manhattan":{"expansions":18,"pops":11,"cells":9},"euclidean":{"expansions":17,"pops":10,"cells":9}},{"dimension":46,"board":6,"optimalCells":13,"manhattan":{"expansions":46,"pops":34,"cells":13},"euclidean":{"expansions":54,"pops":40,"cells":13}},{"dimension":46,"board":7,"optimalCells":9,"manhattan":{"expansions":26,"pops":13,"cells":9},"euclidean":{"expansions":30,"pops":18,"cells":9}},{"dimension":46,"board":8,"optimalCells":null,"manhattan":{"expansions":5,"pops":6,"cells":0},"euclidean":{"expansions":5,"pops":6,"cells":0}},{"dimension":46,"board":9,"optimalCells":3,"manhattan":{"expansions":6,"pops":3,"cells":3},"euclidean":{"expansions":6,"pops":3,"cells":3}},{"dimension":47,"board":0,"optimalCells":41,"manhattan":{"expansions":226,"pops":195,"cells":41},"euclidean":{"expansions":221,"pops":196,"cells":41}},{"dimension":47,"board":1,"optimalCells":70,"manhattan":{"expansions":572,"pops":465,"cells":70},"euclidean":{"expansions":1255,"pops":1168,"cells":70}},{"dimension":47,"board":2,"optimalCells":46,"manhattan":{"expansions":268,"pops":219,"cells":46},"euclidean":{"expansions":534,"pops":469,"cells":46}},{"dimension":47,"board":3,"optimalCells":29,"manhattan":{"expansions":81,"pops":40,"cells":30},"euclidean":{"expansions":85,"pops":51,"cells":29}},{"dimension":47,"board":4,"optimalCells":21,"manhattan":{"expansions":116,"pops":91,"cells":21},"euclidean":{"expansions":186,"pops":145,"cells":21}},{"dimension":47,"board":5,"optimalCells":33,"manhattan":{"expansions":105,"pops":47,"cells":38},"euclidean":{"expansions":96,"pops":38,"cells":34}},{"dimension":47,"board":6,"optimalCells":null,"manhattan":{"expansions":1572,"pops":1573,"cells":0},"euclidean":{"expansions":1391,"pops":1392,"cells":0}},{"dimension":47,"board":7,"optimalCells":25,"manhattan":{"expansions":73,"pops":25,"cells":25},"euclidean":{"expansions":73,"pops":25,"cells":25}},{"dimension":47,"board":8,"optimalCells":30,"manhattan":{"expansions":130,"pops":84,"cells":30},"euclidean":{"expansions":249,"pops":189,"cells":30}},{"dimension":47,"board":9,"optimalCells":39,"manhattan":{"expansions":199,"pops":127,"cells":44},"euclidean":{"expansions":330,"pops":236,"cells":39}},{"dimension":48,"board":0,"optimalCells":23,"manhattan":{"expansions":78,"pops":37,"cells":26},"euclidean":{"expansions":85,"pops":46,"cells":24}},{"dimension":48,"board":1,"optimalCells":41,"manhattan":{"expansions":162,"pops":92,"cells":42},"euclidean":{"expansions":377,"pops":276,"cells":42}},{"dimension":48,"board":2,"optimalCells":21,"manhattan":{"expansions":156,"pops":118,"cells":21},"euclidean":{"expansions":180,"pops":149,"cells":21}},{"dimension":48,"board":3,"optimalCells":29,"manhattan":{"expansions":109,"pops":53,"cells":29},"euclidean":{"expansions":188,"pops":118,"cells":29}},{"dimension":48,"board":4,"optimalCells":37,"manhattan":{"expansions":254,"pops":195,"cells":37},"euclidean":{"expansions":447,"pops":377,"cells":37}},{"dimension":48,"board":5,"optimalCells":46,"manhattan":{"expansions":605,"pops":516,"cells":46},"euclidean":{"expansions":959,"pops":834,"cells":46}},{"dimension":48,"board":6,"optimalCells":33,"manhattan":{"expansions":98,"pops":33,"cells":33},"euclidean":{"expansions":98,"pops":33,"cells":33}},{"dimension":48,"board":7,"optimalCells":26,"manhattan":{"expansions":107,"pops":67,"cells":29},"euclidean":{"expansions":155,"pops":105,"cells":27}},{"dimension":48,"board":8,"optimalCells":23,"manhattan":{"expansions":75,"pops":37,"cells":28},"euclidean":{"expansions":59,"pops":26,"cells":24}},{"dimension":48,"board":9,"optimalCells":57,"manhattan":{"expansions":304,"pops":256,"cells":57},"euclidean":{"expansions":428,"pops":374,"cells":57}},{"dimension":49,"board":0,"optimalCells":30,"manhattan":{"expansions":54,"pops":37,"cells":30},"euclidean":{"expansions":65,"pops":54,"cells":30}},{"dimension":49,"board":1,"optimalCells":40,"manhattan":{"expansions":241,"pops":200,"cells":40},"euclidean":{"expansions":339,"pops":298,"cells":40}},{"dimension":49,"board":2,"optimalCells":null,"manhattan":{"expansions":149,"pops":150,"cells":0},"euclidean":{"expansions":149,"pops":150,"cells":0}},{"dimension":49,"board":3,"optimalCells":50,"manhattan":{"expansions":436,"pops":350,"cells":50},"euclidean":{"expansions":866,"pops":746,"cells":50}},{"dimension":49,"board":4,"optimalCells":28,"manhattan":{"expansions":194,"pops":161,"cells":28},"euclidean":{"expansions":194,"pops":159,"cells":28}},{"dimension":49,"board":5,"optimalCells":17,"manhattan":{"expansions":80,"pops":48,"cells":17},"euclidean":{"expansions":93,"pops":68,"cells":17}},{"dimension":49,"board":6,"optimalCells":18,"manhattan":{"expansions":61,"pops":30,"cells":19},"euclidean":{"expansions":79,"pops":47,"cells":19}},{"dimension":49,"board":7,"optimalCells":10,"manhattan":{"expansions":39,"pops":18,"cells":11},"euclidean":{"expansions":47,"pops":23,"cells":11}},{"dimension":49,"board":8,"optimalCells":9,"manhattan":{"expansions":20,"pops":10,"cells":10},"euclidean":{"expansions":20,"pops":9,"cells":9}},{"dimension":49,"board":9,"optimalCells":50,"manhattan":{"expansions":651,"pops":561,"cells":50},"euclidean":{"expansions":976,"pops":865,"cells":50}},{"dimension":50,"board":0,"optimalCells":40,"manhattan":{"expansions":321,"pops":255,"cells":40},"euclidean":{"expansions":556,"pops":471,"cells":40}},{"dimension":50,"board":1,"optimalCells":38,"manhattan":{"expansions":332,"pops":259,"cells":38},"euclidean":{"expansions":567,"pops":467,"cells":38}},{"dimension":50,"board":2,"optimalCells":36,"manhattan":{"expansions":286,"pops":221,"cells":36},"euclidean":{"expansions":465,"pops":380,"cells":36}},{"dimension":50,"board":3,"optimalCells":26,"manhattan":{"expansions":191,"pops":145,"cells":26},"euclidean":{"expansions":292,"pops":230,"cells":26}},{"dimension":50,"board":4,"optimalCells":54,"manhattan":{"expansions":366,"pops":285,"cells":54},"euclidean":{"expansions":462,"pops":411,"cells":54}},{"dimension":50,"board":5,"optimalCells":35,"manhattan":{"expansions":124,"pops":59,"cells":36},"euclidean":{"expansions":206,"pops":123,"cells":36}},{"dimension":50,"board":6,"optimalCells":33,"manhattan":{"expansions":220,"pops":189,"cells":33},"euclidean":{"expansions":243,"pops":216,"cells":33}},{"dimension":50,"board":7,"optimalCells":null,"manhattan":{"expansions":705,"pops":706,"cells":0},"euclidean":{"expansions":667,"pops":668,"cells":0}},{"dimension":50,"board":8,"optimalCells":49,"manhattan":{"expansions":630,"pops":541,"cells":49},"euclidean":{"expansions":1044,"pops":912,"cells":49}},{"dimension":50,"board":9,"optimalCells":69,"manhattan":{"expansions":1353,"pops":1214,"cells":69},"euclidean":{"expansions":1676,"pops":1580,"cells":69}},{"dimension":51,"board":0,"optimalCells":4,"manhattan":{"expansions":12,"pops":4,"cells":4},"euclidean":{"expansions":12,"pops":4,"cells":4}},{"dimension":51,"board":1,"optimalCells":null,"manhattan":{"expansions":686,"pops":687,"cells":0},"euclidean":{"expansions":683,"pops":684,"cells":0}},{"dimension":51,"board":2,"optimalCells":25,"manhattan":{"expansions":53,"pops":27,"cells":25},"euclidean":{"expansions":56,"pops":32,"cells":25}},{"dimension":51,"board":3,"optimalCells":33,"manhattan":{"expansions":176,"pops":106,"cells":34},"euclidean":{"expansions":290,"pops":221,"cells":34}},{"dimension":51,"board":4,"optimalCells":14,"manhattan":{"expansions":61,"pops":35,"cells":14},"euclidean":{"expansions":86,"pops":55,"cells":14}},{"dimension":51,"board":5,"optimalCells":23,"manhattan":{"expansions":66,"pops":23,"cells":23},"euclidean":{"expansions":66,"pops":23,"cells":23}},{"dimension":51,"board":6,"optimalCells":27,"manhattan":{"expansions":79,"pops":27,"cells":27},"euclidean":{"expansions":79,"pops":27,"cells":27}},{"dimension":51,"board":7,"optimalCells":53,"manhattan":{"expansions":492,"pops":396,"cells":53},"euclidean":{"expansions":778,"pops":699,"cells":53}},{"dimension":51,"board":8,"optimalCells":5,"manhattan":{"expansions":11,"pops":5,"cells":5},"euclidean":{"expansions":11,"pops":5,"cells":5}},{"dimension":51,"board":9,"optimalCells":19,"manhattan":{"expansions":81,"pops":52,"cells":24},"euclidean":{"expansions":64,"pops":36,"cells":19}},{"dimension":52,"board":0,"optimalCells":13,"manhattan":{"expansions":44,"pops":21,"cells":13},"euclidean":{"expansions":52,"pops":32,"cells":13}},{"dimension":52,"board":1,"optimalCells":66,"manhattan":{"expansions":378,"pops":280,"cells":66},"euclidean":{"expansions":936,"pops":871,"cells":66}},{"dimension":52,"board":2,"optimalCells":39,"manhattan":{"expansions":125,"pops":51,"cells":40},"euclidean":{"expansions":185,"pops":98,"cells":40}},{"dimension":52,"board":3,"optimalCells":22,"manhattan":{"expansions":76,"pops":45,"cells":24},"euclidean":{"expansions":98,"pops":64,"cells":23}},{"dimension":52,"board":4,"optimalCells":62,"manhattan":{"expansions":372,"pops":313,"cells":62},"euclidean":{"expansions":660,"pops":595,"cells":62}},{"dimension":52,"board":5,"optimalCells":18,"manhattan":{"expansions":68,"pops":33,"cells":18},"euclidean":{"expansions":101,"pops":55,"cells":18}},{"dimension":52,"board":6,"optimalCells":61,"manhattan":{"expansions":963,"pops":852,"cells":61},"euclidean":{"expansions":1310,"pops":1183,"cells":61}},{"dimension":52,"board":7,"optimalCells":22,"manhattan":{"expansions":61,"pops":29,"cells":23},"euclidean":{"expansions":82,"pops":45,"cells":23}},{"dimension":52,"board":8,"optimalCells":32,"manhattan":{"expansions":150,"pops":110,"cells":33},"euclidean":{"expansions":159,"pops":130,"cells":33}},{"dimension":52,"board":9,"optimalCells":63,"manhattan":{"expansions":494,"pops":478,"cells":63},"euclidean":{"expansions":515,"pops":495,"cells":63}},{"dimension":53,"board":0,"optimalCells":66,"manhattan":{"expansions":549,"pops":431,"cells":66},"euclidean":{"expansions":963,"pops":891,"cells":66}},{"dimension":53,"board":1,"optimalCells":38,"manhattan":{"expansions":182,"pops":155,"cells":38},"euclidean":{"expansions":272,"pops":239,"cells":38}},{"dimension":53,"board":2,"optimalCells":62,"manhattan":{"expansions":761,"pops":637,"cells":62},"euclidean":{"expansions":1328,"pops":1205,"cells":62}},{"dimension":53,"board":3,"optimalCells":49,"manhattan":{"expansions":318,"pops":236,"cells":51},"euclidean":{"expansions":468,"pops":402,"cells":50}},{"dimension":53,"board":4,"optimalCells":36,"manhattan":{"expansions":159,"pops":106,"cells":42},"euclidean":{"expansions":154,"pops":108,"cells":37}},{"dimension":53,"board":5,"optimalCells":32,"manhattan":{"expansions":271,"pops":239,"cells":32},"euclidean":{"expansions":291,"pops":256,"cells":32}},{"dimension":53,"board":6,"optimalCells":20,"manhattan":{"expansions":94,"pops":67,"cells":22},"euclidean":{"expansions":68,"pops":46,"cells":20}},{"dimension":53,"board":7,"optimalCells":52,"manhattan":{"expansions":115,"pops":69,"cells":55},"euclidean":{"expansions":129,"pops":82,"cells":52}},{"dimension":53,"board":8,"optimalCells":12,"manhattan":{"expansions":58,"pops":38,"cells":12},"euclidean":{"expansions":56,"pops":38,"cells":12}},{"dimension":53,"board":9,"optimalCells":9,"manhattan":{"expansions":34,"pops":17,"cells":9},"euclidean":{"expansions":42,"pops":23,"cells":9}},{"dimension":54,"board":0,"optimalCells":40,"manhattan":{"expansions":401,"pops":326,"cells":40},"euclidean":{"expansions":676,"pops":570,"cells":40}},{"dimension":54,"board":1,"optimalCells":20,"manhattan":{"expansions":65,"pops":56,"cells":20},"euclidean":{"expansions":67,"pops":55,"cells":20}},{"dimension":54,"board":2,"optimalCells":30,"manhattan":{"expansions":280,"pops":220,"cells":30},"euclidean":{"expansions":419,"pops":339,"cells":30}},{"dimension":54,"board":3,"optimalCells":40,"manhattan":{"expansions":302,"pops":259,"cells":40},"euclidean":{"expansions":428,"pops":377,"cells":40}},{"dimension":54,"board":4,"optimalCells":40,"manhattan":{"expansions":392,"pops":367,"cells":40},"euclidean":{"expansions":461,"pops":421,"cells":40}},{"dimension":54,"board":5,"optimalCells":23,"manhattan":{"expansions":55,"pops":38,"cells":23},"euclidean":{"expansions":81,"pops":66,"cells":23}},{"dimension":54,"board":6,"optimalCells":72,"manhattan":{"expansions":623,"pops":533,"cells":72},"euclidean":{"expansions":1000,"pops":946,"cells":72}},{"dimension":54,"board":7,"optimalCells":63,"manhattan":{"expansions":431,"pops":404,"cells":63},"euclidean":{"expansions":473,"pops":442,"cells":63}},{"dimension":54,"board":8,"optimalCells":39,"manhattan":{"expansions":134,"pops":57,"cells":40},"euclidean":{"expansions":252,"pops":157,"cells":40}},{"dimension":54,"board":9,"optimalCells":26,"manhattan":{"expansions":75,"pops":28,"cells":28},"euclidean":{"expansions":72,"pops":26,"cells":26}},{"dimension":55,"board":0,"optimalCells":52,"manhattan":{"expansions":237,"pops":155,"cells":52},"euclidean":{"expansions":592,"pops":476,"cells":52}},{"dimension":55,"board":1,"optimalCells":28,"manhattan":{"expansions":118,"pops":88,"cells":28},"euclidean":{"expansions":169,"pops":138,"cells":28}},{"dimension":55,"board":2,"optimalCells":30,"manhattan":{"expansions":293,"pops":257,"cells":30},"euclidean":{"expansions":310,"pops":269,"cells":30}},{"dimension":55,"board":3,"optimalCells":31,"manhattan":{"expansions":100,"pops":70,"cells":31},"euclidean":{"expansions":162,"pops":125,"cells":31}},{"dimension":55,"board":4,"optimalCells":47,"manhattan":{"expansions":266,"pops":174,"cells":47},"euclidean":{"expansions":604,"pops":495,"cells":47}},{"dimension":55,"board":5,"optimalCells":27,"manhattan":{"expansions":94,"pops":66,"cells":27},"euclidean":{"expansions":157,"pops":125,"cells":27}},{"dimension":55,"board":6,"optimalCells":18,"manhattan":{"expansions":52,"pops":36,"cells":18},"euclidean":{"expansions":67,"pops":52,"cells":18}},{"dimension":55,"board":7,"optimalCells":58,"manhattan":{"expansions":470,"pops":409,"cells":67},"euclidean":{"expansions":263,"pops":203,"cells":58}},{"dimension":55,"board":8,"optimalCells":30,"manhattan":{"expansions":197,"pops":156,"cells":30},"euclidean":{"expansions":257,"pops":214,"cells":30}},{"dimension":55,"board":9,"optimalCells":40,"manhattan":{"expansions":159,"pops":88,"cells":46},"euclidean":{"expansions":93,"pops":40,"cells":40}},{"dimension":56,"board":0,"optimalCells":17,"manhattan":{"expansions":69,"pops":51,"cells":17},"euclidean":{"expansions":74,"pops":56,"cells":17}},{"dimension":56,"board":1,"optimalCells":28,"manhattan":{"expansions":76,"pops":29,"cells":28},"euclidean":{"expansions":76,"pops":29,"cells":28}},{"dimension":56,"board":2,"optimalCells":15,"manhattan":{"expansions":76,"pops":52,"cells":15},"euclidean":{"expansions":108,"pops":75,"cells":15}},{"dimension":56,"board":3,"optimalCells":53,"manhattan":{"expansions":366,"pops":271,"cells":53},"euclidean":{"expansions":496,"pops":448,"cells":53}},{"dimension":56,"board":4,"optimalCells":56,"manhattan":{"expansions":409,"pops":362,"cells":56},"euclidean":{"expansions":662,"pops":607,"cells":56}},{"dimension":56,"board":5,"optimalCells":30,"manhattan":{"expansions":79,"pops":30,"cells":30},"euclidean":{"expansions":80,"pops":31,"cells":30}},{"dimension":56,"board":6,"optimalCells":53,"manhattan":{"expansions":237,"pops":169,"cells":60},"euclidean":{"expansions":197,"pops":133,"cells":54}},{"dimension":56,"board":7,"optimalCells":32,"manhattan":{"expansions":138,"pops":95,"cells":32},"euclidean":{"expansions":258,"pops":204,"cells":32}},{"dimension":56,"board":8,"optimalCells":75,"manhattan":{"expansions":1244,"pops":1130,"cells":75},"euclidean":{"expansions":2049,"pops":1895,"cells":75}},{"dimension":56,"board":9,"optimalCells":11,"manhattan":{"expansions":24,"pops":13,"cells":11},"euclidean":{"expansions":27,"pops":18,"cells":11}},{"dimension":57,"board":0,"optimalCells":10,"manhattan":{"expansions":25,"pops":10,"cells":10},"euclidean":{"expansions":25,"pops":10,"cells":10}},{"dimension":57,"board":1,"optimalCells":72,"manhattan":{"expansions":518,"pops":488,"cells":72},"euclidean":{"expansions":697,"pops":655,"cells":72}},{"dimension":57,"board":2,"optimalCells":57,"manhattan":{"expansions":677,"pops":633,"cells":58},"euclidean":{"expansions":679,"pops":632,"cells":57}},{"dimension":57,"board":3,"optimalCells":28,"manhattan":{"expansions":84,"pops":28,"cells":28},"euclidean":{"expansions":84,"pops":28,"cells":28}},{"dimension":57,"board":4,"optimalCells":14,"manhattan":{"expansions":67,"pops":42,"cells":14},"euclidean":{"expansions":88,"pops":56,"cells":14}},{"dimension":57,"board":5,"optimalCells":null,"manhattan":{"expansions":4,"pops":5,"cells":0},"euclidean":{"expansions":4,"pops":5,"cells":0}},{"dimension":57,"board":6,"optimalCells":33,"manhattan":{"expansions":210,"pops":154,"cells":33},"euclidean":{"expansions":363,"pops":303,"cells":33}},{"dimension":57,"board":7,"optimalCells":31,"manhattan":{"expansions":119,"pops":75,"cells":31},"euclidean":{"expansions":203,"pops":147,"cells":31}},{"dimension":57,"board":8,"optimalCells":19,"manhattan":{"expansions":76,"pops":44,"cells":19},"euclidean":{"expansions":112,"pops":71,"cells":19}},{"dimension":57,"board":9,"optimalCells":12,"manhattan":{"expansions":38,"pops":21,"cells":12},"euclidean":{"expansions":61,"pops":40,"cells":12}},{"dimension":58,"board":0,"optimalCells":37,"manhattan":{"expansions":299,"pops":257,"cells":37},"euclidean":{"expansions":371,"pops":337,"cells":37}},{"dimension":58,"board":1,"optimalCells":67,"manhattan":{"expansions":1088,"pops":989,"cells":67},"euclidean":{"expansions":1894,"pops":1733,"cells":67}},{"dimension":58,"board":2,"optimalCells":51,"manhattan":{"expansions":422,"pops":367,"cells":51},"euclidean":{"expansions":544,"pops":497,"cells":51}},{"dimension":58,"board":3,"optimalCells":null,"manhattan":{"expansions":329,"pops":330,"cells":0},"euclidean":{"expansions":329,"pops":330,"cells":0}},{"dimension":58,"board":4,"optimalCells":20,"manhattan":{"expansions":55,"pops":34,"cells":20},"euclidean":{"expansions":81,"pops":56,"cells":20}},{"dimension":58,"board":5,"optimalCells":42,"manhattan":{"expansions":124,"pops":42,"cells":42},"euclidean":{"expansions":124,"pops":42,"cells":42}},{"dimension":58,"board":6,"optimalCells":9,"manhattan":{"expansions":16,"pops":9,"cells":9},"euclidean":{"expansions":16,"pops":9,"cells":9}},{"dimension":58,"board":7,"optimalCells":17,"manhattan":{"expansions":42,"pops":17,"cells":17},"euclidean":{"expansions":42,"pops":17,"cells":17}},{"dimension":58,"board":8,"optimalCells":13,"manhattan":{"expansions":58,"pops":33,"cells":13},"euclidean":{"expansions":80,"pops":49,"cells":13}},{"dimension":58,"board":9,"optimalCells":50,"manhattan":{"expansions":730,"pops":629,"cells":50},"euclidean":{"expansions":1138,"pops":1006,"cells":50}},{"dimension":59,"board":0,"optimalCells":31,"manhattan":{"expansions":212,"pops":168,"cells":33},"euclidean":{"expansions":271,"pops":233,"cells":32}},{"dimension":59,"board":1,"optimalCells":25,"manhattan":{"expansions":73,"pops":25,"cells":25},"euclidean":{"expansions":73,"pops":25,"cells":25}},{"dimension":59,"board":2,"optimalCells":45,"manhattan":{"expansions":96,"pops":56,"cells":46},"euclidean":{"expansions":93,"pops":56,"cells":46}},{"dimension":59,"board":3,"optimalCells":11,"manhattan":{"expansions":28,"pops":11,"cells":11},"euclidean":{"expansions":28,"pops":11,"cells":11}},{"dimension":59,"board":4,"optimalCells":49,"manhattan":{"expansions":469,"pops":412,"cells":49},"euclidean":{"expansions":695,"pops":622,"cells":49}},{"dimension":59,"board":5,"optimalCells":50,"manhattan":{"expansions":501,"pops":416,"cells":50},"euclidean":{"expansions":928,"pops":808,"cells":50}},{"dimension":59,"board":6,"optimalCells":24,"manhattan":{"expansions":58,"pops":25,"cells":25},"euclidean":{"expansions":58,"pops":24,"cells":24}},{"dimension":59,"board":7,"optimalCells":53,"manhattan":{"expansions":438,"pops":383,"cells":56},"euclidean":{"expansions":550,"pops":481,"cells":54}},{"dimension":59,"board":8,"optimalCells":null,"manhattan":{"expansions":52,"pops":53,"cells":0},"euclidean":{"expansions":52,"pops":53,"cells":0}},{"dimension":59,"board":9,"optimalCells":null,"manhattan":{"expansions":10,"pops":11,"cells":0},"euclidean":{"expansions":10,"pops":11,"cells":0}},{"dimension":60,"board":0,"optimalCells":13,"manhattan":{"expansions":49,"pops":29,"cells":16},"euclidean":{"expansions":56,"pops":29,"cells":13}},{"dimension":60,"board":1,"optimalCells":null,"manhattan":{"expansions":2050,"pops":2051,"cells":0},"euclidean":{"expansions":1768,"pops":1769,"cells":0}},{"dimension":60,"board":2,"optimalCells":25,"manhattan":{"expansions":92,"pops":47,"cells":25},"euclidean":{"expansions":170,"pops":116,"cells":25}},{"dimension":60,"board":3,"optimalCells":21,"manhattan":{"expansions":79,"pops":36,"cells":22},"euclidean":{"expansions":114,"pops":68,"cells":22}},{"dimension":60,"board":4,"optimalCells":24,"manhattan":{"expansions":106,"pops":74,"cells":25},"euclidean":{"expansions":152,"pops":113,"cells":24}},{"dimension":60,"board":5,"optimalCells":null,"manhattan":{"expansions":2030,"pops":2031,"cells":0},"euclidean":{"expansions":1948,"pops":1949,"cells":0}},{"dimension":60,"board":6,"optimalCells":33,"manhattan":{"expansions":105,"pops":51,"cells":38},"euclidean":{"expansions":81,"pops":33,"cells":33}},{"dimension":60,"board":7,"optimalCells":25,"manhattan":{"expansions":74,"pops":25,"cells":25},"euclidean":{"expansions":74,"pops":25,"cells":25}},{"dimension":60,"board":8,"optimalCells":22,"manhattan":{"expansions":54,"pops":33,"cells":24},"euclidean":{"expansions":95,"pops":61,"cells":22}},{"dimension":60,"board":9,"optimalCells":25,"manhattan":{"expansions":127,"pops":98,"cells":25},"euclidean":{"expansions":155,"pops":122,"cells":25}},{"dimension":61,"board":0,"optimalCells":24,"manhattan":{"expansions":116,"pops":85,"cells":24},"euclidean":{"expansions":142,"pops":112,"cells":24}},{"dimension":61,"board":1,"optimalCells":50,"manhattan":{"expansions":564,"pops":483,"cells":50},"euclidean":{"expansions":896,"pops":786,"cells":50}},{"dimension":61,"board":2,"optimalCells":4,"manhattan":{"expansions":12,"pops":6,"cells":4},"euclidean":{"expansions":12,"pops":6,"cells":4}},{"dimension":61,"board":3,"optimalCells":37,"manhattan":{"expansions":295,"pops":228,"cells":37},"euclidean":{"expansions":514,"pops":428,"cells":37}},{"dimension":61,"board":4,"optimalCells":62,"manhattan":{"expansions":1096,"pops":971,"cells":62},"euclidean":{"expansions":1225,"pops":1151,"cells":62}},{"dimension":61,"board":5,"optimalCells":8,"manhattan":{"expansions":21,"pops":8,"cells":8},"euclidean":{"expansions":21,"pops":8,"cells":8}},{"dimension":61,"board":6,"optimalCells":32,"manhattan":{"expansions":120,"pops":79,"cells":32},"euclidean":{"expansions":219,"pops":173,"cells":32}},{"dimension":61,"board":7,"optimalCells":25,"manhattan":{"expansions":60,"pops":26,"cells":26},"euclidean":{"expansions":59,"pops":27,"cells":25}},{"dimension":61,"board":8,"optimalCells":51,"manhattan":{"expansions":712,"pops":609,"cells":51},"euclidean":{"expansions":1030,"pops":932,"cells":51}},{"dimension":61,"board":9,"optimalCells":20,"manhattan":{"expansions":124,"pops":84,"cells":20},"euclidean":{"expansions":186,"pops":134,"cells":20}},{"dimension":62,"board":0,"optimalCells":20,"manhattan":{"expansions":61,"pops":25,"cells":21},"euclidean":{"expansions":67,"pops":29,"cells":21}},{"dimension":62,"board":1,"optimalCells":35,"manhattan":{"expansions":187,"pops":125,"cells":35},"euclidean":{"expansions":382,"pops":314,"cells":35}},{"dimension":62,"board":2,"optimalCells":null,"manhattan":{"expansions":2540,"pops":2541,"cells":0},"euclidean":{"expansions":2217,"pops":2218,"cells":0}},{"dimension":62,"board":3,"optimalCells":42,"manhattan":{"expansions":197,"pops":150,"cells":42},"euclidean":{"expansions":295,"pops":252,"cells":42}},{"dimension":62,"board":4,"optimalCells":36,"manhattan":{"expansions":99,"pops":69,"cells":37},"euclidean":{"expansions":102,"pops":83,"cells":36}},{"dimension":62,"board":5,"optimalCells":49,"manhattan":{"expansions":603,"pops":512,"cells":49},"euclidean":{"expansions":839,"pops":742,"cells":49}},{"dimension":62,"board":6,"optimalCells":null,"manhattan":{"expansions":7,"pops":8,"cells":0},"euclidean":{"expansions":7,"pops":8,"cells":0}},{"dimension":62,"board":7,"optimalCells":45,"manhattan":{"expansions":134,"pops":45,"cells":45},"euclidean":{"expansions":134,"pops":45,"cells":45}},{"dimension":62,"board":8,"optimalCells":14,"manhattan":{"expansions":66,"pops":45,"cells":14},"euclidean":{"expansions":67,"pops":48,"cells":14}},{"dimension":62,"board":9,"optimalCells":56,"manhattan":{"expansions":317,"pops":260,"cells":56},"euclidean":{"expansions":573,"pops":513,"cells":56}},{"dimension":63,"board":0,"optimalCells":66,"manhattan":{"expansions":696,"pops":629,"cells":70},"euclidean":{"expansions":1041,"pops":960,"cells":67}},{"dimension":63,"board":1,"optimalCells":45,"manhattan":{"expansions":273,"pops":218,"cells":45},"euclidean":{"expansions":420,"pops":368,"cells":45}},{"dimension":63,"board":2,"optimalCells":65,"manhattan":{"expansions":692,"pops":593,"cells":65},"euclidean":{"expansions":1288,"pops":1161,"cells":65}},{"dimension":63,"board":3,"optimalCells":17,"manhattan":{"expansions":52,"pops":27,"cells":18},"euclidean":{"expansions":32,"pops":17,"cells":17}},{"dimension":63,"board":4,"optimalCells":83,"manhattan":{"expansions":1326,"pops":1193,"cells":83},"euclidean":{"expansions":2229,"pops":2063,"cells":83}},{"dimension":63,"board":5,"optimalCells":42,"manhattan":{"expansions":123,"pops":87,"cells":42},"euclidean":{"expansions":133,"pops":97,"cells":42}},{"dimension":63,"board":6,"optimalCells":51,"manhattan":{"expansions":258,"pops":157,"cells":52},"euclidean":{"expansions":553,"pops":427,"cells":52}},{"dimension":63,"board":7,"optimalCells":29,"manhattan":{"expansions":86,"pops":31,"cells":29},"euclidean":{"expansions":81,"pops":29,"cells":29}},{"dimension":63,"board":8,"optimalCells":64,"manhattan":{"expansions":617,"pops":542,"cells":65},"euclidean":{"expansions":604,"pops":544,"cells":64}},{"dimension":63,"board":9,"optimalCells":23,"manhattan":{"expansions":50,"pops":24,"cells":23},"euclidean":{"expansions":49,"pops":24,"cells":23}},{"dimension":64,"board":0,"optimalCells":44,"manhattan":{"expansions":315,"pops":239,"cells":44},"euclidean":{"expansions":615,"pops":516,"cells":44}},{"dimension":64,"board":1,"optimalCells":32,"manhattan":{"expansions":91,"pops":34,"cells":33},"euclidean":{"expansions":87,"pops":33,"cells":32}},{"dimension":64,"board":2,"optimalCells":10,"manhattan":{"expansions":33,"pops":20,"cells":10},"euclidean":{"expansions":29,"pops":16,"cells":10}},{"dimension":64,"board":3,"optimalCells":11,"manhattan":{"expansions":28,"pops":11,"cells":11},"euclidean":{"expansions":28,"pops":11,"cells":11}},{"dimension":64,"board":4,"optimalCells":32,"manhattan":{"expansions":94,"pops":55,"cells":33},"euclidean":{"expansions":93,"pops":60,"cells":32}},{"dimension":64,"board":5,"optimalCells":36,"manhattan":{"expansions":220,"pops":173,"cells":39},"euclidean":{"expansions":287,"pops":242,"cells":37}},{"dimension":64,"board":6,"optimalCells":21,"manhattan":{"expansions":60,"pops":22,"cells":21},"euclidean":{"expansions":58,"pops":21,"cells":21}},{"dimension":64,"board":7,"optimalCells":55,"manhattan":{"expansions":692,"pops":597,"cells":55},"euclidean":{"expansions":1180,"pops":1030,"cells":55}},{"dimension":64,"board":8,"optimalCells":36,"manhattan":{"expansions":138,"pops":104,"cells":36},"euclidean":{"expansions":279,"pops":226,"cells":36}},{"dimension":64,"board":9,"optimalCells":26,"manhattan":{"expansions":140,"pops":112,"cells":27},"euclidean":{"expansions":198,"pops":156,"cells":26}},{"dimension":65,"board":0,"optimalCells":5,"manhattan":{"expansions":9,"pops":5,"cells":5},"euclidean":{"expansions":9,"pops":5,"cells":5}},{"dimension":65,"board":1,"optimalCells":15,"manhattan":{"expansions":55,"pops":34,"cells":15},"euclidean":{"expansions":59,"pops":37,"cells":15}},{"dimension":65,"board":2,"optimalCells":null,"manhattan":{"expansions":445,"pops":446,"cells":0},"euclidean":{"expansions":445,"pops":446,"cells":0}},{"dimension":65,"board":3,"optimalCells":51,"manhattan":{"expansions":202,"pops":131,"cells":51},"euclidean":{"expansions":589,"pops":502,"cells":51}},{"dimension":65,"board":4,"optimalCells":18,"manhattan":{"expansions":52,"pops":19,"cells":19},"euclidean":{"expansions":50,"pops":18,"cells":18}},{"dimension":65,"board":5,"optimalCells":56,"manhattan":{"expansions":717,"pops":658,"cells":56},"euclidean":{"expansions":785,"pops":726,"cells":56}},{"dimension":65,"board":6,"optimalCells":22,"manhattan":{"expansions":74,"pops":37,"cells":22},"euclidean":{"expansions":99,"pops":60,"cells":22}},{"dimension":65,"board":7,"optimalCells":47,"manhattan":{"expansions":334,"pops":262,"cells":47},"euclidean":{"expansions":682,"pops":577,"cells":47}},{"dimension":65,"board":8,"optimalCells":null,"manhattan":{"expansions":4140,"pops":4141,"cells":0},"euclidean":{"expansions":2997,"pops":2998,"cells":0}},{"dimension":65,"board":9,"optimalCells":72,"manhattan":{"expansions":512,"pops":422,"cells":72},"euclidean":{"expansions":1056,"pops":955,"cells":72}},{"dimension":66,"board":0,"optimalCells":43,"manhattan":{"expansions":143,"pops":110,"cells":43},"euclidean":{"expansions":213,"pops":176,"cells":43}},{"dimension":66,"board":1,"optimalCells":74,"manhattan":{"expansions":707,"pops":602,"cells":74},"euclidean":{"expansions":998,"pops":951,"cells":74}},{"dimension":66,"board":2,"optimalCells":57,"manhattan":{"expansions":236,"pops":131,"cells":57},"euclidean":{"expansions":573,"pops":440,"cells":57}},{"dimension":66,"board":3,"optimalCells":83,"manhattan":{"expansions":710,"pops":601,"cells":83},"euclidean":{"expansions":1281,"pops":1217,"cells":83}},{"dimension":66,"board":4,"optimalCells":32,"manhattan":{"expansions":110,"pops":50,"cells":34},"euclidean":{"expansions":130,"pops":61,"cells":32}},{"dimension":66,"board":5,"optimalCells":26,"manhattan":{"expansions":144,"pops":100,"cells":26},"euclidean":{"expansions":226,"pops":171,"cells":26}},{"dimension":66,"board":6,"optimalCells":55,"manhattan":{"expansions":441,"pops":346,"cells":55},"euclidean":{"expansions":991,"pops":869,"cells":55}},{"dimension":66,"board":7,"optimalCells":7,"manhattan":{"expansions":28,"pops":13,"cells":8},"euclidean":{"expansions":31,"pops":15,"cells":8}},{"dimension":66,"board":8,"optimalCells":28,"manhattan":{"expansions":176,"pops":131,"cells":28},"euclidean":{"expansions":237,"pops":186,"cells":28}},{"dimension":66,"board":9,"optimalCells":61,"manhattan":{"expansions":221,"pops":104,"cells":62},"euclidean":{"expansions":437,"pops":290,"cells":62}},{"dimension":67,"board":0,"optimalCells":24,"manhattan":{"expansions":89,"pops":77,"cells":24},"euclidean":{"expansions":109,"pops":97,"cells":24}},{"dimension":67,"board":1,"optimalCells":54,"manhattan":{"expansions":262,"pops":191,"cells":54},"euclidean":{"expansions":805,"pops":707,"cells":54}},{"dimension":67,"board":2,"optimalCells":55,"manhattan":{"expansions":844,"pops":776,"cells":56},"euclidean":{"expansions":794,"pops":727,"cells":55}},{"dimension":67,"board":3,"optimalCells":26,"manhattan":{"expansions":77,"pops":39,"cells":28},"euclidean":{"expansions":86,"pops":49,"cells":28}},{"dimension":67,"board":4,"optimalCells":37,"manhattan":{"expansions":138,"pops":90,"cells":41},"euclidean":{"expansions":222,"pops":167,"cells":40}},{"dimension":67,"board":5,"optimalCells":7,"manhattan":{"expansions":19,"pops":7,"cells":7},"euclidean":{"expansions":19,"pops":7,"cells":7}},{"dimension":67,"board":6,"optimalCells":34,"manhattan":{"expansions":222,"pops":168,"cells":34},"euclidean":{"expansions":411,"pops":340,"cells":34}},{"dimension":67,"board":7,"optimalCells":39,"manhattan":{"expansions":191,"pops":160,"cells":41},"euclidean":{"expansions":208,"pops":174,"cells":39}},{"dimension":67,"board":8,"optimalCells":91,"manhattan":{"expansions":1058,"pops":893,"cells":91},"euclidean":{"expansions":2639,"pops":2462,"cells":91}},{"dimension":67,"board":9,"optimalCells":15,"manhattan":{"expansions":43,"pops":15,"cells":15},"euclidean":{"expansions":43,"pops":15,"cells":15}},{"dimension":68,"board":0,"optimalCells":60,"manhattan":{"expansions":750,"pops":643,"cells":60},"euclidean":{"expansions":1293,"pops":1162,"cells":60}},{"dimension":68,"board":1,"optimalCells":13,"manhattan":{"expansions":41,"pops":25,"cells":13},"euclidean":{"expansions":52,"pops":34,"cells":13}},{"dimension":68,"board":2,"optimalCells":35,"manhattan":{"expansions":103,"pops":35,"cells":35},"euclidean":{"expansions":103,"pops":35,"cells":35}},{"dimension":68,"board":3,"optimalCells":21,"manhattan":{"expansions":74,"pops":43,"cells":22},"euclidean":{"expansions":110,"pops":74,"cells":22}},{"dimension":68,"board":4,"optimalCells":6,"manhattan":{"expansions":16,"pops":6,"cells":6},"euclidean":{"expansions":16,"pops":6,"cells":6}},{"dimension":68,"board":5,"optimalCells":35,"manhattan":{"expansions":149,"pops":125,"cells":35},"euclidean":{"expansions":167,"pops":141,"cells":35}},{"dimension":68,"board":6,"optimalCells":48,"manhattan":{"expansions":147,"pops":78,"cells":53},"euclidean":{"expansions":156,"pops":95,"cells":51}},{"dimension":68,"board":7,"optimalCells":95,"manhattan":{"expansions":1393,"pops":1175,"cells":95},"euclidean":{"expansions":2408,"pops":2288,"cells":95}},{"dimension":68,"board":8,"optimalCells":39,"manhattan":{"expansions":173,"pops":121,"cells":39},"euclidean":{"expansions":379,"pops":305,"cells":39}},{"dimension":68,"board":9,"optimalCells":73,"manhattan":{"expansions":623,"pops":565,"cells":73},"euclidean":{"expansions":533,"pops":486,"cells":73}},{"dimension":69,"board":0,"optimalCells":53,"manhattan":{"expansions":446,"pops":386,"cells":54},"euclidean":{"expansions":587,"pops":520,"cells":53}},{"dimension":69,"board":1,"optimalCells":45,"manhattan":{"expansions":257,"pops":206,"cells":45},"euclidean":{"expansions":535,"pops":470,"cells":45}},{"dimension":69,"board":2,"optimalCells":67,"manhattan":{"expansions":726,"pops":618,"cells":67},"euclidean":{"expansions":1106,"pops":1017,"cells":67}},{"dimension":69,"board":3,"optimalCells":45,"manhattan":{"expansions":297,"pops":268,"cells":45},"euclidean":{"expansions":327,"pops":298,"cells":45}},{"dimension":69,"board":4,"optimalCells":52,"manhattan":{"expansions":618,"pops":525,"cells":52},"euclidean":{"expansions":1096,"pops":960,"cells":52}},{"dimension":69,"board":5,"optimalCells":15,"manhattan":{"expansions":27,"pops":18,"cells":15},"euclidean":{"expansions":27,"pops":17,"cells":15}},{"dimension":69,"board":6,"optimalCells":50,"manhattan":{"expansions":279,"pops":241,"cells":50},"euclidean":{"expansions":433,"pops":394,"cells":50}},{"dimension":69,"board":7,"optimalCells":85,"manhattan":{"expansions":1454,"pops":1299,"cells":85},"euclidean":{"expansions":2003,"pops":1879,"cells":85}},{"dimension":69,"board":8,"optimalCells":53,"manhattan":{"expansions":161,"pops":66,"cells":57},"euclidean":{"expansions":141,"pops":54,"cells":54}},{"dimension":69,"board":9,"optimalCells":5,"manhattan":{"expansions":12,"pops":7,"cells":5},"euclidean":{"expansions":12,"pops":8,"cells":5}},{"dimension":70,"board":0,"optimalCells":29,"manhattan":{"expansions":141,"pops":107,"cells":33},"euclidean":{"expansions":207,"pops":152,"cells":29}},{"dimension":70,"board":1,"optimalCells":55,"manhattan":{"expansions":323,"pops":270,"cells":57},"euclidean":{"expansions":550,"pops":475,"cells":55}},{"dimension":70,"board":2,"optimalCells":38,"manhattan":{"expansions":273,"pops":231,"cells":39},"euclidean":{"expansions":348,"pops":305,"cells":38}},{"dimension":70,"board":3,"optimalCells":55,"manhattan":{"expansions":567,"pops":499,"cells":56},"euclidean":{"expansions":809,"pops":740,"cells":56}},{"dimension":70,"board":4,"optimalCells":53,"manhattan":{"expansions":153,"pops":64,"cells":55},"euclidean":{"expansions":146,"pops":60,"cells":55}},{"dimension":70,"board":5,"optimalCells":51,"manhattan":{"expansions":385,"pops":290,"cells":51},"euclidean":{"expansions":774,"pops":639,"cells":51}},{"dimension":70,"board":6,"optimalCells":58,"manhattan":{"expansions":312,"pops":267,"cells":58},"euclidean":{"expansions":495,"pops":457,"cells":58}},{"dimension":70,"board":7,"optimalCells":45,"manhattan":{"expansions":287,"pops":267,"cells":48},"euclidean":{"expansions":335,"pops":301,"cells":45}},{"dimension":70,"board":8,"optimalCells":68,"manhattan":{"expansions":579,"pops":542,"cells":68},"euclidean":{"expansions":664,"pops":622,"cells":68}},{"dimension":70,"board":9,"optimalCells":54,"manhattan":{"expansions":321,"pops":231,"cells":55},"euclidean":{"expansions":630,"pops":524,"cells":55}},{"dimension":71,"board":0,"optimalCells":17,"manhattan":{"expansions":63,"pops":44,"cells":17},"euclidean":{"expansions":87,"pops":66,"cells":17}},{"dimension":71,"board":1,"optimalCells":79,"manhattan":{"expansions":1518,"pops":1367,"cells":79},"euclidean":{"expansions":2400,"pops":2229,"cells":79}},{"dimension":71,"board":2,"optimalCells":28,"manhattan":{"expansions":110,"pops":79,"cells":28},"euclidean":{"expansions":145,"pops":113,"cells":28}},{"dimension":71,"board":3,"optimalCells":40,"manhattan":{"expansions":156,"pops":118,"cells":43},"euclidean":{"expansions":266,"pops":204,"cells":42}},{"dimension":71,"board":4,"optimalCells":72,"manhattan":{"expansions":1093,"pops":949,"cells":72},"euclidean":{"expansions":1538,"pops":1410,"cells":72}},{"dimension":71,"board":5,"optimalCells":133,"manhattan":{"expansions":1267,"pops":1241,"cells":133},"euclidean":{"expansions":1346,"pops":1327,"cells":133}},{"dimension":71,"board":6,"optimalCells":20,"manhattan":{"expansions":77,"pops":35,"cells":21},"euclidean":{"expansions":105,"pops":58,"cells":21}},{"dimension":71,"board":7,"optimalCells":30,"manhattan":{"expansions":96,"pops":45,"cells":31},"euclidean":{"expansions":136,"pops":79,"cells":31}},{"dimension":71,"board":8,"optimalCells":null,"manhattan":{"expansions":6,"pops":7,"cells":0},"euclidean":{"expansions":6,"pops":7,"cells":0}},{"dimension":71,"board":9,"optimalCells":34,"manhattan":{"expansions":157,"pops":118,"cells":34},"euclidean":{"expansions":312,"pops":258,"cells":34}},{"dimension":72,"board":0,"optimalCells":26,"manhattan":{"expansions":138,"pops":97,"cells":26},"euclidean":{"expansions":202,"pops":160,"cells":26}},{"dimension":72,"board":1,"optimalCells":27,"manhattan":{"expansions":134,"pops":93,"cells":28},"euclidean":{"expansions":226,"pops":173,"cells":28}},{"dimension":72,"board":2,"optimalCells":34,"manhattan":{"expansions":95,"pops":34,"cells":34},"euclidean":{"expansions":95,"pops":34,"cells":34}},{"dimension":72,"board":3,"optimalCells":89,"manhattan":{"expansions":727,"pops":649,"cells":89},"euclidean":{"expansions":1153,"pops":1089,"cells":89}},{"dimension":72,"board":4,"optimalCells":28,"manhattan":{"expansions":107,"pops":75,"cells":28},"euclidean":{"expansions":172,"pops":141,"cells":28}},{"dimension":72,"board":5,"optimalCells":56,"manhattan":{"expansions":922,"pops":809,"cells":56},"euclidean":{"expansions":1438,"pops":1293,"cells":56}},{"dimension":72,"board":6,"optimalCells":8,"manhattan":{"expansions":22,"pops":8,"cells":8},"euclidean":{"expansions":22,"pops":8,"cells":8}},{"dimension":72,"board":7,"optimalCells":17,"manhattan":{"expansions":59,"pops":30,"cells":19},"euclidean":{"expansions":88,"pops":55,"cells":17}},{"dimension":72,"board":8,"optimalCells":37,"manhattan":{"expansions":117,"pops":48,"cells":38},"euclidean":{"expansions":121,"pops":52,"cells":38}},{"dimension":72,"board":9,"optimalCells":65,"manhattan":{"expansions":194,"pops":104,"cells":67},"euclidean":{"expansions":273,"pops":143,"cells":65}},{"dimension":73,"board":0,"optimalCells":35,"manhattan":{"expansions":149,"pops":99,"cells":35},"euclidean":{"expansions":419,"pops":344,"cells":35}},{"dimension":73,"board":1,"optimalCells":33,"manhattan":{"expansions":255,"pops":189,"cells":33},"euclidean":{"expansions":424,"pops":343,"cells":33}},{"dimension":73,"board":2,"optimalCells":50,"manhattan":{"expansions":454,"pops":347,"cells":50},"euclidean":{"expansions":883,"pops":767,"cells":50}},{"dimension":73,"board":3,"optimalCells":23,"manhattan":{"expansions":99,"pops":58,"cells":23},"euclidean":{"expansions":130,"pops":87,"cells":23}},{"dimension":73,"board":4,"optimalCells":55,"manhattan":{"expansions":389,"pops":317,"cells":55},"euclidean":{"expansions":743,"pops":681,"cells":55}},{"dimension":73,"board":5,"optimalCells":77,"manhattan":{"expansions":1576,"pops":1442,"cells":77},"euclidean":{"expansions":1823,"pops":1714,"cells":77}},{"dimension":73,"board":6,"optimalCells":37,"manhattan":{"expansions":167,"pops":132,"cells":43},"euclidean":{"expansions":283,"pops":234,"cells":40}},{"dimension":73,"board":7,"optimalCells":null,"manhattan":{"expansions":2252,"pops":2253,"cells":0},"euclidean":{"expansions":2252,"pops":2253,"cells":0}},{"dimension":73,"board":8,"optimalCells":62,"manhattan":{"expansions":367,"pops":271,"cells":62},"euclidean":{"expansions":793,"pops":673,"cells":62}},{"dimension":73,"board":9,"optimalCells":55,"manhattan":{"expansions":246,"pops":156,"cells":61},"euclidean":{"expansions":319,"pops":213,"cells":56}},{"dimension":74,"board":0,"optimalCells":50,"manhattan":{"expansions":219,"pops":120,"cells":52},"euclidean":{"expansions":304,"pops":217,"cells":51}},{"dimension":74,"board":1,"optimalCells":56,"manhattan":{"expansions":371,"pops":271,"cells":56},"euclidean":{"expansions":980,"pops":865,"cells":56}},{"dimension":74,"board":2,"optimalCells":28,"manhattan":{"expansions":78,"pops":28,"cells":28},"euclidean":{"expansions":78,"pops":28,"cells":28}},{"dimension":74,"board":3,"optimalCells":11,"manhattan":{"expansions":57,"pops":37,"cells":11},"euclidean":{"expansions":46,"pops":28,"cells":11}},{"dimension":74,"board":4,"optimalCells":45,"manhattan":{"expansions":289,"pops":248,"cells":47},"euclidean":{"expansions":387,"pops":336,"cells":45}},{"dimension":74,"board":5,"optimalCells":32,"manhattan":{"expansions":151,"pops":89,"cells":34},"euclidean":{"expansions":220,"pops":132,"cells":32}},{"dimension":74,"board":6,"optimalCells":70,"manhattan":{"expansions":419,"pops":369,"cells":71},"euclidean":{"expansions":366,"pops":313,"cells":70}},{"dimension":74,"board":7,"optimalCells":23,"manhattan":{"expansions":104,"pops":61,"cells":23},"euclidean":{"expansions":166,"pops":112,"cells":23}},{"dimension":74,"board":8,"optimalCells":81,"manhattan":{"expansions":717,"pops":573,"cells":81},"euclidean":{"expansions":1045,"pops":984,"cells":81}},{"dimension":74,"board":9,"optimalCells":18,"manhattan":{"expansions":53,"pops":34,"cells":20},"euclidean":{"expansions":53,"pops":31,"cells":18}},{"dimension":75,"board":0,"optimalCells":68,"manhattan":{"expansions":661,"pops":512,"cells":72},"euclidean":{"expansions":1095,"pops":962,"cells":70}},{"dimension":75,"board":1,"optimalCells":15,"manhattan":{"expansions":44,"pops":15,"cells":15},"euclidean":{"expansions":44,"pops":15,"cells":15}},{"dimension":75,"board":2,"optimalCells":28,"manhattan":{"expansions":80,"pops":45,"cells":31},"euclidean":{"expansions":78,"pops":44,"cells":30}},{"dimension":75,"board":3,"optimalCells":null,"manhattan":{"expansions":116,"pops":117,"cells":0},"euclidean":{"expansions":110,"pops":111,"cells":0}},{"dimension":75,"board":4,"optimalCells":70,"manhattan":{"expansions":365,"pops":236,"cells":70},"euclidean":{"expansions":989,"pops":813,"cells":70}},{"dimension":75,"board":5,"optimalCells":38,"manhattan":{"expansions":99,"pops":41,"cells":40},"euclidean":{"expansions":97,"pops":40,"cells":39}},{"dimension":75,"board":6,"optimalCells":51,"manhattan":{"expansions":315,"pops":284,"cells":51},"euclidean":{"expansions":282,"pops":251,"cells":51}},{"dimension":75,"board":7,"optimalCells":78,"manhattan":{"expansions":1296,"pops":1148,"cells":78},"euclidean":{"expansions":1442,"pops":1335,"cells":78}},{"dimension":75,"board":8,"optimalCells":34,"manhattan":{"expansions":170,"pops":137,"cells":36},"euclidean":{"expansions":202,"pops":174,"cells":35}},{"dimension":75,"board":9,"optimalCells":55,"manhattan":{"expansions":260,"pops":207,"cells":67},"euclidean":{"expansions":319,"pops":250,"cells":56}},{"dimension":76,"board":0,"optimalCells":32,"manhattan":{"expansions":228,"pops":166,"cells":35},"euclidean":{"expansions":205,"pops":138,"cells":32}},{"dimension":76,"board":1,"optimalCells":56,"manhattan":{"expansions":487,"pops":367,"cells":56},"euclidean":{"expansions":881,"pops":790,"cells":56}},{"dimension":76,"board":2,"optimalCells":75,"manhattan":{"expansions":1073,"pops":994,"cells":75},"euclidean":{"expansions":1459,"pops":1365,"cells":75}},{"dimension":76,"board":3,"optimalCells":119,"manhattan":{"expansions":2205,"pops":2137,"cells":121},"euclidean":{"expansions":2478,"pops":2420,"cells":119}},{"dimension":76,"board":4,"optimalCells":43,"manhattan":{"expansions":224,"pops":133,"cells":46},"euclidean":{"expansions":301,"pops":199,"cells":44}},{"dimension":76,"board":5,"optimalCells":43,"manhattan":{"expansions":227,"pops":163,"cells":48},"euclidean":{"expansions":405,"pops":335,"cells":45}},{"dimension":76,"board":6,"optimalCells":51,"manhattan":{"expansions":188,"pops":150,"cells":51},"euclidean":{"expansions":230,"pops":207,"cells":51}},{"dimension":76,"board":7,"optimalCells":85,"manhattan":{"expansions":1212,"pops":1148,"cells":91},"euclidean":{"expansions":1332,"pops":1269,"cells":86}},{"dimension":76,"board":8,"optimalCells":48,"manhattan":{"expansions":300,"pops":213,"cells":51},"euclidean":{"expansions":571,"pops":437,"cells":48}},{"dimension":76,"board":9,"optimalCells":14,"manhattan":{"expansions":41,"pops":14,"cells":14},"euclidean":{"expansions":41,"pops":14,"cells":14}},{"dimension":77,"board":0,"optimalCells":42,"manhattan":{"expansions":116,"pops":52,"cells":45},"euclidean":{"expansions":127,"pops":62,"cells":43}},{"dimension":77,"board":1,"optimalCells":37,"manhattan":{"expansions":124,"pops":96,"cells":37},"euclidean":{"expansions":190,"pops":164,"cells":37}},{"dimension":77,"board":2,"optimalCells":null,"manhattan":{"expansions":2927,"pops":2928,"cells":0},"euclidean":{"expansions":2875,"pops":2876,"cells":0}},{"dimension":77,"board":3,"optimalCells":74,"manhattan":{"expansions":703,"pops":566,"cells":74},"euclidean":{"expansions":1663,"pops":1515,"cells":74}},{"dimension":77,"board":4,"optimalCells":38,"manhattan":{"expansions":110,"pops":38,"cells":38},"euclidean":{"expansions":110,"pops":38,"cells":38}},{"dimension":77,"board":5,"optimalCells":100,"manhattan":{"expansions":1073,"pops":1021,"cells":100},"euclidean":{"expansions":1260,"pops":1219,"cells":100}},{"dimension":77,"board":6,"optimalCells":74,"manhattan":{"expansions":890,"pops":782,"cells":76},"euclidean":{"expansions":1163,"pops":1043,"cells":75}},{"dimension":77,"board":7,"optimalCells":39,"manhattan":{"expansions":293,"pops":237,"cells":39},"euclidean":{"expansions":506,"pops":427,"cells":39}},{"dimension":77,"board":8,"optimalCells":46,"manhattan":{"expansions":204,"pops":138,"cells":49},"euclidean":{"expansions":182,"pops":119,"cells":47}},{"dimension":77,"board":9,"optimalCells":112,"manhattan":{"expansions":659,"pops":591,"cells":118},"euclidean":{"expansions":1045,"pops":972,"cells":113}},{"dimension":78,"board":0,"optimalCells":8,"manhattan":{"expansions":32,"pops":18,"cells":8},"euclidean":{"expansions":40,"pops":22,"cells":8}},{"dimension":78,"board":1,"optimalCells":65,"manhattan":{"expansions":367,"pops":278,"cells":65},"euclidean":{"expansions":867,"pops":772,"cells":65}},{"dimension":78,"board":2,"optimalCells":15,"manhattan":{"expansions":38,"pops":15,"cells":15},"euclidean":{"expansions":38,"pops":15,"cells":15}},{"dimension":78,"board":3,"optimalCells":55,"manhattan":{"expansions":825,"pops":753,"cells":55},"euclidean":{"expansions":838,"pops":768,"cells":55}},{"dimension":78,"board":4,"optimalCells":42,"manhattan":{"expansions":289,"pops":221,"cells":42},"euclidean":{"expansions":474,"pops":396,"cells":42}},{"dimension":78,"board":5,"optimalCells":5,"manhattan":{"expansions":18,"pops":10,"cells":5},"euclidean":{"expansions":16,"pops":9,"cells":5}},{"dimension":78,"board":6,"optimalCells":47,"manhattan":{"expansions":364,"pops":333,"cells":49},"euclidean":{"expansions":403,"pops":374,"cells":47}},{"dimension":78,"board":7,"optimalCells":75,"manhattan":{"expansions":672,"pops":576,"cells":75},"euclidean":{"expansions":1168,"pops":1055,"cells":75}},{"dimension":78,"board":8,"optimalCells":74,"manhattan":{"expansions":1008,"pops":894,"cells":77},"euclidean":{"expansions":1542,"pops":1410,"cells":74}},{"dimension":78,"board":9,"optimalCells":56,"manhattan":{"expansions":155,"pops":58,"cells":57},"euclidean":{"expansions":154,"pops":56,"cells":56}},{"dimension":79,"board":0,"optimalCells":67,"manhattan":{"expansions":513,"pops":419,"cells":67},"euclidean":{"expansions":1044,"pops":958,"cells":67}},{"dimension":79,"board":1,"optimalCells":38,"manhattan":{"expansions":201,"pops":157,"cells":38},"euclidean":{"expansions":280,"pops":241,"cells":38}},{"dimension":79,"board":2,"optimalCells":67,"manhattan":{"expansions":441,"pops":326,"cells":67},"euclidean":{"expansions":984,"pops":882,"cells":67}},{"dimension":79,"board":3,"optimalCells":35,"manhattan":{"expansions":159,"pops":106,"cells":35},"euclidean":{"expansions":221,"pops":167,"cells":35}},{"dimension":79,"board":4,"optimalCells":53,"manhattan":{"expansions":278,"pops":215,"cells":58},"euclidean":{"expansions":382,"pops":325,"cells":58}},{"dimension":79,"board":5,"optimalCells":48,"manhattan":{"expansions":240,"pops":170,"cells":52},"euclidean":{"expansions":434,"pops":313,"cells":49}},{"dimension":79,"board":6,"optimalCells":35,"manhattan":{"expansions":237,"pops":169,"cells":37},"euclidean":{"expansions":279,"pops":209,"cells":36}},{"dimension":79,"board":7,"optimalCells":22,"manhattan":{"expansions":75,"pops":45,"cells":22},"euclidean":{"expansions":146,"pops":106,"cells":22}},{"dimension":79,"board":8,"optimalCells":121,"manhattan":{"expansions":1697,"pops":1503,"cells":121},"euclidean":{"expansions":3272,"pops":3113,"cells":121}},{"dimension":79,"board":9,"optimalCells":49,"manhattan":{"expansions":232,"pops":181,"cells":52},"euclidean":{"expansions":228,"pops":190,"cells":50}},{"dimension":80,"board":0,"optimalCells":14,"manhattan":{"expansions":53,"pops":26,"cells":15},"euclidean":{"expansions":72,"pops":38,"cells":15}},{"dimension":80,"board":1,"optimalCells":45,"manhattan":{"expansions":118,"pops":58,"cells":47},"euclidean":{"expansions":131,"pops":69,"cells":47}},{"dimension":80,"board":2,"optimalCells":105,"manhattan":{"expansions":2803,"pops":2719,"cells":105},"euclidean":{"expansions":2687,"pops":2616,"cells":105}},{"dimension":80,"board":3,"optimalCells":45,"manhattan":{"expansions":433,"pops":353,"cells":45},"euclidean":{"expansions":783,"pops":664,"cells":45}},{"dimension":80,"board":4,"optimalCells":76,"manhattan":{"expansions":590,"pops":453,"cells":76},"euclidean":{"expansions":1629,"pops":1515,"cells":76}},{"dimension":80,"board":5,"optimalCells":36,"manhattan":{"expansions":218,"pops":182,"cells":36},"euclidean":{"expansions":244,"pops":215,"cells":36}},{"dimension":80,"board":6,"optimalCells":73,"manhattan":{"expansions":508,"pops":451,"cells":73},"euclidean":{"expansions":817,"pops":772,"cells":73}},{"dimension":80,"board":7,"optimalCells":45,"manhattan":{"expansions":198,"pops":121,"cells":45},"euclidean":{"expansions":313,"pops":251,"cells":45}},{"dimension":80,"board":8,"optimalCells":112,"manhattan":{"expansions":1587,"pops":1435,"cells":112},"euclidean":{"expansions":2450,"pops":2360,"cells":112}},{"dimension":80,"board":9,"optimalCells":42,"manhattan":{"expansions":153,"pops":84,"cells":43},"euclidean":{"expansions":334,"pops":234,"cells":43}},{"dimension":81,"board":0,"optimalCells":19,"manhattan":{"expansions":57,"pops":37,"cells":21},"euclidean":{"expansions":82,"pops":53,"cells":19}},{"dimension":81,"board":1,"optimalCells":55,"manhattan":{"expansions":185,"pops":97,"cells":59},"euclidean":{"expansions":310,"pops":192,"cells":57}},{"dimension":81,"board":2,"optimalCells":65,"manhattan":{"expansions":355,"pops":249,"cells":67},"euclidean":{"expansions":845,"pops":713,"cells":67}},{"dimension":81,"board":3,"optimalCells":41,"manhattan":{"expansions":255,"pops":208,"cells":41},"euclidean":{"expansions":440,"pops":376,"cells":41}},{"dimension":81,"board":4,"optimalCells":53,"manhattan":{"expansions":493,"pops":393,"cells":53},"euclidean":{"expansions":948,"pops":825,"cells":53}},{"dimension":81,"board":5,"optimalCells":64,"manhattan":{"expansions":352,"pops":236,"cells":64},"euclidean":{"expansions":708,"pops":607,"cells":64}},{"dimension":81,"board":6,"optimalCells":31,"manhattan":{"expansions":88,"pops":31,"cells":31},"euclidean":{"expansions":88,"pops":31,"cells":31}},{"dimension":81,"board":7,"optimalCells":99,"manhattan":{"expansions":1833,"pops":1648,"cells":99},"euclidean":{"expansions":3350,"pops":3167,"cells":99}},{"dimension":81,"board":8,"optimalCells":96,"manhattan":{"expansions":1368,"pops":1296,"cells":96},"euclidean":{"expansions":1209,"pops":1172,"cells":96}},{"dimension":81,"board":9,"optimalCells":79,"manhattan":{"expansions":1078,"pops":939,"cells":79},"euclidean":{"expansions":1904,"pops":1775,"cells":79}},{"dimension":82,"board":0,"optimalCells":65,"manhattan":{"expansions":1130,"pops":1000,"cells":65},"euclidean":{"expansions":1448,"pops":1326,"cells":65}},{"dimension":82,"board":1,"optimalCells":61,"manhattan":{"expansions":340,"pops":262,"cells":61},"euclidean":{"expansions":784,"pops":691,"cells":61}},{"dimension":82,"board":2,"optimalCells":80,"manhattan":{"expansions":1390,"pops":1239,"cells":80},"euclidean":{"expansions":2173,"pops":1997,"cells":80}},{"dimension":82,"board":3,"optimalCells":63,"manhattan":{"expansions":744,"pops":638,"cells":63},"euclidean":{"expansions":1274,"pops":1180,"cells":63}},{"dimension":82,"board":4,"optimalCells":108,"manhattan":{"expansions":2997,"pops":2788,"cells":108},"euclidean":{"expansions":4162,"pops":3956,"cells":108}},{"dimension":82,"board":5,"optimalCells":46,"manhattan":{"expansions":221,"pops":187,"cells":46},"euclidean":{"expansions":269,"pops":244,"cells":46}},{"dimension":82,"board":6,"optimalCells":35,"manhattan":{"expansions":410,"pops":357,"cells":41},"euclidean":{"expansions":179,"pops":132,"cells":35}},{"dimension":82,"board":7,"optimalCells":32,"manhattan":{"expansions":138,"pops":97,"cells":32},"euclidean":{"expansions":306,"pops":244,"cells":32}},{"dimension":82,"board":8,"optimalCells":36,"manhattan":{"expansions":155,"pops":100,"cells":36},"euclidean":{"expansions":390,"pops":307,"cells":36}},{"dimension":82,"board":9,"optimalCells":34,"manhattan":{"expansions":94,"pops":68,"cells":34},"euclidean":{"expansions":290,"pops":259,"cells":34}},{"dimension":83,"board":0,"optimalCells":57,"manhattan":{"expansions":418,"pops":305,"cells":57},"euclidean":{"expansions":881,"pops":740,"cells":57}},{"dimension":83,"board":1,"optimalCells":52,"manhattan":{"expansions":329,"pops":261,"cells":52},"euclidean":{"expansions":577,"pops":507,"cells":52}},{"dimension":83,"board":2,"optimalCells":10,"manhattan":{"expansions":18,"pops":10,"cells":10},"euclidean":{"expansions":19,"pops":11,"cells":10}},{"dimension":83,"board":3,"optimalCells":22,"manhattan":{"expansions":119,"pops":98,"cells":22},"euclidean":{"expansions":123,"pops":106,"cells":22}},{"dimension":83,"board":4,"optimalCells":81,"manhattan":{"expansions":1516,"pops":1368,"cells":81},"euclidean":{"expansions":2579,"pops":2361,"cells":81}},{"dimension":83,"board":5,"optimalCells":83,"manhattan":{"expansions":550,"pops":520,"cells":83},"euclidean":{"expansions":614,"pops":591,"cells":83}},{"dimension":83,"board":6,"optimalCells":48,"manhattan":{"expansions":137,"pops":48,"cells":48},"euclidean":{"expansions":137,"pops":48,"cells":48}},{"dimension":83,"board":7,"optimalCells":6,"manhattan":{"expansions":13,"pops":6,"cells":6},"euclidean":{"expansions":13,"pops":7,"cells":6}},{"dimension":83,"board":8,"optimalCells":31,"manhattan":{"expansions":77,"pops":35,"cells":33},"euclidean":{"expansions":81,"pops":38,"cells":33}},{"dimension":83,"board":9,"optimalCells":46,"manhattan":{"expansions":157,"pops":87,"cells":56},"euclidean":{"expansions":188,"pops":118,"cells":47}},{"dimension":84,"board":0,"optimalCells":43,"manhattan":{"expansions":364,"pops":299,"cells":46},"euclidean":{"expansions":302,"pops":199,"cells":43}},{"dimension":84,"board":1,"optimalCells":68,"manhattan":{"expansions":202,"pops":68,"cells":68},"euclidean":{"expansions":202,"pops":68,"cells":68}},{"dimension":84,"board":2,"optimalCells":50,"manhattan":{"expansions":445,"pops":405,"cells":53},"euclidean":{"expansions":589,"pops":542,"cells":50}},{"dimension":84,"board":3,"optimalCells":41,"manhattan":{"expansions":125,"pops":51,"cells":46},"euclidean":{"expansions":108,"pops":42,"cells":41}},{"dimension":84,"board":4,"optimalCells":null,"manhattan":{"expansions":521,"pops":522,"cells":0},"euclidean":{"expansions":516,"pops":517,"cells":0}},{"dimension":84,"board":5,"optimalCells":35,"manhattan":{"expansions":104,"pops":35,"cells":35},"euclidean":{"expansions":104,"pops":35,"cells":35}},{"dimension":84,"board":6,"optimalCells":64,"manhattan":{"expansions":333,"pops":227,"cells":68},"euclidean":{"expansions":925,"pops":745,"cells":65}},{"dimension":84,"board":7,"optimalCells":67,"manhattan":{"expansions":1011,"pops":896,"cells":67},"euclidean":{"expansions":1695,"pops":1540,"cells":67}},{"dimension":84,"board":8,"optimalCells":24,"manhattan":{"expansions":41,"pops":24,"cells":24},"euclidean":{"expansions":42,"pops":25,"cells":24}},{"dimension":84,"board":9,"optimalCells":38,"manhattan":{"expansions":257,"pops":186,"cells":38},"euclidean":{"expansions":408,"pops":328,"cells":38}},{"dimension":85,"board":0,"optimalCells":69,"manhattan":{"expansions":690,"pops":608,"cells":70},"euclidean":{"expansions":882,"pops":812,"cells":70}},{"dimension":85,"board":1,"optimalCells":76,"manhattan":{"expansions":676,"pops":590,"cells":76},"euclidean":{"expansions":1154,"pops":1085,"cells":76}},{"dimension":85,"board":2,"optimalCells":95,"manhattan":{"expansions":1098,"pops":912,"cells":95},"euclidean":{"expansions":2315,"pops":2198,"cells":95}},{"dimension":85,"board":3,"optimalCells":55,"manhattan":{"expansions":164,"pops":55,"cells":55},"euclidean":{"expansions":164,"pops":55,"cells":55}},{"dimension":85,"board":4,"optimalCells":18,"manhattan":{"expansions":108,"pops":78,"cells":18},"euclidean":{"expansions":125,"pops":96,"cells":18}},{"dimension":85,"board":5,"optimalCells":60,"manhattan":{"expansions":297,"pops":189,"cells":67},"euclidean":{"expansions":329,"pops":221,"cells":62}},{"dimension":85,"board":6,"optimalCells":34,"manhattan":{"expansions":122,"pops":82,"cells":35},"euclidean":{"expansions":171,"pops":125,"cells":34}},{"dimension":85,"board":7,"optimalCells":20,"manhattan":{"expansions":58,"pops":42,"cells":20},"euclidean":{"expansions":69,"pops":52,"cells":20}},{"dimension":85,"board":8,"optimalCells":28,"manhattan":{"expansions":71,"pops":35,"cells":31},"euclidean":{"expansions":139,"pops":94,"cells":28}},{"dimension":85,"board":9,"optimalCells":59,"manhattan":{"expansions":684,"pops":579,"cells":59},"euclidean":{"expansions":1254,"pops":1111,"cells":59}},{"dimension":86,"board":0,"optimalCells":72,"manhattan":{"expansions":808,"pops":769,"cells":72},"euclidean":{"expansions":1068,"pops":1017,"cells":72}},{"dimension":86,"board":1,"optimalCells":86,"manhattan":{"expansions":1138,"pops":990,"cells":86},"euclidean":{"expansions":1790,"pops":1683,"cells":86}},{"dimension":86,"board":2,"optimalCells":null,"manhattan":{"expansions":330,"pops":331,"cells":0},"euclidean":{"expansions":327,"pops":328,"cells":0}},{"dimension":86,"board":3,"optimalCells":76,"manhattan":{"expansions":990,"pops":879,"cells":76},"euclidean":{"expansions":1433,"pops":1325,"cells":76}},{"dimension":86,"board":4,"optimalCells":78,"manhattan":{"expansions":537,"pops":412,"cells":78},"euclidean":{"expansions":1466,"pops":1326,"cells":78}},{"dimension":86,"board":5,"optimalCells":9,"manhattan":{"expansions":25,"pops":10,"cells":9},"euclidean":{"expansions":22,"pops":9,"cells":9}},{"dimension":86,"board":6,"optimalCells":49,"manhattan":{"expansions":382,"pops":306,"cells":49},"euclidean":{"expansions":733,"pops":645,"cells":49}},{"dimension":86,"board":7,"optimalCells":43,"manhattan":{"expansions":214,"pops":137,"cells":46},"euclidean":{"expansions":245,"pops":144,"cells":44}},{"dimension":86,"board":8,"optimalCells":84,"manhattan":{"expansions":755,"pops":708,"cells":84},"euclidean":{"expansions":980,"pops":926,"cells":84}},{"dimension":86,"board":9,"optimalCells":82,"manhattan":{"expansions":644,"pops":600,"cells":82},"euclidean":{"expansions":712,"pops":671,"cells":82}},{"dimension":87,"board":0,"optimalCells":106,"manhattan":{"expansions":1129,"pops":1021,"cells":106},"euclidean":{"expansions":2079,"pops":1975,"cells":106}},{"dimension":87,"board":1,"optimalCells":60,"manhattan":{"expansions":797,"pops":684,"cells":60},"euclidean":{"expansions":1382,"pops":1218,"cells":60}},{"dimension":87,"board":2,"optimalCells":null,"manhattan":{"expansions":1,"pops":2,"cells":0},"euclidean":{"expansions":1,"pops":2,"cells":0}},{"dimension":87,"board":3,"optimalCells":64,"manhattan":{"expansions":433,"pops":342,"cells":73},"euclidean":{"expansions":831,"pops":691,"cells":66}},{"dimension":87,"board":4,"optimalCells":null,"manhattan":{"expansions":4367,"pops":4368,"cells":0},"euclidean":{"expansions":3650,"pops":3651,"cells":0}},{"dimension":87,"board":5,"optimalCells":76,"manhattan":{"expansions":763,"pops":606,"cells":76},"euclidean":{"expansions":1664,"pops":1522,"cells":76}},{"dimension":87,"board":6,"optimalCells":67,"manhattan":{"expansions":473,"pops":338,"cells":71},"euclidean":{"expansions":1057,"pops":895,"cells":68}},{"dimension":87,"board":7,"optimalCells":48,"manhattan":{"expansions":503,"pops":450,"cells":48},"euclidean":{"expansions":571,"pops":528,"cells":48}},{"dimension":87,"board":8,"optimalCells":48,"manhattan":{"expansions":231,"pops":142,"cells":49},"euclidean":{"expansions":458,"pops":341,"cells":49}},{"dimension":87,"board":9,"optimalCells":80,"manhattan":{"expansions":1335,"pops":1182,"cells":80},"euclidean":{"expansions":2225,"pops":2047,"cells":80}},{"dimension":88,"board":0,"optimalCells":44,"manhattan":{"expansions":296,"pops":239,"cells":45},"euclidean":{"expansions":452,"pops":396,"cells":45}},{"dimension":88,"board":1,"optimalCells":87,"manhattan":{"expansions":1237,"pops":1086,"cells":87},"euclidean":{"expansions":2707,"pops":2508,"cells":87}},{"dimension":88,"board":2,"optimalCells":52,"manhattan":{"expansions":639,"pops":535,"cells":52},"euclidean":{"expansions":1049,"pops":908,"cells":52}},{"dimension":88,"board":3,"optimalCells":42,"manhattan":{"expansions":223,"pops":166,"cells":49},"euclidean":{"expansions":269,"pops":196,"cells":44}},{"dimension":88,"board":4,"optimalCells":41,"manhattan":{"expansions":194,"pops":112,"cells":46},"euclidean":{"expansions":128,"pops":63,"cells":42}},{"dimension":88,"board":5,"optimalCells":54,"manhattan":{"expansions":474,"pops":395,"cells":54},"euclidean":{"expansions":811,"pops":735,"cells":54}},{"dimension":88,"board":6,"optimalCells":123,"manhattan":{"expansions":2694,"pops":2475,"cells":123},"euclidean":{"expansions":4319,"pops":4153,"cells":123}},{"dimension":88,"board":7,"optimalCells":83,"manhattan":{"expansions":672,"pops":526,"cells":83},"euclidean":{"expansions":1735,"pops":1580,"cells":83}},{"dimension":88,"board":8,"optimalCells":22,"manhattan":{"expansions":61,"pops":22,"cells":22},"euclidean":{"expansions":61,"pops":22,"cells":22}},{"dimension":88,"board":9,"optimalCells":56,"manhattan":{"expansions":398,"pops":339,"cells":56},"euclidean":{"expansions":623,"pops":567,"cells":56}},{"dimension":89,"board":0,"optimalCells":106,"manhattan":{"expansions":1172,"pops":1075,"cells":107},"euclidean":{"expansions":1702,"pops":1620,"cells":107}},{"dimension":89,"board":1,"optimalCells":87,"manhattan":{"expansions":1000,"pops":886,"cells":87},"euclidean":{"expansions":1936,"pops":1785,"cells":87}},{"dimension":89,"board":2,"optimalCells":46,"manhattan":{"expansions":242,"pops":152,"cells":49},"euclidean":{"expansions":426,"pops":300,"cells":47}},{"dimension":89,"board":3,"optimalCells":59,"manhattan":{"expansions":409,"pops":357,"cells":71},"euclidean":{"expansions":395,"pops":333,"cells":59}},{"dimension":89,"board":4,"optimalCells":78,"manhattan":{"expansions":327,"pops":234,"cells":82},"euclidean":{"expansions":750,"pops":654,"cells":78}},{"dimension":89,"board":5,"optimalCells":116,"manhattan":{"expansions":2330,"pops":2098,"cells":116},"euclidean":{"expansions":3845,"pops":3658,"cells":116}},{"dimension":89,"board":6,"optimalCells":50,"manhattan":{"expansions":125,"pops":53,"cells":53},"euclidean":{"expansions":128,"pops":52,"cells":51}},{"dimension":89,"board":7,"optimalCells":85,"manhattan":{"expansions":347,"pops":263,"cells":86},"euclidean":{"expansions":479,"pops":383,"cells":85}},{"dimension":89,"board":8,"optimalCells":69,"manhattan":{"expansions":516,"pops":427,"cells":69},"euclidean":{"expansions":1007,"pops":926,"cells":69}},{"dimension":89,"board":9,"optimalCells":58,"manhattan":{"expansions":208,"pops":93,"cells":59},"euclidean":{"expansions":335,"pops":215,"cells":59}},{"dimension":90,"board":0,"optimalCells":99,"manhattan":{"expansions":1276,"pops":1139,"cells":99},"euclidean":{"expansions":2399,"pops":2224,"cells":99}},{"dimension":90,"board":1,"optimalCells":39,"manhattan":{"expansions":165,"pops":92,"cells":40},"euclidean":{"expansions":278,"pops":200,"cells":40}},{"dimension":90,"board":2,"optimalCells":28,"manhattan":{"expansions":65,"pops":28,"cells":28},"euclidean":{"expansions":65,"pops":28,"cells":28}},{"dimension":90,"board":3,"optimalCells":91,"manhattan":{"expansions":1165,"pops":1119,"cells":91},"euclidean":{"expansions":1711,"pops":1645,"cells":91}},{"dimension":90,"board":4,"optimalCells":47,"manhattan":{"expansions":416,"pops":335,"cells":47},"euclidean":{"expansions":488,"pops":417,"cells":47}},{"dimension":90,"board":5,"optimalCells":28,"manhattan":{"expansions":84,"pops":39,"cells":29},"euclidean":{"expansions":71,"pops":32,"cells":28}},{"dimension":90,"board":6,"optimalCells":58,"manhattan":{"expansions":167,"pops":70,"cells":60},"euclidean":{"expansions":227,"pops":112,"cells":60}},{"dimension":90,"board":7,"optimalCells":43,"manhattan":{"expansions":152,"pops":114,"cells":45},"euclidean":{"expansions":242,"pops":198,"cells":43}},{"dimension":90,"board":8,"optimalCells":83,"manhattan":{"expansions":740,"pops":677,"cells":94},"euclidean":{"expansions":1286,"pops":1174,"cells":83}},{"dimension":90,"board":9,"optimalCells":68,"manhattan":{"expansions":565,"pops":461,"cells":68},"euclidean":{"expansions":622,"pops":503,"cells":68}},{"dimension":91,"board":0,"optimalCells":59,"manhattan":{"expansions":505,"pops":408,"cells":61},"euclidean":{"expansions":899,"pops":788,"cells":60}},{"dimension":91,"board":1,"optimalCells":55,"manhattan":{"expansions":223,"pops":93,"cells":55},"euclidean":{"expansions":388,"pops":247,"cells":55}},{"dimension":91,"board":2,"optimalCells":133,"manhattan":{"expansions":2276,"pops":2137,"cells":133},"euclidean":{"expansions":2915,"pops":2842,"cells":133}},{"dimension":91,"board":3,"optimalCells":46,"manhattan":{"expansions":631,"pops":542,"cells":46},"euclidean":{"expansions":937,"pops":834,"cells":46}},{"dimension":91,"board":4,"optimalCells":23,"manhattan":{"expansions":166,"pops":123,"cells":23},"euclidean":{"expansions":244,"pops":183,"cells":23}},{"dimension":91,"board":5,"optimalCells":114,"manhattan":{"expansions":678,"pops":595,"cells":116},"euclidean":{"expansions":1449,"pops":1369,"cells":114}},{"dimension":91,"board":6,"optimalCells":23,"manhattan":{"expansions":65,"pops":23,"cells":23},"euclidean":{"expansions":65,"pops":23,"cells":23}},{"dimension":91,"board":7,"optimalCells":48,"manhattan":{"expansions":177,"pops":141,"cells":48},"euclidean":{"expansions":221,"pops":178,"cells":48}},{"dimension":91,"board":8,"optimalCells":36,"manhattan":{"expansions":280,"pops":217,"cells":36},"euclidean":{"expansions":497,"pops":401,"cells":36}},{"dimension":91,"board":9,"optimalCells":60,"manhattan":{"expansions":180,"pops":60,"cells":60},"euclidean":{"expansions":180,"pops":60,"cells":60}},{"dimension":92,"board":0,"optimalCells":37,"manhattan":{"expansions":166,"pops":86,"cells":39},"euclidean":{"expansions":179,"pops":94,"cells":38}},{"dimension":92,"board":1,"optimalCells":81,"manhattan":{"expansions":259,"pops":97,"cells":82},"euclidean":{"expansions":432,"pops":240,"cells":82}},{"dimension":92,"board":2,"optimalCells":28,"manhattan":{"expansions":245,"pops":195,"cells":28},"euclidean":{"expansions":350,"pops":284,"cells":28}},{"dimension":92,"board":3,"optimalCells":50,"manhattan":{"expansions":526,"pops":454,"cells":50},"euclidean":{"expansions":734,"pops":646,"cells":50}},{"dimension":92,"board":4,"optimalCells":150,"manhattan":{"expansions":1278,"pops":1244,"cells":150},"euclidean":{"expansions":1600,"pops":1547,"cells":150}},{"dimension":92,"board":5,"optimalCells":40,"manhattan":{"expansions":150,"pops":86,"cells":40},"euclidean":{"expansions":410,"pops":321,"cells":40}},{"dimension":92,"board":6,"optimalCells":35,"manhattan":{"expansions":108,"pops":77,"cells":38},"euclidean":{"expansions":117,"pops":69,"cells":35}},{"dimension":92,"board":7,"optimalCells":48,"manhattan":{"expansions":255,"pops":162,"cells":48},"euclidean":{"expansions":564,"pops":450,"cells":48}},{"dimension":92,"board":8,"optimalCells":62,"manhattan":{"expansions":271,"pops":200,"cells":68},"euclidean":{"expansions":458,"pops":331,"cells":62}},{"dimension":92,"board":9,"optimalCells":24,"manhattan":{"expansions":69,"pops":27,"cells":27},"euclidean":{"expansions":68,"pops":26,"cells":26}},{"dimension":93,"board":0,"optimalCells":60,"manhattan":{"expansions":442,"pops":413,"cells":60},"euclidean":{"expansions":446,"pops":415,"cells":60}},{"dimension":93,"board":1,"optimalCells":32,"manhattan":{"expansions":104,"pops":57,"cells":35},"euclidean":{"expansions":164,"pops":102,"cells":33}},{"dimension":93,"board":2,"optimalCells":37,"manhattan":{"expansions":263,"pops":232,"cells":37},"euclidean":{"expansions":284,"pops":248,"cells":37}},{"dimension":93,"board":3,"optimalCells":102,"manhattan":{"expansions":656,"pops":512,"cells":102},"euclidean":{"expansions":2552,"pops":2404,"cells":102}},{"dimension":93,"board":4,"optimalCells":19,"manhattan":{"expansions":118,"pops":82,"cells":19},"euclidean":{"expansions":169,"pops":119,"cells":19}},{"dimension":93,"board":5,"optimalCells":40,"manhattan":{"expansions":228,"pops":179,"cells":40},"euclidean":{"expansions":437,"pops":361,"cells":40}},{"dimension":93,"board":6,"optimalCells":72,"manhattan":{"expansions":351,"pops":240,"cells":81},"euclidean":{"expansions":728,"pops":621,"cells":76}},{"dimension":93,"board":7,"optimalCells":45,"manhattan":{"expansions":161,"pops":93,"cells":46},"euclidean":{"expansions":339,"pops":254,"cells":46}},{"dimension":93,"board":8,"optimalCells":22,"manhattan":{"expansions":49,"pops":24,"cells":22},"euclidean":{"expansions":48,"pops":23,"cells":22}},{"dimension":93,"board":9,"optimalCells":69,"manhattan":{"expansions":591,"pops":471,"cells":69},"euclidean":{"expansions":1244,"pops":1093,"cells":69}},{"dimension":94,"board":0,"optimalCells":125,"manhattan":{"expansions":662,"pops":571,"cells":126},"euclidean":{"expansions":957,"pops":884,"cells":125}},{"dimension":94,"board":1,"optimalCells":52,"manhattan":{"expansions":466,"pops":379,"cells":52},"euclidean":{"expansions":944,"pops":813,"cells":52}},{"dimension":94,"board":2,"optimalCells":46,"manhattan":{"expansions":137,"pops":46,"cells":46},"euclidean":{"expansions":137,"pops":46,"cells":46}},{"dimension":94,"board":3,"optimalCells":21,"manhattan":{"expansions":91,"pops":66,"cells":23},"euclidean":{"expansions":114,"pops":76,"cells":21}},{"dimension":94,"board":4,"optimalCells":55,"manhattan":{"expansions":611,"pops":510,"cells":57},"euclidean":{"expansions":961,"pops":875,"cells":55}},{"dimension":94,"board":5,"optimalCells":63,"manhattan":{"expansions":833,"pops":728,"cells":63},"euclidean":{"expansions":1283,"pops":1177,"cells":63}},{"dimension":94,"board":6,"optimalCells":null,"manhattan":{"expansions":3236,"pops":3237,"cells":0},"euclidean":{"expansions":3222,"pops":3223,"cells":0}},{"dimension":94,"board":7,"optimalCells":55,"manhattan":{"expansions":159,"pops":57,"cells":57},"euclidean":{"expansions":157,"pops":56,"cells":56}},{"dimension":94,"board":8,"optimalCells":null,"manhattan":{"expansions":370,"pops":371,"cells":0},"euclidean":{"expansions":369,"pops":370,"cells":0}},{"dimension":94,"board":9,"optimalCells":41,"manhattan":{"expansions":219,"pops":177,"cells":41},"euclidean":{"expansions":150,"pops":108,"cells":41}},{"dimension":95,"board":0,"optimalCells":24,"manhattan":{"expansions":123,"pops":79,"cells":27},"euclidean":{"expansions":156,"pops":111,"cells":24}},{"dimension":95,"board":1,"optimalCells":33,"manhattan":{"expansions":111,"pops":50,"cells":35},"euclidean":{"expansions":148,"pops":83,"cells":33}},{"dimension":95,"board":2,"optimalCells":85,"manhattan":{"expansions":1590,"pops":1410,"cells":85},"euclidean":{"expansions":2749,"pops":2520,"cells":85}},{"dimension":95,"board":3,"optimalCells":71,"manhattan":{"expansions":562,"pops":426,"cells":72},"euclidean":{"expansions":1028,"pops":932,"cells":72}},{"dimension":95,"board":4,"optimalCells":83,"manhattan":{"expansions":480,"pops":393,"cells":97},"euclidean":{"expansions":371,"pops":264,"cells":86}},{"dimension":95,"board":5,"optimalCells":95,"manhattan":{"expansions":641,"pops":452,"cells":95},"euclidean":{"expansions":1720,"pops":1491,"cells":95}},{"dimension":95,"board":6,"optimalCells":23,"manhattan":{"expansions":151,"pops":107,"cells":23},"euclidean":{"expansions":229,"pops":174,"cells":23}},{"dimension":95,"board":7,"optimalCells":46,"manhattan":{"expansions":159,"pops":80,"cells":48},"euclidean":{"expansions":330,"pops":222,"cells":47}},{"dimension":95,"board":8,"optimalCells":61,"manhattan":{"expansions":496,"pops":438,"cells":62},"euclidean":{"expansions":686,"pops":618,"cells":61}},{"dimension":95,"board":9,"optimalCells":51,"manhattan":{"expansions":169,"pops":88,"cells":57},"euclidean":{"expansions":192,"pops":108,"cells":54}},{"dimension":96,"board":0,"optimalCells":48,"manhattan":{"expansions":425,"pops":333,"cells":51},"euclidean":{"expansions":648,"pops":526,"cells":49}},{"dimension":96,"board":1,"optimalCells":31,"manhattan":{"expansions":174,"pops":135,"cells":32},"euclidean":{"expansions":250,"pops":213,"cells":31}},{"dimension":96,"board":2,"optimalCells":19,"manhattan":{"expansions":58,"pops":47,"cells":19},"euclidean":{"expansions":65,"pops":57,"cells":19}},{"dimension":96,"board":3,"optimalCells":101,"manhattan":{"expansions":882,"pops":829,"cells":102},"euclidean":{"expansions":952,"pops":891,"cells":101}},{"dimension":96,"board":4,"optimalCells":99,"manhattan":{"expansions":1597,"pops":1498,"cells":99},"euclidean":{"expansions":2049,"pops":1952,"cells":99}},{"dimension":96,"board":5,"optimalCells":13,"manhattan":{"expansions":56,"pops":32,"cells":13},"euclidean":{"expansions":66,"pops":43,"cells":13}},{"dimension":96,"board":6,"optimalCells":45,"manhattan":{"expansions":188,"pops":113,"cells":46},"euclidean":{"expansions":498,"pops":399,"cells":45}},{"dimension":96,"board":7,"optimalCells":62,"manhattan":{"expansions":196,"pops":75,"cells":63},"euclidean":{"expansions":451,"pops":279,"cells":63}},{"dimension":96,"board":8,"optimalCells":15,"manhattan":{"expansions":40,"pops":15,"cells":15},"euclidean":{"expansions":40,"pops":15,"cells":15}},{"dimension":96,"board":9,"optimalCells":35,"manhattan":{"expansions":138,"pops":75,"cells":37},"euclidean":{"expansions":277,"pops":201,"cells":36}},{"dimension":97,"board":0,"optimalCells":28,"manhattan":{"expansions":107,"pops":101,"cells":28},"euclidean":{"expansions":109,"pops":103,"cells":28}},{"dimension":97,"board":1,"optimalCells":18,"manhattan":{"expansions":58,"pops":27,"cells":19},"euclidean":{"expansions":62,"pops":33,"cells":19}},{"dimension":97,"board":2,"optimalCells":40,"manhattan":{"expansions":106,"pops":42,"cells":40},"euclidean":{"expansions":108,"pops":45,"cells":42}},{"dimension":97,"board":3,"optimalCells":42,"manhattan":{"expansions":143,"pops":110,"cells":48},"euclidean":{"expansions":254,"pops":197,"cells":42}},{"dimension":97,"board":4,"optimalCells":69,"manhattan":{"expansions":688,"pops":557,"cells":70},"euclidean":{"expansions":1219,"pops":1101,"cells":69}},{"dimension":97,"board":5,"optimalCells":91,"manhattan":{"expansions":736,"pops":660,"cells":91},"euclidean":{"expansions":967,"pops":904,"cells":91}},{"dimension":97,"board":6,"optimalCells":58,"manhattan":{"expansions":688,"pops":643,"cells":65},"euclidean":{"expansions":680,"pops":618,"cells":58}},{"dimension":97,"board":7,"optimalCells":100,"manhattan":{"expansions":369,"pops":266,"cells":110},"euclidean":{"expansions":573,"pops":433,"cells":103}},{"dimension":97,"board":8,"optimalCells":34,"manhattan":{"expansions":147,"pops":87,"cells":39},"euclidean":{"expansions":137,"pops":82,"cells":34}},{"dimension":97,"board":9,"optimalCells":46,"manhattan":{"expansions":155,"pops":83,"cells":48},"euclidean":{"expansions":270,"pops":149,"cells":46}},{"dimension":98,"board":0,"optimalCells":null,"manhattan":{"expansions":5798,"pops":5799,"cells":0},"euclidean":{"expansions":5658,"pops":5659,"cells":0}},{"dimension":98,"board":1,"optimalCells":41,"manhattan":{"expansions":205,"pops":166,"cells":46},"euclidean":{"expansions":192,"pops":146,"cells":41}},{"dimension":98,"board":2,"optimalCells":36,"manhattan":{"expansions":125,"pops":62,"cells":41},"euclidean":{"expansions":89,"pops":36,"cells":36}},{"dimension":98,"board":3,"optimalCells":44,"manhattan":{"expansions":382,"pops":295,"cells":44},"euclidean":{"expansions":685,"pops":575,"cells":44}},{"dimension":98,"board":4,"optimalCells":18,"manhattan":{"expansions":60,"pops":36,"cells":18},"euclidean":{"expansions":60,"pops":41,"cells":18}},{"dimension":98,"board":5,"optimalCells":36,"manhattan":{"expansions":246,"pops":199,"cells":36},"euclidean":{"expansions":335,"pops":284,"cells":36}},{"dimension":98,"board":6,"optimalCells":40,"manhattan":{"expansions":408,"pops":336,"cells":40},"euclidean":{"expansions":643,"pops":551,"cells":40}},{"dimension":98,"board":7,"optimalCells":25,"manhattan":{"expansions":57,"pops":30,"cells":25},"euclidean":{"expansions":49,"pops":25,"cells":25}},{"dimension":98,"board":8,"optimalCells":57,"manhattan":{"expansions":483,"pops":432,"cells":57},"euclidean":{"expansions":644,"pops":592,"cells":57}},{"dimension":98,"board":9,"optimalCells":47,"manhattan":{"expansions":174,"pops":131,"cells":58},"euclidean":{"expansions":125,"pops":87,"cells":47}},{"dimension":99,"board":0,"optimalCells":10,"manhattan":{"expansions":38,"pops":22,"cells":10},"euclidean":{"expansions":49,"pops":28,"cells":10}},{"dimension":99,"board":1,"optimalCells":60,"manhattan":{"expansions":308,"pops":242,"cells":60},"euclidean":{"expansions":785,"pops":718,"cells":60}},{"dimension":99,"board":2,"optimalCells":25,"manhattan":{"expansions":121,"pops":88,"cells":25},"euclidean":{"expansions":195,"pops":150,"cells":25}},{"dimension":99,"board":3,"optimalCells":54,"manhattan":{"expansions":362,"pops":296,"cells":54},"euclidean":{"expansions":836,"pops":756,"cells":54}},{"dimension":99,"board":4,"optimalCells":49,"manhattan":{"expansions":137,"pops":50,"cells":49},"euclidean":{"expansions":136,"pops":50,"cells":49}},{"dimension":99,"board":5,"optimalCells":62,"manhattan":{"expansions":244,"pops":202,"cells":68},"euclidean":{"expansions":451,"pops":386,"cells":62}},{"dimension":99,"board":6,"optimalCells":55,"manhattan":{"expansions":199,"pops":95,"cells":57},"euclidean":{"expansions":330,"pops":190,"cells":56}},{"dimension":99,"board":7,"optimalCells":40,"manhattan":{"expansions":214,"pops":131,"cells":41},"euclidean":{"expansions":465,"pops":371,"cells":41}},{"dimension":99,"board":8,"optimalCells":69,"manhattan":{"expansions":400,"pops":333,"cells":69},"euclidean":{"expansions":785,"pops":698,"cells":69}},{"dimension":99,"board":9,"optimalCells":20,"manhattan":{"expansions":67,"pops":29,"cells":21},"euclidean":{"expansions":70,"pops":32,"cells":21}}]}
diff --git a/web/src/lib/data/load.ts b/web/src/lib/data/load.ts
new file mode 100644
index 0000000..05b4be9
--- /dev/null
+++ b/web/src/lib/data/load.ts
@@ -0,0 +1,41 @@
+/**
+ * Build-time loaders for the generated study data. Read with fs (not
+ * `import`) so tsc does not infer types for large JSON files; only used by
+ * Server Components and route handlers, which run at build time.
+ */
+import { readFileSync } from "node:fs";
+import path from "node:path";
+
+import type { PruningSample } from "@/lib/analysis/alpha-beta";
+import type { PairedStudyRow } from "@/lib/analysis/astar-paired";
+import type { PythonGame } from "@/lib/tournament/crosscheck";
+import type { GameRecord } from "@/lib/tournament/play";
+
+export interface StudyMeta {
+ generatedBy: string;
+ generatedAt?: string;
+ node?: string;
+ python?: string;
+ cpu?: string;
+ implementation: string;
+ config: Record;
+ seconds?: number;
+}
+
+const DATA_DIR = path.join(process.cwd(), "src", "lib", "data");
+
+function read(name: string): T {
+ return JSON.parse(readFileSync(path.join(DATA_DIR, name), "utf8")) as T;
+}
+
+export const loadReferenceTournament = () =>
+ read<{ meta: StudyMeta; games: GameRecord[] }>("reference-tournament.json");
+
+export const loadAstarStudy = () =>
+ read<{ meta: StudyMeta; rows: PairedStudyRow[] }>("astar-paired-study.json");
+
+export const loadAlphaBetaStudy = () =>
+ read<{ meta: StudyMeta; samples: PruningSample[] }>("alpha-beta-study.json");
+
+export const loadPythonCrosscheck = () =>
+ read<{ meta: StudyMeta; games: PythonGame[] }>("python-crosscheck.json");
diff --git a/web/src/lib/data/python-crosscheck.json b/web/src/lib/data/python-crosscheck.json
new file mode 100644
index 0000000..e24e295
--- /dev/null
+++ b/web/src/lib/data/python-crosscheck.json
@@ -0,0 +1 @@
+{"meta": {"generatedBy": "scripts/crosscheck_tournament.py", "implementation": "original Python (coursework/Project Part B), variants by patching one knob", "python": "3.12.7", "pythonHashSeed": "0", "config": {"agents": ["minimax-dynamic", "minimax-d2", "greedy", "random"], "sizes": [4, 5], "rounds": 20, "seed": 2022}, "seconds": 212.7}, "games": [{"n": 4, "red": "minimax-dynamic", "blue": "minimax-d2", "seed": 2022046105, "winner": "blue", "turns": 14}, {"n": 4, "red": "minimax-d2", "blue": "minimax-dynamic", "seed": 2022046105, "winner": "blue", "turns": 12}, {"n": 4, "red": "minimax-dynamic", "blue": "minimax-d2", "seed": 2022046106, "winner": "blue", "turns": 10}, {"n": 4, "red": "minimax-d2", "blue": "minimax-dynamic", "seed": 2022046106, "winner": "blue", "turns": 12}, {"n": 4, "red": "minimax-dynamic", "blue": "minimax-d2", "seed": 2022046107, "winner": "red", "turns": 13}, {"n": 4, "red": "minimax-d2", "blue": "minimax-dynamic", "seed": 2022046107, "winner": "red", "turns": 11}, {"n": 4, "red": "minimax-dynamic", "blue": "minimax-d2", "seed": 2022046108, "winner": "blue", "turns": 12}, {"n": 4, "red": "minimax-d2", "blue": "minimax-dynamic", "seed": 2022046108, "winner": "blue", "turns": 16}, {"n": 4, "red": "minimax-dynamic", "blue": "minimax-d2", "seed": 2022046109, "winner": "blue", "turns": 12}, {"n": 4, "red": "minimax-d2", "blue": "minimax-dynamic", "seed": 2022046109, "winner": "red", "turns": 15}, {"n": 4, "red": "minimax-dynamic", "blue": "minimax-d2", "seed": 2022046110, "winner": "blue", "turns": 12}, {"n": 4, "red": "minimax-d2", "blue": "minimax-dynamic", "seed": 2022046110, "winner": "red", "turns": 15}, {"n": 4, "red": "minimax-dynamic", "blue": "minimax-d2", "seed": 2022046111, "winner": "red", "turns": 13}, {"n": 4, "red": "minimax-d2", "blue": "minimax-dynamic", "seed": 2022046111, "winner": "red", "turns": 17}, {"n": 4, "red": "minimax-dynamic", "blue": "minimax-d2", "seed": 2022046112, "winner": "red", "turns": 13}, {"n": 4, "red": "minimax-d2", "blue": "minimax-dynamic", "seed": 2022046112, "winner": "blue", "turns": 14}, {"n": 4, "red": "minimax-dynamic", "blue": "minimax-d2", "seed": 2022046113, "winner": "blue", "turns": 20}, {"n": 4, "red": "minimax-d2", "blue": "minimax-dynamic", "seed": 2022046113, "winner": "red", "turns": 15}, {"n": 4, "red": "minimax-dynamic", "blue": "minimax-d2", "seed": 2022046114, "winner": "blue", "turns": 12}, {"n": 4, "red": "minimax-d2", "blue": "minimax-dynamic", "seed": 2022046114, "winner": "blue", "turns": 10}, {"n": 4, "red": "minimax-dynamic", "blue": "minimax-d2", "seed": 2022046115, "winner": "blue", "turns": 12}, {"n": 4, "red": "minimax-d2", "blue": "minimax-dynamic", "seed": 2022046115, "winner": "red", "turns": 15}, {"n": 4, "red": "minimax-dynamic", "blue": "minimax-d2", "seed": 2022046116, "winner": "red", "turns": 15}, {"n": 4, "red": "minimax-d2", "blue": "minimax-dynamic", "seed": 2022046116, "winner": "red", "turns": 13}, {"n": 4, "red": "minimax-dynamic", "blue": "minimax-d2", "seed": 2022046117, "winner": "blue", "turns": 20}, {"n": 4, "red": "minimax-d2", "blue": "minimax-dynamic", "seed": 2022046117, "winner": "blue", "turns": 16}, {"n": 4, "red": "minimax-dynamic", "blue": "minimax-d2", "seed": 2022046118, "winner": "blue", "turns": 14}, {"n": 4, "red": "minimax-d2", "blue": "minimax-dynamic", "seed": 2022046118, "winner": "red", "turns": 11}, {"n": 4, "red": "minimax-dynamic", "blue": "minimax-d2", "seed": 2022046119, "winner": "blue", "turns": 18}, {"n": 4, "red": "minimax-d2", "blue": "minimax-dynamic", "seed": 2022046119, "winner": "blue", "turns": 14}, {"n": 4, "red": "minimax-dynamic", "blue": "minimax-d2", "seed": 2022046120, "winner": "blue", "turns": 14}, {"n": 4, "red": "minimax-d2", "blue": "minimax-dynamic", "seed": 2022046120, "winner": "red", "turns": 15}, {"n": 4, "red": "minimax-dynamic", "blue": "minimax-d2", "seed": 2022046121, "winner": "blue", "turns": 16}, {"n": 4, "red": "minimax-d2", "blue": "minimax-dynamic", "seed": 2022046121, "winner": "red", "turns": 15}, {"n": 4, "red": "minimax-dynamic", "blue": "minimax-d2", "seed": 2022046122, "winner": "red", "turns": 13}, {"n": 4, "red": "minimax-d2", "blue": "minimax-dynamic", "seed": 2022046122, "winner": "blue", "turns": 14}, {"n": 4, "red": "minimax-dynamic", "blue": "minimax-d2", "seed": 2022046123, "winner": "blue", "turns": 14}, {"n": 4, "red": "minimax-d2", "blue": "minimax-dynamic", "seed": 2022046123, "winner": "red", "turns": 15}, {"n": 4, "red": "minimax-dynamic", "blue": "minimax-d2", "seed": 2022046124, "winner": "red", "turns": 13}, {"n": 4, "red": "minimax-d2", "blue": "minimax-dynamic", "seed": 2022046124, "winner": "red", "turns": 15}, {"n": 4, "red": "minimax-dynamic", "blue": "greedy", "seed": 2022046116, "winner": "blue", "turns": 14}, {"n": 4, "red": "greedy", "blue": "minimax-dynamic", "seed": 2022046116, "winner": "blue", "turns": 12}, {"n": 4, "red": "minimax-dynamic", "blue": "greedy", "seed": 2022046117, "winner": "blue", "turns": 10}, {"n": 4, "red": "greedy", "blue": "minimax-dynamic", "seed": 2022046117, "winner": "blue", "turns": 16}, {"n": 4, "red": "minimax-dynamic", "blue": "greedy", "seed": 2022046118, "winner": "red", "turns": 13}, {"n": 4, "red": "greedy", "blue": "minimax-dynamic", "seed": 2022046118, "winner": "blue", "turns": 12}, {"n": 4, "red": "minimax-dynamic", "blue": "greedy", "seed": 2022046119, "winner": "blue", "turns": 14}, {"n": 4, "red": "greedy", "blue": "minimax-dynamic", "seed": 2022046119, "winner": "blue", "turns": 14}, {"n": 4, "red": "minimax-dynamic", "blue": "greedy", "seed": 2022046120, "winner": "red", "turns": 13}, {"n": 4, "red": "greedy", "blue": "minimax-dynamic", "seed": 2022046120, "winner": "red", "turns": 13}, {"n": 4, "red": "minimax-dynamic", "blue": "greedy", "seed": 2022046121, "winner": "blue", "turns": 18}, {"n": 4, "red": "greedy", "blue": "minimax-dynamic", "seed": 2022046121, "winner": "blue", "turns": 12}, {"n": 4, "red": "minimax-dynamic", "blue": "greedy", "seed": 2022046122, "winner": "blue", "turns": 14}, {"n": 4, "red": "greedy", "blue": "minimax-dynamic", "seed": 2022046122, "winner": "red", "turns": 15}, {"n": 4, "red": "minimax-dynamic", "blue": "greedy", "seed": 2022046123, "winner": "red", "turns": 13}, {"n": 4, "red": "greedy", "blue": "minimax-dynamic", "seed": 2022046123, "winner": "blue", "turns": 16}, {"n": 4, "red": "minimax-dynamic", "blue": "greedy", "seed": 2022046124, "winner": "red", "turns": 17}, {"n": 4, "red": "greedy", "blue": "minimax-dynamic", "seed": 2022046124, "winner": "blue", "turns": 12}, {"n": 4, "red": "minimax-dynamic", "blue": "greedy", "seed": 2022046125, "winner": "red", "turns": 15}, {"n": 4, "red": "greedy", "blue": "minimax-dynamic", "seed": 2022046125, "winner": "red", "turns": 17}, {"n": 4, "red": "minimax-dynamic", "blue": "greedy", "seed": 2022046126, "winner": "red", "turns": 17}, {"n": 4, "red": "greedy", "blue": "minimax-dynamic", "seed": 2022046126, "winner": "red", "turns": 11}, {"n": 4, "red": "minimax-dynamic", "blue": "greedy", "seed": 2022046127, "winner": "red", "turns": 13}, {"n": 4, "red": "greedy", "blue": "minimax-dynamic", "seed": 2022046127, "winner": "blue", "turns": 16}, {"n": 4, "red": "minimax-dynamic", "blue": "greedy", "seed": 2022046128, "winner": "blue", "turns": 14}, {"n": 4, "red": "greedy", "blue": "minimax-dynamic", "seed": 2022046128, "winner": "blue", "turns": 14}, {"n": 4, "red": "minimax-dynamic", "blue": "greedy", "seed": 2022046129, "winner": "red", "turns": 19}, {"n": 4, "red": "greedy", "blue": "minimax-dynamic", "seed": 2022046129, "winner": "red", "turns": 11}, {"n": 4, "red": "minimax-dynamic", "blue": "greedy", "seed": 2022046130, "winner": "red", "turns": 15}, {"n": 4, "red": "greedy", "blue": "minimax-dynamic", "seed": 2022046130, "winner": "red", "turns": 13}, {"n": 4, "red": "minimax-dynamic", "blue": "greedy", "seed": 2022046131, "winner": "blue", "turns": 14}, {"n": 4, "red": "greedy", "blue": "minimax-dynamic", "seed": 2022046131, "winner": "blue", "turns": 18}, {"n": 4, "red": "minimax-dynamic", "blue": "greedy", "seed": 2022046132, "winner": "red", "turns": 13}, {"n": 4, "red": "greedy", "blue": "minimax-dynamic", "seed": 2022046132, "winner": "red", "turns": 13}, {"n": 4, "red": "minimax-dynamic", "blue": "greedy", "seed": 2022046133, "winner": "red", "turns": 17}, {"n": 4, "red": "greedy", "blue": "minimax-dynamic", "seed": 2022046133, "winner": "red", "turns": 15}, {"n": 4, "red": "minimax-dynamic", "blue": "greedy", "seed": 2022046134, "winner": "red", "turns": 13}, {"n": 4, "red": "greedy", "blue": "minimax-dynamic", "seed": 2022046134, "winner": "red", "turns": 13}, {"n": 4, "red": "minimax-dynamic", "blue": "greedy", "seed": 2022046135, "winner": "blue", "turns": 16}, {"n": 4, "red": "greedy", "blue": "minimax-dynamic", "seed": 2022046135, "winner": "blue", "turns": 12}, {"n": 4, "red": "minimax-dynamic", "blue": "random", "seed": 2022046127, "winner": "blue", "turns": 10}, {"n": 4, "red": "random", "blue": "minimax-dynamic", "seed": 2022046127, "winner": "red", "turns": 13}, {"n": 4, "red": "minimax-dynamic", "blue": "random", "seed": 2022046128, "winner": "red", "turns": 15}, {"n": 4, "red": "random", "blue": "minimax-dynamic", "seed": 2022046128, "winner": "blue", "turns": 14}, {"n": 4, "red": "minimax-dynamic", "blue": "random", "seed": 2022046129, "winner": "red", "turns": 17}, {"n": 4, "red": "random", "blue": "minimax-dynamic", "seed": 2022046129, "winner": "blue", "turns": 14}, {"n": 4, "red": "minimax-dynamic", "blue": "random", "seed": 2022046130, "winner": "blue", "turns": 14}, {"n": 4, "red": "random", "blue": "minimax-dynamic", "seed": 2022046130, "winner": "red", "turns": 13}, {"n": 4, "red": "minimax-dynamic", "blue": "random", "seed": 2022046131, "winner": "red", "turns": 17}, {"n": 4, "red": "random", "blue": "minimax-dynamic", "seed": 2022046131, "winner": "blue", "turns": 10}, {"n": 4, "red": "minimax-dynamic", "blue": "random", "seed": 2022046132, "winner": "red", "turns": 13}, {"n": 4, "red": "random", "blue": "minimax-dynamic", "seed": 2022046132, "winner": "blue", "turns": 16}, {"n": 4, "red": "minimax-dynamic", "blue": "random", "seed": 2022046133, "winner": "red", "turns": 11}, {"n": 4, "red": "random", "blue": "minimax-dynamic", "seed": 2022046133, "winner": "blue", "turns": 14}, {"n": 4, "red": "minimax-dynamic", "blue": "random", "seed": 2022046134, "winner": "red", "turns": 15}, {"n": 4, "red": "random", "blue": "minimax-dynamic", "seed": 2022046134, "winner": "blue", "turns": 10}, {"n": 4, "red": "minimax-dynamic", "blue": "random", "seed": 2022046135, "winner": "blue", "turns": 18}, {"n": 4, "red": "random", "blue": "minimax-dynamic", "seed": 2022046135, "winner": "red", "turns": 7}, {"n": 4, "red": "minimax-dynamic", "blue": "random", "seed": 2022046136, "winner": "red", "turns": 17}, {"n": 4, "red": "random", "blue": "minimax-dynamic", "seed": 2022046136, "winner": "red", "turns": 13}, {"n": 4, "red": "minimax-dynamic", "blue": "random", "seed": 2022046137, "winner": "red", "turns": 9}, {"n": 4, "red": "random", "blue": "minimax-dynamic", "seed": 2022046137, "winner": "blue", "turns": 12}, {"n": 4, "red": "minimax-dynamic", "blue": "random", "seed": 2022046138, "winner": "red", "turns": 9}, {"n": 4, "red": "random", "blue": "minimax-dynamic", "seed": 2022046138, "winner": "red", "turns": 9}, {"n": 4, "red": "minimax-dynamic", "blue": "random", "seed": 2022046139, "winner": "red", "turns": 13}, {"n": 4, "red": "random", "blue": "minimax-dynamic", "seed": 2022046139, "winner": "red", "turns": 13}, {"n": 4, "red": "minimax-dynamic", "blue": "random", "seed": 2022046140, "winner": "red", "turns": 11}, {"n": 4, "red": "random", "blue": "minimax-dynamic", "seed": 2022046140, "winner": "blue", "turns": 16}, {"n": 4, "red": "minimax-dynamic", "blue": "random", "seed": 2022046141, "winner": "red", "turns": 19}, {"n": 4, "red": "random", "blue": "minimax-dynamic", "seed": 2022046141, "winner": "blue", "turns": 12}, {"n": 4, "red": "minimax-dynamic", "blue": "random", "seed": 2022046142, "winner": "red", "turns": 11}, {"n": 4, "red": "random", "blue": "minimax-dynamic", "seed": 2022046142, "winner": "blue", "turns": 12}, {"n": 4, "red": "minimax-dynamic", "blue": "random", "seed": 2022046143, "winner": "red", "turns": 13}, {"n": 4, "red": "random", "blue": "minimax-dynamic", "seed": 2022046143, "winner": "blue", "turns": 10}, {"n": 4, "red": "minimax-dynamic", "blue": "random", "seed": 2022046144, "winner": "red", "turns": 13}, {"n": 4, "red": "random", "blue": "minimax-dynamic", "seed": 2022046144, "winner": "blue", "turns": 14}, {"n": 4, "red": "minimax-dynamic", "blue": "random", "seed": 2022046145, "winner": "blue", "turns": 16}, {"n": 4, "red": "random", "blue": "minimax-dynamic", "seed": 2022046145, "winner": "blue", "turns": 12}, {"n": 4, "red": "minimax-dynamic", "blue": "random", "seed": 2022046146, "winner": "red", "turns": 15}, {"n": 4, "red": "random", "blue": "minimax-dynamic", "seed": 2022046146, "winner": "blue", "turns": 14}, {"n": 4, "red": "minimax-d2", "blue": "greedy", "seed": 2022046217, "winner": "red", "turns": 13}, {"n": 4, "red": "greedy", "blue": "minimax-d2", "seed": 2022046217, "winner": "red", "turns": 11}, {"n": 4, "red": "minimax-d2", "blue": "greedy", "seed": 2022046218, "winner": "blue", "turns": 16}, {"n": 4, "red": "greedy", "blue": "minimax-d2", "seed": 2022046218, "winner": "red", "turns": 11}, {"n": 4, "red": "minimax-d2", "blue": "greedy", "seed": 2022046219, "winner": "blue", "turns": 10}, {"n": 4, "red": "greedy", "blue": "minimax-d2", "seed": 2022046219, "winner": "red", "turns": 11}, {"n": 4, "red": "minimax-d2", "blue": "greedy", "seed": 2022046220, "winner": "red", "turns": 17}, {"n": 4, "red": "greedy", "blue": "minimax-d2", "seed": 2022046220, "winner": "blue", "turns": 12}, {"n": 4, "red": "minimax-d2", "blue": "greedy", "seed": 2022046221, "winner": "red", "turns": 13}, {"n": 4, "red": "greedy", "blue": "minimax-d2", "seed": 2022046221, "winner": "red", "turns": 11}, {"n": 4, "red": "minimax-d2", "blue": "greedy", "seed": 2022046222, "winner": "red", "turns": 15}, {"n": 4, "red": "greedy", "blue": "minimax-d2", "seed": 2022046222, "winner": "red", "turns": 9}, {"n": 4, "red": "minimax-d2", "blue": "greedy", "seed": 2022046223, "winner": "blue", "turns": 12}, {"n": 4, "red": "greedy", "blue": "minimax-d2", "seed": 2022046223, "winner": "blue", "turns": 16}, {"n": 4, "red": "minimax-d2", "blue": "greedy", "seed": 2022046224, "winner": "blue", "turns": 14}, {"n": 4, "red": "greedy", "blue": "minimax-d2", "seed": 2022046224, "winner": "blue", "turns": 12}, {"n": 4, "red": "minimax-d2", "blue": "greedy", "seed": 2022046225, "winner": "blue", "turns": 10}, {"n": 4, "red": "greedy", "blue": "minimax-d2", "seed": 2022046225, "winner": "red", "turns": 11}, {"n": 4, "red": "minimax-d2", "blue": "greedy", "seed": 2022046226, "winner": "blue", "turns": 14}, {"n": 4, "red": "greedy", "blue": "minimax-d2", "seed": 2022046226, "winner": "red", "turns": 17}, {"n": 4, "red": "minimax-d2", "blue": "greedy", "seed": 2022046227, "winner": "red", "turns": 11}, {"n": 4, "red": "greedy", "blue": "minimax-d2", "seed": 2022046227, "winner": "red", "turns": 13}, {"n": 4, "red": "minimax-d2", "blue": "greedy", "seed": 2022046228, "winner": "blue", "turns": 10}, {"n": 4, "red": "greedy", "blue": "minimax-d2", "seed": 2022046228, "winner": "blue", "turns": 16}, {"n": 4, "red": "minimax-d2", "blue": "greedy", "seed": 2022046229, "winner": "blue", "turns": 14}, {"n": 4, "red": "greedy", "blue": "minimax-d2", "seed": 2022046229, "winner": "blue", "turns": 12}, {"n": 4, "red": "minimax-d2", "blue": "greedy", "seed": 2022046230, "winner": "blue", "turns": 10}, {"n": 4, "red": "greedy", "blue": "minimax-d2", "seed": 2022046230, "winner": "red", "turns": 11}, {"n": 4, "red": "minimax-d2", "blue": "greedy", "seed": 2022046231, "winner": "red", "turns": 15}, {"n": 4, "red": "greedy", "blue": "minimax-d2", "seed": 2022046231, "winner": "blue", "turns": 12}, {"n": 4, "red": "minimax-d2", "blue": "greedy", "seed": 2022046232, "winner": "blue", "turns": 14}, {"n": 4, "red": "greedy", "blue": "minimax-d2", "seed": 2022046232, "winner": "red", "turns": 9}, {"n": 4, "red": "minimax-d2", "blue": "greedy", "seed": 2022046233, "winner": "red", "turns": 21}, {"n": 4, "red": "greedy", "blue": "minimax-d2", "seed": 2022046233, "winner": "blue", "turns": 14}, {"n": 4, "red": "minimax-d2", "blue": "greedy", "seed": 2022046234, "winner": "red", "turns": 15}, {"n": 4, "red": "greedy", "blue": "minimax-d2", "seed": 2022046234, "winner": "red", "turns": 11}, {"n": 4, "red": "minimax-d2", "blue": "greedy", "seed": 2022046235, "winner": "red", "turns": 15}, {"n": 4, "red": "greedy", "blue": "minimax-d2", "seed": 2022046235, "winner": "blue", "turns": 12}, {"n": 4, "red": "minimax-d2", "blue": "greedy", "seed": 2022046236, "winner": "red", "turns": 15}, {"n": 4, "red": "greedy", "blue": "minimax-d2", "seed": 2022046236, "winner": "blue", "turns": 10}, {"n": 4, "red": "minimax-d2", "blue": "random", "seed": 2022046228, "winner": "red", "turns": 13}, {"n": 4, "red": "random", "blue": "minimax-d2", "seed": 2022046228, "winner": "blue", "turns": 14}, {"n": 4, "red": "minimax-d2", "blue": "random", "seed": 2022046229, "winner": "red", "turns": 11}, {"n": 4, "red": "random", "blue": "minimax-d2", "seed": 2022046229, "winner": "blue", "turns": 18}, {"n": 4, "red": "minimax-d2", "blue": "random", "seed": 2022046230, "winner": "red", "turns": 13}, {"n": 4, "red": "random", "blue": "minimax-d2", "seed": 2022046230, "winner": "blue", "turns": 16}, {"n": 4, "red": "minimax-d2", "blue": "random", "seed": 2022046231, "winner": "red", "turns": 11}, {"n": 4, "red": "random", "blue": "minimax-d2", "seed": 2022046231, "winner": "blue", "turns": 16}, {"n": 4, "red": "minimax-d2", "blue": "random", "seed": 2022046232, "winner": "red", "turns": 13}, {"n": 4, "red": "random", "blue": "minimax-d2", "seed": 2022046232, "winner": "blue", "turns": 16}, {"n": 4, "red": "minimax-d2", "blue": "random", "seed": 2022046233, "winner": "red", "turns": 13}, {"n": 4, "red": "random", "blue": "minimax-d2", "seed": 2022046233, "winner": "blue", "turns": 18}, {"n": 4, "red": "minimax-d2", "blue": "random", "seed": 2022046234, "winner": "red", "turns": 13}, {"n": 4, "red": "random", "blue": "minimax-d2", "seed": 2022046234, "winner": "blue", "turns": 12}, {"n": 4, "red": "minimax-d2", "blue": "random", "seed": 2022046235, "winner": "red", "turns": 13}, {"n": 4, "red": "random", "blue": "minimax-d2", "seed": 2022046235, "winner": "blue", "turns": 18}, {"n": 4, "red": "minimax-d2", "blue": "random", "seed": 2022046236, "winner": "red", "turns": 11}, {"n": 4, "red": "random", "blue": "minimax-d2", "seed": 2022046236, "winner": "blue", "turns": 12}, {"n": 4, "red": "minimax-d2", "blue": "random", "seed": 2022046237, "winner": "red", "turns": 11}, {"n": 4, "red": "random", "blue": "minimax-d2", "seed": 2022046237, "winner": "blue", "turns": 16}, {"n": 4, "red": "minimax-d2", "blue": "random", "seed": 2022046238, "winner": "red", "turns": 17}, {"n": 4, "red": "random", "blue": "minimax-d2", "seed": 2022046238, "winner": "blue", "turns": 14}, {"n": 4, "red": "minimax-d2", "blue": "random", "seed": 2022046239, "winner": "red", "turns": 15}, {"n": 4, "red": "random", "blue": "minimax-d2", "seed": 2022046239, "winner": "blue", "turns": 18}, {"n": 4, "red": "minimax-d2", "blue": "random", "seed": 2022046240, "winner": "red", "turns": 11}, {"n": 4, "red": "random", "blue": "minimax-d2", "seed": 2022046240, "winner": "red", "turns": 7}, {"n": 4, "red": "minimax-d2", "blue": "random", "seed": 2022046241, "winner": "red", "turns": 19}, {"n": 4, "red": "random", "blue": "minimax-d2", "seed": 2022046241, "winner": "blue", "turns": 12}, {"n": 4, "red": "minimax-d2", "blue": "random", "seed": 2022046242, "winner": "red", "turns": 11}, {"n": 4, "red": "random", "blue": "minimax-d2", "seed": 2022046242, "winner": "blue", "turns": 16}, {"n": 4, "red": "minimax-d2", "blue": "random", "seed": 2022046243, "winner": "blue", "turns": 12}, {"n": 4, "red": "random", "blue": "minimax-d2", "seed": 2022046243, "winner": "blue", "turns": 12}, {"n": 4, "red": "minimax-d2", "blue": "random", "seed": 2022046244, "winner": "red", "turns": 17}, {"n": 4, "red": "random", "blue": "minimax-d2", "seed": 2022046244, "winner": "red", "turns": 15}, {"n": 4, "red": "minimax-d2", "blue": "random", "seed": 2022046245, "winner": "red", "turns": 15}, {"n": 4, "red": "random", "blue": "minimax-d2", "seed": 2022046245, "winner": "blue", "turns": 10}, {"n": 4, "red": "minimax-d2", "blue": "random", "seed": 2022046246, "winner": "red", "turns": 11}, {"n": 4, "red": "random", "blue": "minimax-d2", "seed": 2022046246, "winner": "red", "turns": 15}, {"n": 4, "red": "minimax-d2", "blue": "random", "seed": 2022046247, "winner": "red", "turns": 13}, {"n": 4, "red": "random", "blue": "minimax-d2", "seed": 2022046247, "winner": "red", "turns": 15}, {"n": 4, "red": "greedy", "blue": "random", "seed": 2022046329, "winner": "red", "turns": 17}, {"n": 4, "red": "random", "blue": "greedy", "seed": 2022046329, "winner": "blue", "turns": 14}, {"n": 4, "red": "greedy", "blue": "random", "seed": 2022046330, "winner": "red", "turns": 13}, {"n": 4, "red": "random", "blue": "greedy", "seed": 2022046330, "winner": "blue", "turns": 12}, {"n": 4, "red": "greedy", "blue": "random", "seed": 2022046331, "winner": "red", "turns": 17}, {"n": 4, "red": "random", "blue": "greedy", "seed": 2022046331, "winner": "blue", "turns": 14}, {"n": 4, "red": "greedy", "blue": "random", "seed": 2022046332, "winner": "red", "turns": 15}, {"n": 4, "red": "random", "blue": "greedy", "seed": 2022046332, "winner": "blue", "turns": 18}, {"n": 4, "red": "greedy", "blue": "random", "seed": 2022046333, "winner": "red", "turns": 17}, {"n": 4, "red": "random", "blue": "greedy", "seed": 2022046333, "winner": "red", "turns": 11}, {"n": 4, "red": "greedy", "blue": "random", "seed": 2022046334, "winner": "red", "turns": 17}, {"n": 4, "red": "random", "blue": "greedy", "seed": 2022046334, "winner": "blue", "turns": 16}, {"n": 4, "red": "greedy", "blue": "random", "seed": 2022046335, "winner": "red", "turns": 13}, {"n": 4, "red": "random", "blue": "greedy", "seed": 2022046335, "winner": "blue", "turns": 14}, {"n": 4, "red": "greedy", "blue": "random", "seed": 2022046336, "winner": "red", "turns": 15}, {"n": 4, "red": "random", "blue": "greedy", "seed": 2022046336, "winner": "red", "turns": 11}, {"n": 4, "red": "greedy", "blue": "random", "seed": 2022046337, "winner": "red", "turns": 15}, {"n": 4, "red": "random", "blue": "greedy", "seed": 2022046337, "winner": "blue", "turns": 16}, {"n": 4, "red": "greedy", "blue": "random", "seed": 2022046338, "winner": "blue", "turns": 14}, {"n": 4, "red": "random", "blue": "greedy", "seed": 2022046338, "winner": "blue", "turns": 12}, {"n": 4, "red": "greedy", "blue": "random", "seed": 2022046339, "winner": "blue", "turns": 12}, {"n": 4, "red": "random", "blue": "greedy", "seed": 2022046339, "winner": "blue", "turns": 12}, {"n": 4, "red": "greedy", "blue": "random", "seed": 2022046340, "winner": "blue", "turns": 14}, {"n": 4, "red": "random", "blue": "greedy", "seed": 2022046340, "winner": "red", "turns": 15}, {"n": 4, "red": "greedy", "blue": "random", "seed": 2022046341, "winner": "blue", "turns": 18}, {"n": 4, "red": "random", "blue": "greedy", "seed": 2022046341, "winner": "blue", "turns": 16}, {"n": 4, "red": "greedy", "blue": "random", "seed": 2022046342, "winner": "blue", "turns": 10}, {"n": 4, "red": "random", "blue": "greedy", "seed": 2022046342, "winner": "blue", "turns": 16}, {"n": 4, "red": "greedy", "blue": "random", "seed": 2022046343, "winner": "red", "turns": 11}, {"n": 4, "red": "random", "blue": "greedy", "seed": 2022046343, "winner": "blue", "turns": 12}, {"n": 4, "red": "greedy", "blue": "random", "seed": 2022046344, "winner": "blue", "turns": 12}, {"n": 4, "red": "random", "blue": "greedy", "seed": 2022046344, "winner": "blue", "turns": 12}, {"n": 4, "red": "greedy", "blue": "random", "seed": 2022046345, "winner": "red", "turns": 13}, {"n": 4, "red": "random", "blue": "greedy", "seed": 2022046345, "winner": "blue", "turns": 18}, {"n": 4, "red": "greedy", "blue": "random", "seed": 2022046346, "winner": "red", "turns": 15}, {"n": 4, "red": "random", "blue": "greedy", "seed": 2022046346, "winner": "red", "turns": 13}, {"n": 4, "red": "greedy", "blue": "random", "seed": 2022046347, "winner": "red", "turns": 15}, {"n": 4, "red": "random", "blue": "greedy", "seed": 2022046347, "winner": "blue", "turns": 16}, {"n": 4, "red": "greedy", "blue": "random", "seed": 2022046348, "winner": "red", "turns": 17}, {"n": 4, "red": "random", "blue": "greedy", "seed": 2022046348, "winner": "blue", "turns": 14}, {"n": 5, "red": "minimax-dynamic", "blue": "minimax-d2", "seed": 2022056112, "winner": "blue", "turns": 18}, {"n": 5, "red": "minimax-d2", "blue": "minimax-dynamic", "seed": 2022056112, "winner": "blue", "turns": 18}, {"n": 5, "red": "minimax-dynamic", "blue": "minimax-d2", "seed": 2022056113, "winner": "blue", "turns": 22}, {"n": 5, "red": "minimax-d2", "blue": "minimax-dynamic", "seed": 2022056113, "winner": "blue", "turns": 14}, {"n": 5, "red": "minimax-dynamic", "blue": "minimax-d2", "seed": 2022056114, "winner": "blue", "turns": 22}, {"n": 5, "red": "minimax-d2", "blue": "minimax-dynamic", "seed": 2022056114, "winner": "blue", "turns": 28}, {"n": 5, "red": "minimax-dynamic", "blue": "minimax-d2", "seed": 2022056115, "winner": "red", "turns": 21}, {"n": 5, "red": "minimax-d2", "blue": "minimax-dynamic", "seed": 2022056115, "winner": "blue", "turns": 20}, {"n": 5, "red": "minimax-dynamic", "blue": "minimax-d2", "seed": 2022056116, "winner": "red", "turns": 29}, {"n": 5, "red": "minimax-d2", "blue": "minimax-dynamic", "seed": 2022056116, "winner": "red", "turns": 15}, {"n": 5, "red": "minimax-dynamic", "blue": "minimax-d2", "seed": 2022056117, "winner": "red", "turns": 29}, {"n": 5, "red": "minimax-d2", "blue": "minimax-dynamic", "seed": 2022056117, "winner": "red", "turns": 29}, {"n": 5, "red": "minimax-dynamic", "blue": "minimax-d2", "seed": 2022056118, "winner": "blue", "turns": 18}, {"n": 5, "red": "minimax-d2", "blue": "minimax-dynamic", "seed": 2022056118, "winner": "red", "turns": 23}, {"n": 5, "red": "minimax-dynamic", "blue": "minimax-d2", "seed": 2022056119, "winner": "blue", "turns": 24}, {"n": 5, "red": "minimax-d2", "blue": "minimax-dynamic", "seed": 2022056119, "winner": "red", "turns": 23}, {"n": 5, "red": "minimax-dynamic", "blue": "minimax-d2", "seed": 2022056120, "winner": "red", "turns": 19}, {"n": 5, "red": "minimax-d2", "blue": "minimax-dynamic", "seed": 2022056120, "winner": "red", "turns": 23}, {"n": 5, "red": "minimax-dynamic", "blue": "minimax-d2", "seed": 2022056121, "winner": "blue", "turns": 18}, {"n": 5, "red": "minimax-d2", "blue": "minimax-dynamic", "seed": 2022056121, "winner": "blue", "turns": 20}, {"n": 5, "red": "minimax-dynamic", "blue": "minimax-d2", "seed": 2022056122, "winner": "blue", "turns": 22}, {"n": 5, "red": "minimax-d2", "blue": "minimax-dynamic", "seed": 2022056122, "winner": "blue", "turns": 18}, {"n": 5, "red": "minimax-dynamic", "blue": "minimax-d2", "seed": 2022056123, "winner": "red", "turns": 19}, {"n": 5, "red": "minimax-d2", "blue": "minimax-dynamic", "seed": 2022056123, "winner": "red", "turns": 27}, {"n": 5, "red": "minimax-dynamic", "blue": "minimax-d2", "seed": 2022056124, "winner": "blue", "turns": 18}, {"n": 5, "red": "minimax-d2", "blue": "minimax-dynamic", "seed": 2022056124, "winner": "blue", "turns": 16}, {"n": 5, "red": "minimax-dynamic", "blue": "minimax-d2", "seed": 2022056125, "winner": "blue", "turns": 20}, {"n": 5, "red": "minimax-d2", "blue": "minimax-dynamic", "seed": 2022056125, "winner": "red", "turns": 17}, {"n": 5, "red": "minimax-dynamic", "blue": "minimax-d2", "seed": 2022056126, "winner": "blue", "turns": 20}, {"n": 5, "red": "minimax-d2", "blue": "minimax-dynamic", "seed": 2022056126, "winner": "blue", "turns": 16}, {"n": 5, "red": "minimax-dynamic", "blue": "minimax-d2", "seed": 2022056127, "winner": "blue", "turns": 22}, {"n": 5, "red": "minimax-d2", "blue": "minimax-dynamic", "seed": 2022056127, "winner": "blue", "turns": 28}, {"n": 5, "red": "minimax-dynamic", "blue": "minimax-d2", "seed": 2022056128, "winner": "blue", "turns": 18}, {"n": 5, "red": "minimax-d2", "blue": "minimax-dynamic", "seed": 2022056128, "winner": "red", "turns": 21}, {"n": 5, "red": "minimax-dynamic", "blue": "minimax-d2", "seed": 2022056129, "winner": "blue", "turns": 14}, {"n": 5, "red": "minimax-d2", "blue": "minimax-dynamic", "seed": 2022056129, "winner": "red", "turns": 27}, {"n": 5, "red": "minimax-dynamic", "blue": "minimax-d2", "seed": 2022056130, "winner": "red", "turns": 27}, {"n": 5, "red": "minimax-d2", "blue": "minimax-dynamic", "seed": 2022056130, "winner": "red", "turns": 25}, {"n": 5, "red": "minimax-dynamic", "blue": "minimax-d2", "seed": 2022056131, "winner": "red", "turns": 21}, {"n": 5, "red": "minimax-d2", "blue": "minimax-dynamic", "seed": 2022056131, "winner": "red", "turns": 33}, {"n": 5, "red": "minimax-dynamic", "blue": "greedy", "seed": 2022056123, "winner": "blue", "turns": 26}, {"n": 5, "red": "greedy", "blue": "minimax-dynamic", "seed": 2022056123, "winner": "red", "turns": 17}, {"n": 5, "red": "minimax-dynamic", "blue": "greedy", "seed": 2022056124, "winner": "red", "turns": 27}, {"n": 5, "red": "greedy", "blue": "minimax-dynamic", "seed": 2022056124, "winner": "red", "turns": 21}, {"n": 5, "red": "minimax-dynamic", "blue": "greedy", "seed": 2022056125, "winner": "red", "turns": 21}, {"n": 5, "red": "greedy", "blue": "minimax-dynamic", "seed": 2022056125, "winner": "blue", "turns": 16}, {"n": 5, "red": "minimax-dynamic", "blue": "greedy", "seed": 2022056126, "winner": "blue", "turns": 20}, {"n": 5, "red": "greedy", "blue": "minimax-dynamic", "seed": 2022056126, "winner": "blue", "turns": 14}, {"n": 5, "red": "minimax-dynamic", "blue": "greedy", "seed": 2022056127, "winner": "red", "turns": 17}, {"n": 5, "red": "greedy", "blue": "minimax-dynamic", "seed": 2022056127, "winner": "blue", "turns": 16}, {"n": 5, "red": "minimax-dynamic", "blue": "greedy", "seed": 2022056128, "winner": "blue", "turns": 18}, {"n": 5, "red": "greedy", "blue": "minimax-dynamic", "seed": 2022056128, "winner": "red", "turns": 27}, {"n": 5, "red": "minimax-dynamic", "blue": "greedy", "seed": 2022056129, "winner": "blue", "turns": 24}, {"n": 5, "red": "greedy", "blue": "minimax-dynamic", "seed": 2022056129, "winner": "red", "turns": 25}, {"n": 5, "red": "minimax-dynamic", "blue": "greedy", "seed": 2022056130, "winner": "red", "turns": 19}, {"n": 5, "red": "greedy", "blue": "minimax-dynamic", "seed": 2022056130, "winner": "blue", "turns": 22}, {"n": 5, "red": "minimax-dynamic", "blue": "greedy", "seed": 2022056131, "winner": "blue", "turns": 26}, {"n": 5, "red": "greedy", "blue": "minimax-dynamic", "seed": 2022056131, "winner": "blue", "turns": 26}, {"n": 5, "red": "minimax-dynamic", "blue": "greedy", "seed": 2022056132, "winner": "blue", "turns": 18}, {"n": 5, "red": "greedy", "blue": "minimax-dynamic", "seed": 2022056132, "winner": "red", "turns": 29}, {"n": 5, "red": "minimax-dynamic", "blue": "greedy", "seed": 2022056133, "winner": "red", "turns": 17}, {"n": 5, "red": "greedy", "blue": "minimax-dynamic", "seed": 2022056133, "winner": "red", "turns": 17}, {"n": 5, "red": "minimax-dynamic", "blue": "greedy", "seed": 2022056134, "winner": "blue", "turns": 18}, {"n": 5, "red": "greedy", "blue": "minimax-dynamic", "seed": 2022056134, "winner": "blue", "turns": 22}, {"n": 5, "red": "minimax-dynamic", "blue": "greedy", "seed": 2022056135, "winner": "blue", "turns": 20}, {"n": 5, "red": "greedy", "blue": "minimax-dynamic", "seed": 2022056135, "winner": "red", "turns": 23}, {"n": 5, "red": "minimax-dynamic", "blue": "greedy", "seed": 2022056136, "winner": "blue", "turns": 34}, {"n": 5, "red": "greedy", "blue": "minimax-dynamic", "seed": 2022056136, "winner": "red", "turns": 19}, {"n": 5, "red": "minimax-dynamic", "blue": "greedy", "seed": 2022056137, "winner": "blue", "turns": 22}, {"n": 5, "red": "greedy", "blue": "minimax-dynamic", "seed": 2022056137, "winner": "blue", "turns": 14}, {"n": 5, "red": "minimax-dynamic", "blue": "greedy", "seed": 2022056138, "winner": "red", "turns": 21}, {"n": 5, "red": "greedy", "blue": "minimax-dynamic", "seed": 2022056138, "winner": "red", "turns": 19}, {"n": 5, "red": "minimax-dynamic", "blue": "greedy", "seed": 2022056139, "winner": "red", "turns": 29}, {"n": 5, "red": "greedy", "blue": "minimax-dynamic", "seed": 2022056139, "winner": "red", "turns": 21}, {"n": 5, "red": "minimax-dynamic", "blue": "greedy", "seed": 2022056140, "winner": "blue", "turns": 18}, {"n": 5, "red": "greedy", "blue": "minimax-dynamic", "seed": 2022056140, "winner": "blue", "turns": 20}, {"n": 5, "red": "minimax-dynamic", "blue": "greedy", "seed": 2022056141, "winner": "red", "turns": 19}, {"n": 5, "red": "greedy", "blue": "minimax-dynamic", "seed": 2022056141, "winner": "blue", "turns": 16}, {"n": 5, "red": "minimax-dynamic", "blue": "greedy", "seed": 2022056142, "winner": "red", "turns": 19}, {"n": 5, "red": "greedy", "blue": "minimax-dynamic", "seed": 2022056142, "winner": "red", "turns": 23}, {"n": 5, "red": "minimax-dynamic", "blue": "random", "seed": 2022056134, "winner": "red", "turns": 19}, {"n": 5, "red": "random", "blue": "minimax-dynamic", "seed": 2022056134, "winner": "blue", "turns": 22}, {"n": 5, "red": "minimax-dynamic", "blue": "random", "seed": 2022056135, "winner": "red", "turns": 31}, {"n": 5, "red": "random", "blue": "minimax-dynamic", "seed": 2022056135, "winner": "blue", "turns": 18}, {"n": 5, "red": "minimax-dynamic", "blue": "random", "seed": 2022056136, "winner": "blue", "turns": 30}, {"n": 5, "red": "random", "blue": "minimax-dynamic", "seed": 2022056136, "winner": "blue", "turns": 20}, {"n": 5, "red": "minimax-dynamic", "blue": "random", "seed": 2022056137, "winner": "red", "turns": 25}, {"n": 5, "red": "random", "blue": "minimax-dynamic", "seed": 2022056137, "winner": "blue", "turns": 26}, {"n": 5, "red": "minimax-dynamic", "blue": "random", "seed": 2022056138, "winner": "blue", "turns": 24}, {"n": 5, "red": "random", "blue": "minimax-dynamic", "seed": 2022056138, "winner": "blue", "turns": 20}, {"n": 5, "red": "minimax-dynamic", "blue": "random", "seed": 2022056139, "winner": "red", "turns": 21}, {"n": 5, "red": "random", "blue": "minimax-dynamic", "seed": 2022056139, "winner": "blue", "turns": 28}, {"n": 5, "red": "minimax-dynamic", "blue": "random", "seed": 2022056140, "winner": "red", "turns": 19}, {"n": 5, "red": "random", "blue": "minimax-dynamic", "seed": 2022056140, "winner": "blue", "turns": 28}, {"n": 5, "red": "minimax-dynamic", "blue": "random", "seed": 2022056141, "winner": "red", "turns": 23}, {"n": 5, "red": "random", "blue": "minimax-dynamic", "seed": 2022056141, "winner": "blue", "turns": 22}, {"n": 5, "red": "minimax-dynamic", "blue": "random", "seed": 2022056142, "winner": "red", "turns": 23}, {"n": 5, "red": "random", "blue": "minimax-dynamic", "seed": 2022056142, "winner": "blue", "turns": 28}, {"n": 5, "red": "minimax-dynamic", "blue": "random", "seed": 2022056143, "winner": "red", "turns": 19}, {"n": 5, "red": "random", "blue": "minimax-dynamic", "seed": 2022056143, "winner": "blue", "turns": 14}, {"n": 5, "red": "minimax-dynamic", "blue": "random", "seed": 2022056144, "winner": "red", "turns": 29}, {"n": 5, "red": "random", "blue": "minimax-dynamic", "seed": 2022056144, "winner": "blue", "turns": 20}, {"n": 5, "red": "minimax-dynamic", "blue": "random", "seed": 2022056145, "winner": "blue", "turns": 22}, {"n": 5, "red": "random", "blue": "minimax-dynamic", "seed": 2022056145, "winner": "blue", "turns": 12}, {"n": 5, "red": "minimax-dynamic", "blue": "random", "seed": 2022056146, "winner": "red", "turns": 23}, {"n": 5, "red": "random", "blue": "minimax-dynamic", "seed": 2022056146, "winner": "blue", "turns": 20}, {"n": 5, "red": "minimax-dynamic", "blue": "random", "seed": 2022056147, "winner": "red", "turns": 19}, {"n": 5, "red": "random", "blue": "minimax-dynamic", "seed": 2022056147, "winner": "blue", "turns": 26}, {"n": 5, "red": "minimax-dynamic", "blue": "random", "seed": 2022056148, "winner": "red", "turns": 17}, {"n": 5, "red": "random", "blue": "minimax-dynamic", "seed": 2022056148, "winner": "blue", "turns": 24}, {"n": 5, "red": "minimax-dynamic", "blue": "random", "seed": 2022056149, "winner": "red", "turns": 17}, {"n": 5, "red": "random", "blue": "minimax-dynamic", "seed": 2022056149, "winner": "blue", "turns": 22}, {"n": 5, "red": "minimax-dynamic", "blue": "random", "seed": 2022056150, "winner": "red", "turns": 27}, {"n": 5, "red": "random", "blue": "minimax-dynamic", "seed": 2022056150, "winner": "blue", "turns": 14}, {"n": 5, "red": "minimax-dynamic", "blue": "random", "seed": 2022056151, "winner": "red", "turns": 15}, {"n": 5, "red": "random", "blue": "minimax-dynamic", "seed": 2022056151, "winner": "blue", "turns": 24}, {"n": 5, "red": "minimax-dynamic", "blue": "random", "seed": 2022056152, "winner": "red", "turns": 17}, {"n": 5, "red": "random", "blue": "minimax-dynamic", "seed": 2022056152, "winner": "blue", "turns": 18}, {"n": 5, "red": "minimax-dynamic", "blue": "random", "seed": 2022056153, "winner": "red", "turns": 19}, {"n": 5, "red": "random", "blue": "minimax-dynamic", "seed": 2022056153, "winner": "red", "turns": 21}, {"n": 5, "red": "minimax-d2", "blue": "greedy", "seed": 2022056224, "winner": "red", "turns": 19}, {"n": 5, "red": "greedy", "blue": "minimax-d2", "seed": 2022056224, "winner": "blue", "turns": 22}, {"n": 5, "red": "minimax-d2", "blue": "greedy", "seed": 2022056225, "winner": "red", "turns": 25}, {"n": 5, "red": "greedy", "blue": "minimax-d2", "seed": 2022056225, "winner": "blue", "turns": 26}, {"n": 5, "red": "minimax-d2", "blue": "greedy", "seed": 2022056226, "winner": "blue", "turns": 18}, {"n": 5, "red": "greedy", "blue": "minimax-d2", "seed": 2022056226, "winner": "blue", "turns": 14}, {"n": 5, "red": "minimax-d2", "blue": "greedy", "seed": 2022056227, "winner": "blue", "turns": 24}, {"n": 5, "red": "greedy", "blue": "minimax-d2", "seed": 2022056227, "winner": "blue", "turns": 20}, {"n": 5, "red": "minimax-d2", "blue": "greedy", "seed": 2022056228, "winner": "red", "turns": 21}, {"n": 5, "red": "greedy", "blue": "minimax-d2", "seed": 2022056228, "winner": "blue", "turns": 20}, {"n": 5, "red": "minimax-d2", "blue": "greedy", "seed": 2022056229, "winner": "blue", "turns": 14}, {"n": 5, "red": "greedy", "blue": "minimax-d2", "seed": 2022056229, "winner": "blue", "turns": 18}, {"n": 5, "red": "minimax-d2", "blue": "greedy", "seed": 2022056230, "winner": "blue", "turns": 22}, {"n": 5, "red": "greedy", "blue": "minimax-d2", "seed": 2022056230, "winner": "blue", "turns": 20}, {"n": 5, "red": "minimax-d2", "blue": "greedy", "seed": 2022056231, "winner": "blue", "turns": 20}, {"n": 5, "red": "greedy", "blue": "minimax-d2", "seed": 2022056231, "winner": "red", "turns": 25}, {"n": 5, "red": "minimax-d2", "blue": "greedy", "seed": 2022056232, "winner": "red", "turns": 23}, {"n": 5, "red": "greedy", "blue": "minimax-d2", "seed": 2022056232, "winner": "red", "turns": 21}, {"n": 5, "red": "minimax-d2", "blue": "greedy", "seed": 2022056233, "winner": "red", "turns": 23}, {"n": 5, "red": "greedy", "blue": "minimax-d2", "seed": 2022056233, "winner": "blue", "turns": 24}, {"n": 5, "red": "minimax-d2", "blue": "greedy", "seed": 2022056234, "winner": "blue", "turns": 20}, {"n": 5, "red": "greedy", "blue": "minimax-d2", "seed": 2022056234, "winner": "blue", "turns": 18}, {"n": 5, "red": "minimax-d2", "blue": "greedy", "seed": 2022056235, "winner": "red", "turns": 15}, {"n": 5, "red": "greedy", "blue": "minimax-d2", "seed": 2022056235, "winner": "blue", "turns": 20}, {"n": 5, "red": "minimax-d2", "blue": "greedy", "seed": 2022056236, "winner": "blue", "turns": 26}, {"n": 5, "red": "greedy", "blue": "minimax-d2", "seed": 2022056236, "winner": "blue", "turns": 24}, {"n": 5, "red": "minimax-d2", "blue": "greedy", "seed": 2022056237, "winner": "blue", "turns": 18}, {"n": 5, "red": "greedy", "blue": "minimax-d2", "seed": 2022056237, "winner": "blue", "turns": 20}, {"n": 5, "red": "minimax-d2", "blue": "greedy", "seed": 2022056238, "winner": "blue", "turns": 16}, {"n": 5, "red": "greedy", "blue": "minimax-d2", "seed": 2022056238, "winner": "blue", "turns": 20}, {"n": 5, "red": "minimax-d2", "blue": "greedy", "seed": 2022056239, "winner": "red", "turns": 25}, {"n": 5, "red": "greedy", "blue": "minimax-d2", "seed": 2022056239, "winner": "blue", "turns": 14}, {"n": 5, "red": "minimax-d2", "blue": "greedy", "seed": 2022056240, "winner": "blue", "turns": 16}, {"n": 5, "red": "greedy", "blue": "minimax-d2", "seed": 2022056240, "winner": "blue", "turns": 16}, {"n": 5, "red": "minimax-d2", "blue": "greedy", "seed": 2022056241, "winner": "blue", "turns": 20}, {"n": 5, "red": "greedy", "blue": "minimax-d2", "seed": 2022056241, "winner": "red", "turns": 29}, {"n": 5, "red": "minimax-d2", "blue": "greedy", "seed": 2022056242, "winner": "red", "turns": 23}, {"n": 5, "red": "greedy", "blue": "minimax-d2", "seed": 2022056242, "winner": "red", "turns": 19}, {"n": 5, "red": "minimax-d2", "blue": "greedy", "seed": 2022056243, "winner": "blue", "turns": 22}, {"n": 5, "red": "greedy", "blue": "minimax-d2", "seed": 2022056243, "winner": "blue", "turns": 18}, {"n": 5, "red": "minimax-d2", "blue": "random", "seed": 2022056235, "winner": "red", "turns": 19}, {"n": 5, "red": "random", "blue": "minimax-d2", "seed": 2022056235, "winner": "blue", "turns": 18}, {"n": 5, "red": "minimax-d2", "blue": "random", "seed": 2022056236, "winner": "red", "turns": 19}, {"n": 5, "red": "random", "blue": "minimax-d2", "seed": 2022056236, "winner": "blue", "turns": 22}, {"n": 5, "red": "minimax-d2", "blue": "random", "seed": 2022056237, "winner": "red", "turns": 29}, {"n": 5, "red": "random", "blue": "minimax-d2", "seed": 2022056237, "winner": "blue", "turns": 20}, {"n": 5, "red": "minimax-d2", "blue": "random", "seed": 2022056238, "winner": "red", "turns": 23}, {"n": 5, "red": "random", "blue": "minimax-d2", "seed": 2022056238, "winner": "blue", "turns": 22}, {"n": 5, "red": "minimax-d2", "blue": "random", "seed": 2022056239, "winner": "blue", "turns": 26}, {"n": 5, "red": "random", "blue": "minimax-d2", "seed": 2022056239, "winner": "blue", "turns": 22}, {"n": 5, "red": "minimax-d2", "blue": "random", "seed": 2022056240, "winner": "red", "turns": 23}, {"n": 5, "red": "random", "blue": "minimax-d2", "seed": 2022056240, "winner": "blue", "turns": 22}, {"n": 5, "red": "minimax-d2", "blue": "random", "seed": 2022056241, "winner": "red", "turns": 27}, {"n": 5, "red": "random", "blue": "minimax-d2", "seed": 2022056241, "winner": "blue", "turns": 24}, {"n": 5, "red": "minimax-d2", "blue": "random", "seed": 2022056242, "winner": "red", "turns": 21}, {"n": 5, "red": "random", "blue": "minimax-d2", "seed": 2022056242, "winner": "blue", "turns": 34}, {"n": 5, "red": "minimax-d2", "blue": "random", "seed": 2022056243, "winner": "red", "turns": 27}, {"n": 5, "red": "random", "blue": "minimax-d2", "seed": 2022056243, "winner": "blue", "turns": 22}, {"n": 5, "red": "minimax-d2", "blue": "random", "seed": 2022056244, "winner": "red", "turns": 25}, {"n": 5, "red": "random", "blue": "minimax-d2", "seed": 2022056244, "winner": "blue", "turns": 24}, {"n": 5, "red": "minimax-d2", "blue": "random", "seed": 2022056245, "winner": "red", "turns": 27}, {"n": 5, "red": "random", "blue": "minimax-d2", "seed": 2022056245, "winner": "blue", "turns": 20}, {"n": 5, "red": "minimax-d2", "blue": "random", "seed": 2022056246, "winner": "red", "turns": 17}, {"n": 5, "red": "random", "blue": "minimax-d2", "seed": 2022056246, "winner": "blue", "turns": 22}, {"n": 5, "red": "minimax-d2", "blue": "random", "seed": 2022056247, "winner": "red", "turns": 25}, {"n": 5, "red": "random", "blue": "minimax-d2", "seed": 2022056247, "winner": "blue", "turns": 14}, {"n": 5, "red": "minimax-d2", "blue": "random", "seed": 2022056248, "winner": "red", "turns": 19}, {"n": 5, "red": "random", "blue": "minimax-d2", "seed": 2022056248, "winner": "blue", "turns": 18}, {"n": 5, "red": "minimax-d2", "blue": "random", "seed": 2022056249, "winner": "red", "turns": 23}, {"n": 5, "red": "random", "blue": "minimax-d2", "seed": 2022056249, "winner": "blue", "turns": 14}, {"n": 5, "red": "minimax-d2", "blue": "random", "seed": 2022056250, "winner": "red", "turns": 15}, {"n": 5, "red": "random", "blue": "minimax-d2", "seed": 2022056250, "winner": "blue", "turns": 24}, {"n": 5, "red": "minimax-d2", "blue": "random", "seed": 2022056251, "winner": "red", "turns": 25}, {"n": 5, "red": "random", "blue": "minimax-d2", "seed": 2022056251, "winner": "blue", "turns": 24}, {"n": 5, "red": "minimax-d2", "blue": "random", "seed": 2022056252, "winner": "red", "turns": 25}, {"n": 5, "red": "random", "blue": "minimax-d2", "seed": 2022056252, "winner": "blue", "turns": 20}, {"n": 5, "red": "minimax-d2", "blue": "random", "seed": 2022056253, "winner": "red", "turns": 21}, {"n": 5, "red": "random", "blue": "minimax-d2", "seed": 2022056253, "winner": "blue", "turns": 28}, {"n": 5, "red": "minimax-d2", "blue": "random", "seed": 2022056254, "winner": "red", "turns": 23}, {"n": 5, "red": "random", "blue": "minimax-d2", "seed": 2022056254, "winner": "blue", "turns": 14}, {"n": 5, "red": "greedy", "blue": "random", "seed": 2022056336, "winner": "red", "turns": 19}, {"n": 5, "red": "random", "blue": "greedy", "seed": 2022056336, "winner": "red", "turns": 17}, {"n": 5, "red": "greedy", "blue": "random", "seed": 2022056337, "winner": "red", "turns": 23}, {"n": 5, "red": "random", "blue": "greedy", "seed": 2022056337, "winner": "blue", "turns": 24}, {"n": 5, "red": "greedy", "blue": "random", "seed": 2022056338, "winner": "blue", "turns": 22}, {"n": 5, "red": "random", "blue": "greedy", "seed": 2022056338, "winner": "blue", "turns": 16}, {"n": 5, "red": "greedy", "blue": "random", "seed": 2022056339, "winner": "red", "turns": 19}, {"n": 5, "red": "random", "blue": "greedy", "seed": 2022056339, "winner": "blue", "turns": 22}, {"n": 5, "red": "greedy", "blue": "random", "seed": 2022056340, "winner": "red", "turns": 25}, {"n": 5, "red": "random", "blue": "greedy", "seed": 2022056340, "winner": "blue", "turns": 20}, {"n": 5, "red": "greedy", "blue": "random", "seed": 2022056341, "winner": "red", "turns": 15}, {"n": 5, "red": "random", "blue": "greedy", "seed": 2022056341, "winner": "blue", "turns": 14}, {"n": 5, "red": "greedy", "blue": "random", "seed": 2022056342, "winner": "red", "turns": 17}, {"n": 5, "red": "random", "blue": "greedy", "seed": 2022056342, "winner": "blue", "turns": 26}, {"n": 5, "red": "greedy", "blue": "random", "seed": 2022056343, "winner": "red", "turns": 17}, {"n": 5, "red": "random", "blue": "greedy", "seed": 2022056343, "winner": "blue", "turns": 18}, {"n": 5, "red": "greedy", "blue": "random", "seed": 2022056344, "winner": "red", "turns": 21}, {"n": 5, "red": "random", "blue": "greedy", "seed": 2022056344, "winner": "blue", "turns": 20}, {"n": 5, "red": "greedy", "blue": "random", "seed": 2022056345, "winner": "red", "turns": 19}, {"n": 5, "red": "random", "blue": "greedy", "seed": 2022056345, "winner": "blue", "turns": 26}, {"n": 5, "red": "greedy", "blue": "random", "seed": 2022056346, "winner": "red", "turns": 19}, {"n": 5, "red": "random", "blue": "greedy", "seed": 2022056346, "winner": "blue", "turns": 26}, {"n": 5, "red": "greedy", "blue": "random", "seed": 2022056347, "winner": "red", "turns": 27}, {"n": 5, "red": "random", "blue": "greedy", "seed": 2022056347, "winner": "red", "turns": 25}, {"n": 5, "red": "greedy", "blue": "random", "seed": 2022056348, "winner": "red", "turns": 23}, {"n": 5, "red": "random", "blue": "greedy", "seed": 2022056348, "winner": "blue", "turns": 18}, {"n": 5, "red": "greedy", "blue": "random", "seed": 2022056349, "winner": "red", "turns": 17}, {"n": 5, "red": "random", "blue": "greedy", "seed": 2022056349, "winner": "blue", "turns": 32}, {"n": 5, "red": "greedy", "blue": "random", "seed": 2022056350, "winner": "red", "turns": 27}, {"n": 5, "red": "random", "blue": "greedy", "seed": 2022056350, "winner": "blue", "turns": 22}, {"n": 5, "red": "greedy", "blue": "random", "seed": 2022056351, "winner": "red", "turns": 25}, {"n": 5, "red": "random", "blue": "greedy", "seed": 2022056351, "winner": "red", "turns": 19}, {"n": 5, "red": "greedy", "blue": "random", "seed": 2022056352, "winner": "red", "turns": 17}, {"n": 5, "red": "random", "blue": "greedy", "seed": 2022056352, "winner": "blue", "turns": 32}, {"n": 5, "red": "greedy", "blue": "random", "seed": 2022056353, "winner": "red", "turns": 15}, {"n": 5, "red": "random", "blue": "greedy", "seed": 2022056353, "winner": "blue", "turns": 24}, {"n": 5, "red": "greedy", "blue": "random", "seed": 2022056354, "winner": "red", "turns": 21}, {"n": 5, "red": "random", "blue": "greedy", "seed": 2022056354, "winner": "blue", "turns": 16}, {"n": 5, "red": "greedy", "blue": "random", "seed": 2022056355, "winner": "red", "turns": 13}, {"n": 5, "red": "random", "blue": "greedy", "seed": 2022056355, "winner": "blue", "turns": 18}]}
diff --git a/web/src/lib/data/reference-config.ts b/web/src/lib/data/reference-config.ts
new file mode 100644
index 0000000..41b8b16
--- /dev/null
+++ b/web/src/lib/data/reference-config.ts
@@ -0,0 +1,28 @@
+/**
+ * Configurations of the precomputed reference studies (see
+ * web/scripts/generate-reference-studies.ts). Kept in one place so the pages
+ * can state exactly how each result was produced.
+ */
+import type { AgentId } from "@/lib/tournament/agents";
+
+export const REFERENCE_TOURNAMENT_CONFIG = {
+ agents: ["minimax-dynamic", "minimax-d2", "minimax-d3", "greedy", "random"] as AgentId[],
+ sizes: [4, 5, 6],
+ /** Colour-swapped pairs per pairing per size → 40 games per pairing per size. */
+ rounds: 20,
+ seed: 2022,
+};
+
+export const ASTAR_STUDY_CONFIG = {
+ /** The notebook's range: every board size from 2 to 99. */
+ dimensions: Array.from({ length: 98 }, (_, i) => i + 2),
+ boardsPerDimension: 10,
+ seed: 2022,
+};
+
+export const ALPHA_BETA_CONFIG = {
+ sizes: [4, 5, 6],
+ perSize: 40,
+ depths: [2, 3],
+ seed: 2022,
+};
diff --git a/web/src/lib/data/reference-tournament.json b/web/src/lib/data/reference-tournament.json
new file mode 100644
index 0000000..600801e
--- /dev/null
+++ b/web/src/lib/data/reference-tournament.json
@@ -0,0 +1 @@
+{"meta":{"generatedBy":"web/scripts/generate-reference-studies.ts","generatedAt":"2026-10-05","node":"v26.10.0","cpu":"Apple M4","implementation":"TypeScript port (parity-tested against the original Python)","config":{"agents":["minimax-dynamic","minimax-d2","minimax-d3","greedy","random"],"sizes":[4,5,6],"rounds":20,"seed":2022}},"games":[{"id":"4:minimax-dynamic:minimax-d2:0:a","n":4,"seed":2697343011,"round":0,"result":"win","winner":"blue","drawReason":null,"turns":18,"red":{"agent":"minimax-dynamic","moves":9,"totalMs":2.677,"maxMs":1.358,"nodes":84,"searches":8,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":9,"totalMs":9.21,"maxMs":3.381,"nodes":651,"searches":7,"deepSearches":7,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d2:0:b","n":4,"seed":2697343011,"round":0,"result":"win","winner":"red","drawReason":null,"turns":11,"red":{"agent":"minimax-d2","moves":6,"totalMs":3.176,"maxMs":0.959,"nodes":602,"searches":4,"deepSearches":4,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":5,"totalMs":0.388,"maxMs":0.11,"nodes":50,"searches":4,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d2:1:a","n":4,"seed":1282145319,"round":1,"result":"win","winner":"red","drawReason":null,"turns":13,"red":{"agent":"minimax-dynamic","moves":7,"totalMs":0.459,"maxMs":0.096,"nodes":60,"searches":5,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":6,"totalMs":3.92,"maxMs":1.323,"nodes":545,"searches":5,"deepSearches":5,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d2:1:b","n":4,"seed":1282145319,"round":1,"result":"win","winner":"blue","drawReason":null,"turns":12,"red":{"agent":"minimax-d2","moves":6,"totalMs":3.925,"maxMs":1.261,"nodes":650,"searches":5,"deepSearches":5,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":6,"totalMs":0.617,"maxMs":0.211,"nodes":48,"searches":4,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d2:2:a","n":4,"seed":1793063484,"round":2,"result":"win","winner":"red","drawReason":null,"turns":13,"red":{"agent":"minimax-dynamic","moves":7,"totalMs":0.516,"maxMs":0.189,"nodes":60,"searches":5,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":6,"totalMs":2.689,"maxMs":0.845,"nodes":545,"searches":5,"deepSearches":5,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d2:2:b","n":4,"seed":1793063484,"round":2,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"minimax-d2","moves":8,"totalMs":2.82,"maxMs":0.676,"nodes":690,"searches":7,"deepSearches":7,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":8,"totalMs":0.64,"maxMs":0.193,"nodes":60,"searches":6,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d2:3:a","n":4,"seed":3157601157,"round":3,"result":"win","winner":"red","drawReason":null,"turns":13,"red":{"agent":"minimax-dynamic","moves":7,"totalMs":0.415,"maxMs":0.111,"nodes":60,"searches":5,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":6,"totalMs":2.299,"maxMs":0.655,"nodes":545,"searches":5,"deepSearches":5,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d2:3:b","n":4,"seed":3157601157,"round":3,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"minimax-d2","moves":9,"totalMs":3.716,"maxMs":0.806,"nodes":818,"searches":7,"deepSearches":7,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":8,"totalMs":0.731,"maxMs":0.166,"nodes":77,"searches":7,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d2:4:a","n":4,"seed":3825177986,"round":4,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"minimax-dynamic","moves":7,"totalMs":0.494,"maxMs":0.119,"nodes":68,"searches":6,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":7,"totalMs":2.406,"maxMs":0.672,"nodes":547,"searches":5,"deepSearches":5,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d2:4:b","n":4,"seed":3825177986,"round":4,"result":"win","winner":"red","drawReason":null,"turns":19,"red":{"agent":"minimax-d2","moves":10,"totalMs":3.518,"maxMs":0.913,"nodes":780,"searches":8,"deepSearches":8,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":9,"totalMs":0.641,"maxMs":0.135,"nodes":78,"searches":8,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d2:5:a","n":4,"seed":285257503,"round":5,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"minimax-dynamic","moves":7,"totalMs":0.471,"maxMs":0.108,"nodes":68,"searches":6,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":7,"totalMs":2.379,"maxMs":0.661,"nodes":547,"searches":5,"deepSearches":5,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d2:5:b","n":4,"seed":285257503,"round":5,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"minimax-d2","moves":8,"totalMs":3.229,"maxMs":0.681,"nodes":678,"searches":6,"deepSearches":6,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":7,"totalMs":0.464,"maxMs":0.114,"nodes":62,"searches":6,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d2:6:a","n":4,"seed":1906584895,"round":6,"result":"win","winner":"blue","drawReason":null,"turns":12,"red":{"agent":"minimax-dynamic","moves":6,"totalMs":0.573,"maxMs":0.189,"nodes":60,"searches":5,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":6,"totalMs":2.412,"maxMs":0.829,"nodes":508,"searches":4,"deepSearches":4,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d2:6:b","n":4,"seed":1906584895,"round":6,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"minimax-d2","moves":7,"totalMs":3.559,"maxMs":1.019,"nodes":678,"searches":6,"deepSearches":6,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":7,"totalMs":0.493,"maxMs":0.164,"nodes":55,"searches":5,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d2:7:a","n":4,"seed":287260280,"round":7,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"minimax-dynamic","moves":8,"totalMs":0.422,"maxMs":0.072,"nodes":66,"searches":6,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":7,"totalMs":2.402,"maxMs":0.647,"nodes":562,"searches":6,"deepSearches":6,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d2:7:b","n":4,"seed":287260280,"round":7,"result":"win","winner":"blue","drawReason":null,"turns":12,"red":{"agent":"minimax-d2","moves":6,"totalMs":2.592,"maxMs":0.725,"nodes":650,"searches":5,"deepSearches":5,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":6,"totalMs":0.355,"maxMs":0.125,"nodes":48,"searches":4,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d2:8:a","n":4,"seed":522595925,"round":8,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"minimax-dynamic","moves":7,"totalMs":0.458,"maxMs":0.099,"nodes":70,"searches":6,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":7,"totalMs":2.459,"maxMs":0.697,"nodes":575,"searches":5,"deepSearches":5,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d2:8:b","n":4,"seed":522595925,"round":8,"result":"win","winner":"blue","drawReason":null,"turns":12,"red":{"agent":"minimax-d2","moves":6,"totalMs":2.515,"maxMs":0.663,"nodes":650,"searches":5,"deepSearches":5,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":6,"totalMs":0.3,"maxMs":0.072,"nodes":48,"searches":4,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d2:9:a","n":4,"seed":413321559,"round":9,"result":"win","winner":"red","drawReason":null,"turns":13,"red":{"agent":"minimax-dynamic","moves":7,"totalMs":0.449,"maxMs":0.113,"nodes":60,"searches":5,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":6,"totalMs":2.423,"maxMs":0.792,"nodes":545,"searches":5,"deepSearches":5,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d2:9:b","n":4,"seed":413321559,"round":9,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"minimax-d2","moves":8,"totalMs":4.507,"maxMs":1.734,"nodes":736,"searches":6,"deepSearches":6,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":7,"totalMs":0.841,"maxMs":0.23,"nodes":66,"searches":6,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d2:10:a","n":4,"seed":669628618,"round":10,"result":"win","winner":"red","drawReason":null,"turns":11,"red":{"agent":"minimax-dynamic","moves":6,"totalMs":0.284,"maxMs":0.074,"nodes":52,"searches":4,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":5,"totalMs":2.199,"maxMs":0.748,"nodes":508,"searches":4,"deepSearches":4,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d2:10:b","n":4,"seed":669628618,"round":10,"result":"win","winner":"blue","drawReason":null,"turns":20,"red":{"agent":"minimax-d2","moves":10,"totalMs":3.604,"maxMs":0.724,"nodes":879,"searches":9,"deepSearches":9,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":10,"totalMs":0.555,"maxMs":0.103,"nodes":80,"searches":8,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d2:11:a","n":4,"seed":1005057571,"round":11,"result":"win","winner":"blue","drawReason":null,"turns":12,"red":{"agent":"minimax-dynamic","moves":6,"totalMs":0.461,"maxMs":0.129,"nodes":60,"searches":5,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":6,"totalMs":2.196,"maxMs":0.719,"nodes":508,"searches":4,"deepSearches":4,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d2:11:b","n":4,"seed":1005057571,"round":11,"result":"win","winner":"blue","drawReason":null,"turns":20,"red":{"agent":"minimax-d2","moves":10,"totalMs":4.143,"maxMs":0.688,"nodes":918,"searches":9,"deepSearches":9,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":10,"totalMs":0.762,"maxMs":0.227,"nodes":84,"searches":8,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d2:12:a","n":4,"seed":29841239,"round":12,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"minimax-dynamic","moves":7,"totalMs":0.39,"maxMs":0.068,"nodes":68,"searches":6,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":7,"totalMs":2.292,"maxMs":0.634,"nodes":547,"searches":5,"deepSearches":5,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d2:12:b","n":4,"seed":29841239,"round":12,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"minimax-d2","moves":8,"totalMs":3.525,"maxMs":0.985,"nodes":736,"searches":6,"deepSearches":6,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":7,"totalMs":0.428,"maxMs":0.097,"nodes":66,"searches":6,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d2:13:a","n":4,"seed":331591001,"round":13,"result":"win","winner":"red","drawReason":null,"turns":21,"red":{"agent":"minimax-dynamic","moves":11,"totalMs":0.64,"maxMs":0.101,"nodes":90,"searches":9,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":10,"totalMs":3.389,"maxMs":0.676,"nodes":725,"searches":9,"deepSearches":9,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d2:13:b","n":4,"seed":331591001,"round":13,"result":"win","winner":"blue","drawReason":null,"turns":12,"red":{"agent":"minimax-d2","moves":6,"totalMs":2.599,"maxMs":0.72,"nodes":650,"searches":5,"deepSearches":5,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":6,"totalMs":0.274,"maxMs":0.07,"nodes":48,"searches":4,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d2:14:a","n":4,"seed":1883898108,"round":14,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"minimax-dynamic","moves":9,"totalMs":0.642,"maxMs":0.157,"nodes":70,"searches":7,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":8,"totalMs":3.236,"maxMs":0.905,"nodes":581,"searches":7,"deepSearches":7,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d2:14:b","n":4,"seed":1883898108,"round":14,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"minimax-d2","moves":8,"totalMs":2.604,"maxMs":0.655,"nodes":676,"searches":6,"deepSearches":6,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":7,"totalMs":0.395,"maxMs":0.091,"nodes":60,"searches":6,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d2:15:a","n":4,"seed":2890127628,"round":15,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"minimax-dynamic","moves":8,"totalMs":0.459,"maxMs":0.105,"nodes":72,"searches":7,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":8,"totalMs":2.412,"maxMs":0.606,"nodes":564,"searches":6,"deepSearches":6,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d2:15:b","n":4,"seed":2890127628,"round":15,"result":"win","winner":"blue","drawReason":null,"turns":12,"red":{"agent":"minimax-d2","moves":6,"totalMs":2.298,"maxMs":0.627,"nodes":650,"searches":5,"deepSearches":5,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":6,"totalMs":0.269,"maxMs":0.09,"nodes":48,"searches":4,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d2:16:a","n":4,"seed":4089049837,"round":16,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"minimax-dynamic","moves":7,"totalMs":0.283,"maxMs":0.073,"nodes":68,"searches":6,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":7,"totalMs":1.747,"maxMs":0.461,"nodes":547,"searches":5,"deepSearches":5,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d2:16:b","n":4,"seed":4089049837,"round":16,"result":"win","winner":"red","drawReason":null,"turns":13,"red":{"agent":"minimax-d2","moves":7,"totalMs":2.21,"maxMs":0.636,"nodes":684,"searches":5,"deepSearches":5,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":6,"totalMs":0.23,"maxMs":0.048,"nodes":59,"searches":5,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d2:17:a","n":4,"seed":359974136,"round":17,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"minimax-dynamic","moves":9,"totalMs":0.431,"maxMs":0.106,"nodes":72,"searches":7,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":8,"totalMs":2.451,"maxMs":0.615,"nodes":599,"searches":7,"deepSearches":7,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d2:17:b","n":4,"seed":359974136,"round":17,"result":"win","winner":"red","drawReason":null,"turns":13,"red":{"agent":"minimax-d2","moves":7,"totalMs":2.064,"maxMs":0.542,"nodes":650,"searches":5,"deepSearches":5,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":6,"totalMs":0.24,"maxMs":0.053,"nodes":55,"searches":5,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d2:18:a","n":4,"seed":619441063,"round":18,"result":"win","winner":"blue","drawReason":null,"turns":18,"red":{"agent":"minimax-dynamic","moves":9,"totalMs":0.371,"maxMs":0.061,"nodes":84,"searches":8,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":9,"totalMs":2.296,"maxMs":0.526,"nodes":651,"searches":7,"deepSearches":7,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d2:18:b","n":4,"seed":619441063,"round":18,"result":"win","winner":"red","drawReason":null,"turns":13,"red":{"agent":"minimax-d2","moves":7,"totalMs":1.923,"maxMs":0.489,"nodes":652,"searches":5,"deepSearches":5,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":6,"totalMs":0.264,"maxMs":0.08,"nodes":57,"searches":5,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d2:19:a","n":4,"seed":3542338713,"round":19,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"minimax-dynamic","moves":7,"totalMs":0.35,"maxMs":0.088,"nodes":66,"searches":6,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":7,"totalMs":1.727,"maxMs":0.49,"nodes":545,"searches":5,"deepSearches":5,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d2:19:b","n":4,"seed":3542338713,"round":19,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"minimax-d2","moves":8,"totalMs":2.048,"maxMs":0.487,"nodes":678,"searches":6,"deepSearches":6,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":7,"totalMs":0.253,"maxMs":0.047,"nodes":62,"searches":6,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d3:0:a","n":4,"seed":1325686512,"round":0,"result":"win","winner":"blue","drawReason":null,"turns":10,"red":{"agent":"minimax-dynamic","moves":5,"totalMs":0.271,"maxMs":0.098,"nodes":52,"searches":4,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":5,"totalMs":15.048,"maxMs":6.981,"nodes":4703,"searches":3,"deepSearches":3,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d3:0:b","n":4,"seed":1325686512,"round":0,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"minimax-d3","moves":8,"totalMs":21.533,"maxMs":7.666,"nodes":6934,"searches":7,"deepSearches":7,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":8,"totalMs":0.323,"maxMs":0.081,"nodes":60,"searches":6,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d3:1:a","n":4,"seed":2575660283,"round":1,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"minimax-dynamic","moves":8,"totalMs":0.577,"maxMs":0.308,"nodes":66,"searches":6,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":7,"totalMs":17.345,"maxMs":6.499,"nodes":5247,"searches":6,"deepSearches":6,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d3:1:b","n":4,"seed":2575660283,"round":1,"result":"win","winner":"red","drawReason":null,"turns":11,"red":{"agent":"minimax-d3","moves":6,"totalMs":19.192,"maxMs":7.02,"nodes":6552,"searches":4,"deepSearches":4,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":5,"totalMs":0.24,"maxMs":0.094,"nodes":48,"searches":4,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d3:2:a","n":4,"seed":190517020,"round":2,"result":"win","winner":"blue","drawReason":null,"turns":12,"red":{"agent":"minimax-dynamic","moves":6,"totalMs":0.331,"maxMs":0.102,"nodes":62,"searches":5,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":6,"totalMs":15.666,"maxMs":6.36,"nodes":4929,"searches":4,"deepSearches":4,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d3:2:b","n":4,"seed":190517020,"round":2,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"minimax-d3","moves":9,"totalMs":20.391,"maxMs":6.743,"nodes":6932,"searches":7,"deepSearches":7,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":8,"totalMs":0.379,"maxMs":0.093,"nodes":65,"searches":7,"deepSearches":1,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d3:3:a","n":4,"seed":1578310835,"round":3,"result":"win","winner":"blue","drawReason":null,"turns":12,"red":{"agent":"minimax-dynamic","moves":6,"totalMs":0.245,"maxMs":0.057,"nodes":60,"searches":5,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":6,"totalMs":15.489,"maxMs":6.46,"nodes":4935,"searches":4,"deepSearches":4,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d3:3:b","n":4,"seed":1578310835,"round":3,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"minimax-d3","moves":8,"totalMs":21.76,"maxMs":7.121,"nodes":6940,"searches":6,"deepSearches":6,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":7,"totalMs":0.301,"maxMs":0.057,"nodes":62,"searches":6,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d3:4:a","n":4,"seed":1165657324,"round":4,"result":"win","winner":"blue","drawReason":null,"turns":10,"red":{"agent":"minimax-dynamic","moves":5,"totalMs":0.198,"maxMs":0.055,"nodes":52,"searches":4,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":5,"totalMs":13.896,"maxMs":6.446,"nodes":4681,"searches":3,"deepSearches":3,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d3:4:b","n":4,"seed":1165657324,"round":4,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"minimax-d3","moves":7,"totalMs":19.468,"maxMs":6.917,"nodes":6846,"searches":6,"deepSearches":6,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":7,"totalMs":0.298,"maxMs":0.101,"nodes":55,"searches":5,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d3:5:a","n":4,"seed":1929689094,"round":5,"result":"win","winner":"blue","drawReason":null,"turns":12,"red":{"agent":"minimax-dynamic","moves":6,"totalMs":0.274,"maxMs":0.085,"nodes":60,"searches":5,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":6,"totalMs":15.326,"maxMs":6.396,"nodes":5123,"searches":4,"deepSearches":4,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d3:5:b","n":4,"seed":1929689094,"round":5,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"minimax-d3","moves":9,"totalMs":19.551,"maxMs":6.804,"nodes":6935,"searches":7,"deepSearches":7,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":8,"totalMs":0.304,"maxMs":0.05,"nodes":65,"searches":7,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d3:6:a","n":4,"seed":878395786,"round":6,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"minimax-dynamic","moves":8,"totalMs":0.299,"maxMs":0.057,"nodes":66,"searches":6,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":7,"totalMs":15.715,"maxMs":6.012,"nodes":5229,"searches":6,"deepSearches":6,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d3:6:b","n":4,"seed":878395786,"round":6,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"minimax-d3","moves":8,"totalMs":20.182,"maxMs":6.913,"nodes":6924,"searches":6,"deepSearches":6,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":7,"totalMs":0.301,"maxMs":0.061,"nodes":62,"searches":6,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d3:7:a","n":4,"seed":3570703529,"round":7,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"minimax-dynamic","moves":8,"totalMs":0.326,"maxMs":0.058,"nodes":70,"searches":7,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":8,"totalMs":16.37,"maxMs":5.724,"nodes":5282,"searches":6,"deepSearches":6,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d3:7:b","n":4,"seed":3570703529,"round":7,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"minimax-d3","moves":8,"totalMs":20.414,"maxMs":6.415,"nodes":7175,"searches":6,"deepSearches":6,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":7,"totalMs":0.353,"maxMs":0.122,"nodes":64,"searches":6,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d3:8:a","n":4,"seed":3329959345,"round":8,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"minimax-dynamic","moves":7,"totalMs":0.279,"maxMs":0.064,"nodes":66,"searches":6,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":7,"totalMs":16.268,"maxMs":5.646,"nodes":5261,"searches":5,"deepSearches":5,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d3:8:b","n":4,"seed":3329959345,"round":8,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"minimax-d3","moves":8,"totalMs":19.305,"maxMs":6.664,"nodes":6892,"searches":6,"deepSearches":6,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":7,"totalMs":0.271,"maxMs":0.051,"nodes":60,"searches":6,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d3:9:a","n":4,"seed":3770760132,"round":9,"result":"win","winner":"blue","drawReason":null,"turns":10,"red":{"agent":"minimax-dynamic","moves":5,"totalMs":0.241,"maxMs":0.091,"nodes":52,"searches":4,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":5,"totalMs":13.954,"maxMs":6.358,"nodes":4712,"searches":3,"deepSearches":3,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d3:9:b","n":4,"seed":3770760132,"round":9,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"minimax-d3","moves":8,"totalMs":19.895,"maxMs":6.678,"nodes":6924,"searches":6,"deepSearches":6,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":7,"totalMs":0.293,"maxMs":0.064,"nodes":60,"searches":6,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d3:10:a","n":4,"seed":1322819714,"round":10,"result":"win","winner":"blue","drawReason":null,"turns":10,"red":{"agent":"minimax-dynamic","moves":5,"totalMs":0.231,"maxMs":0.087,"nodes":52,"searches":4,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":5,"totalMs":13.8,"maxMs":5.972,"nodes":4699,"searches":3,"deepSearches":3,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d3:10:b","n":4,"seed":1322819714,"round":10,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"minimax-d3","moves":7,"totalMs":19.765,"maxMs":6.546,"nodes":6990,"searches":6,"deepSearches":6,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":7,"totalMs":0.246,"maxMs":0.051,"nodes":55,"searches":5,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d3:11:a","n":4,"seed":926006190,"round":11,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"minimax-dynamic","moves":7,"totalMs":0.29,"maxMs":0.053,"nodes":66,"searches":6,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":7,"totalMs":16.094,"maxMs":6.095,"nodes":5259,"searches":5,"deepSearches":5,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d3:11:b","n":4,"seed":926006190,"round":11,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"minimax-d3","moves":8,"totalMs":21.263,"maxMs":7.22,"nodes":7175,"searches":6,"deepSearches":6,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":7,"totalMs":0.325,"maxMs":0.061,"nodes":64,"searches":6,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d3:12:a","n":4,"seed":2211736213,"round":12,"result":"win","winner":"blue","drawReason":null,"turns":10,"red":{"agent":"minimax-dynamic","moves":5,"totalMs":0.197,"maxMs":0.052,"nodes":52,"searches":4,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":5,"totalMs":13.616,"maxMs":6.161,"nodes":4683,"searches":3,"deepSearches":3,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d3:12:b","n":4,"seed":2211736213,"round":12,"result":"win","winner":"red","drawReason":null,"turns":11,"red":{"agent":"minimax-d3","moves":6,"totalMs":21.17,"maxMs":7.812,"nodes":6556,"searches":4,"deepSearches":4,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":5,"totalMs":0.354,"maxMs":0.188,"nodes":48,"searches":4,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d3:13:a","n":4,"seed":1474854407,"round":13,"result":"win","winner":"blue","drawReason":null,"turns":12,"red":{"agent":"minimax-dynamic","moves":6,"totalMs":0.344,"maxMs":0.1,"nodes":60,"searches":5,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":6,"totalMs":15.889,"maxMs":5.994,"nodes":5106,"searches":4,"deepSearches":4,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d3:13:b","n":4,"seed":1474854407,"round":13,"result":"win","winner":"blue","drawReason":null,"turns":18,"red":{"agent":"minimax-d3","moves":9,"totalMs":20.489,"maxMs":6.615,"nodes":7091,"searches":8,"deepSearches":8,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":9,"totalMs":0.344,"maxMs":0.054,"nodes":67,"searches":7,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d3:14:a","n":4,"seed":1288345184,"round":14,"result":"win","winner":"blue","drawReason":null,"turns":12,"red":{"agent":"minimax-dynamic","moves":6,"totalMs":0.256,"maxMs":0.061,"nodes":60,"searches":5,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":6,"totalMs":16,"maxMs":6.159,"nodes":5125,"searches":4,"deepSearches":4,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d3:14:b","n":4,"seed":1288345184,"round":14,"result":"win","winner":"blue","drawReason":null,"turns":22,"red":{"agent":"minimax-d3","moves":11,"totalMs":22.658,"maxMs":6.608,"nodes":7634,"searches":10,"deepSearches":10,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":11,"totalMs":0.441,"maxMs":0.059,"nodes":83,"searches":9,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d3:15:a","n":4,"seed":896408338,"round":15,"result":"win","winner":"blue","drawReason":null,"turns":10,"red":{"agent":"minimax-dynamic","moves":5,"totalMs":0.381,"maxMs":0.192,"nodes":52,"searches":4,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":5,"totalMs":13.479,"maxMs":6.047,"nodes":4697,"searches":3,"deepSearches":3,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d3:15:b","n":4,"seed":896408338,"round":15,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"minimax-d3","moves":9,"totalMs":23.895,"maxMs":6.838,"nodes":8050,"searches":7,"deepSearches":7,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":8,"totalMs":0.435,"maxMs":0.118,"nodes":77,"searches":7,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d3:16:a","n":4,"seed":1329366132,"round":16,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"minimax-dynamic","moves":7,"totalMs":0.35,"maxMs":0.065,"nodes":66,"searches":6,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":7,"totalMs":18.072,"maxMs":6.103,"nodes":5271,"searches":5,"deepSearches":5,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d3:16:b","n":4,"seed":1329366132,"round":16,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"minimax-d3","moves":8,"totalMs":21.277,"maxMs":6.595,"nodes":6920,"searches":6,"deepSearches":6,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":7,"totalMs":0.529,"maxMs":0.215,"nodes":62,"searches":6,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d3:17:a","n":4,"seed":3084461827,"round":17,"result":"win","winner":"red","drawReason":null,"turns":13,"red":{"agent":"minimax-dynamic","moves":7,"totalMs":0.289,"maxMs":0.063,"nodes":60,"searches":5,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":6,"totalMs":16.94,"maxMs":6.473,"nodes":5103,"searches":5,"deepSearches":5,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d3:17:b","n":4,"seed":3084461827,"round":17,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"minimax-d3","moves":8,"totalMs":19.923,"maxMs":6.746,"nodes":6938,"searches":6,"deepSearches":6,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":7,"totalMs":0.308,"maxMs":0.061,"nodes":62,"searches":6,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d3:18:a","n":4,"seed":3198742483,"round":18,"result":"win","winner":"blue","drawReason":null,"turns":10,"red":{"agent":"minimax-dynamic","moves":5,"totalMs":0.26,"maxMs":0.09,"nodes":52,"searches":4,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":5,"totalMs":13.84,"maxMs":6.097,"nodes":4710,"searches":3,"deepSearches":3,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d3:18:b","n":4,"seed":3198742483,"round":18,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"minimax-d3","moves":8,"totalMs":19.949,"maxMs":6.531,"nodes":7126,"searches":6,"deepSearches":6,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":7,"totalMs":0.289,"maxMs":0.052,"nodes":64,"searches":6,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d3:19:a","n":4,"seed":1188079619,"round":19,"result":"win","winner":"blue","drawReason":null,"turns":10,"red":{"agent":"minimax-dynamic","moves":5,"totalMs":0.187,"maxMs":0.051,"nodes":52,"searches":4,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":5,"totalMs":13.635,"maxMs":6.111,"nodes":4709,"searches":3,"deepSearches":3,"illegal":0}},{"id":"4:minimax-dynamic:minimax-d3:19:b","n":4,"seed":1188079619,"round":19,"result":"win","winner":"red","drawReason":null,"turns":13,"red":{"agent":"minimax-d3","moves":7,"totalMs":18.646,"maxMs":6.706,"nodes":6858,"searches":5,"deepSearches":5,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":6,"totalMs":0.232,"maxMs":0.052,"nodes":57,"searches":5,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:greedy:0:a","n":4,"seed":463822163,"round":0,"result":"win","winner":"red","drawReason":null,"turns":13,"red":{"agent":"minimax-dynamic","moves":7,"totalMs":0.287,"maxMs":0.091,"nodes":60,"searches":5,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":6,"totalMs":0.337,"maxMs":0.105,"nodes":72,"searches":6,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:greedy:0:b","n":4,"seed":463822163,"round":0,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"greedy","moves":8,"totalMs":0.376,"maxMs":0.079,"nodes":82,"searches":8,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":8,"totalMs":0.267,"maxMs":0.048,"nodes":54,"searches":6,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:greedy:1:a","n":4,"seed":2309501453,"round":1,"result":"win","winner":"red","drawReason":null,"turns":11,"red":{"agent":"minimax-dynamic","moves":6,"totalMs":0.194,"maxMs":0.051,"nodes":52,"searches":4,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":5,"totalMs":0.266,"maxMs":0.088,"nodes":65,"searches":5,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:greedy:1:b","n":4,"seed":2309501453,"round":1,"result":"win","winner":"blue","drawReason":null,"turns":12,"red":{"agent":"greedy","moves":6,"totalMs":0.248,"maxMs":0.046,"nodes":72,"searches":6,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":6,"totalMs":0.193,"maxMs":0.047,"nodes":44,"searches":4,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:greedy:2:a","n":4,"seed":3109754803,"round":2,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"minimax-dynamic","moves":7,"totalMs":0.274,"maxMs":0.047,"nodes":70,"searches":6,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":7,"totalMs":0.344,"maxMs":0.094,"nodes":74,"searches":6,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:greedy:2:b","n":4,"seed":3109754803,"round":2,"result":"win","winner":"blue","drawReason":null,"turns":12,"red":{"agent":"greedy","moves":6,"totalMs":0.42,"maxMs":0.116,"nodes":76,"searches":6,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":6,"totalMs":0.26,"maxMs":0.089,"nodes":46,"searches":4,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:greedy:3:a","n":4,"seed":1762577907,"round":3,"result":"win","winner":"red","drawReason":null,"turns":13,"red":{"agent":"minimax-dynamic","moves":7,"totalMs":0.339,"maxMs":0.123,"nodes":60,"searches":5,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":6,"totalMs":0.331,"maxMs":0.09,"nodes":72,"searches":6,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:greedy:3:b","n":4,"seed":1762577907,"round":3,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"greedy","moves":8,"totalMs":0.388,"maxMs":0.096,"nodes":82,"searches":8,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":8,"totalMs":0.267,"maxMs":0.046,"nodes":54,"searches":6,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:greedy:4:a","n":4,"seed":1646671091,"round":4,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"minimax-dynamic","moves":7,"totalMs":0.253,"maxMs":0.045,"nodes":66,"searches":6,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":7,"totalMs":0.268,"maxMs":0.047,"nodes":72,"searches":6,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:greedy:4:b","n":4,"seed":1646671091,"round":4,"result":"win","winner":"red","drawReason":null,"turns":13,"red":{"agent":"greedy","moves":7,"totalMs":0.32,"maxMs":0.096,"nodes":74,"searches":6,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":6,"totalMs":0.24,"maxMs":0.051,"nodes":54,"searches":5,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:greedy:5:a","n":4,"seed":4046245596,"round":5,"result":"win","winner":"blue","drawReason":null,"turns":20,"red":{"agent":"minimax-dynamic","moves":10,"totalMs":0.434,"maxMs":0.092,"nodes":96,"searches":9,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":10,"totalMs":0.392,"maxMs":0.05,"nodes":101,"searches":9,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:greedy:5:b","n":4,"seed":4046245596,"round":5,"result":"win","winner":"blue","drawReason":null,"turns":10,"red":{"agent":"greedy","moves":5,"totalMs":0.201,"maxMs":0.044,"nodes":65,"searches":5,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":5,"totalMs":0.135,"maxMs":0.045,"nodes":36,"searches":3,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:greedy:6:a","n":4,"seed":3333187376,"round":6,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"minimax-dynamic","moves":8,"totalMs":0.259,"maxMs":0.044,"nodes":68,"searches":6,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":7,"totalMs":0.33,"maxMs":0.081,"nodes":81,"searches":7,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:greedy:6:b","n":4,"seed":3333187376,"round":6,"result":"win","winner":"red","drawReason":null,"turns":13,"red":{"agent":"greedy","moves":7,"totalMs":0.282,"maxMs":0.046,"nodes":72,"searches":6,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":6,"totalMs":0.213,"maxMs":0.043,"nodes":52,"searches":5,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:greedy:7:a","n":4,"seed":1552084852,"round":7,"result":"win","winner":"red","drawReason":null,"turns":11,"red":{"agent":"minimax-dynamic","moves":6,"totalMs":0.178,"maxMs":0.046,"nodes":52,"searches":4,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":5,"totalMs":0.213,"maxMs":0.046,"nodes":65,"searches":5,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:greedy:7:b","n":4,"seed":1552084852,"round":7,"result":"win","winner":"blue","drawReason":null,"turns":12,"red":{"agent":"greedy","moves":6,"totalMs":0.258,"maxMs":0.052,"nodes":74,"searches":6,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":6,"totalMs":0.232,"maxMs":0.053,"nodes":44,"searches":4,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:greedy:8:a","n":4,"seed":3283250160,"round":8,"result":"win","winner":"red","drawReason":null,"turns":11,"red":{"agent":"minimax-dynamic","moves":6,"totalMs":0.177,"maxMs":0.046,"nodes":52,"searches":4,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":5,"totalMs":0.212,"maxMs":0.046,"nodes":65,"searches":5,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:greedy:8:b","n":4,"seed":3283250160,"round":8,"result":"win","winner":"red","drawReason":null,"turns":13,"red":{"agent":"greedy","moves":7,"totalMs":0.254,"maxMs":0.045,"nodes":72,"searches":6,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":6,"totalMs":0.311,"maxMs":0.133,"nodes":50,"searches":5,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:greedy:9:a","n":4,"seed":753177673,"round":9,"result":"win","winner":"blue","drawReason":null,"turns":12,"red":{"agent":"minimax-dynamic","moves":6,"totalMs":0.224,"maxMs":0.048,"nodes":60,"searches":5,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":6,"totalMs":0.235,"maxMs":0.047,"nodes":65,"searches":5,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:greedy:9:b","n":4,"seed":753177673,"round":9,"result":"win","winner":"red","drawReason":null,"turns":9,"red":{"agent":"greedy","moves":5,"totalMs":0.19,"maxMs":0.064,"nodes":56,"searches":4,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":4,"totalMs":0.135,"maxMs":0.046,"nodes":36,"searches":3,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:greedy:10:a","n":4,"seed":676223646,"round":10,"result":"win","winner":"red","drawReason":null,"turns":13,"red":{"agent":"minimax-dynamic","moves":7,"totalMs":0.268,"maxMs":0.078,"nodes":60,"searches":5,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":6,"totalMs":0.269,"maxMs":0.052,"nodes":72,"searches":6,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:greedy:10:b","n":4,"seed":676223646,"round":10,"result":"win","winner":"red","drawReason":null,"turns":13,"red":{"agent":"greedy","moves":7,"totalMs":0.331,"maxMs":0.105,"nodes":77,"searches":6,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":6,"totalMs":0.233,"maxMs":0.055,"nodes":55,"searches":5,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:greedy:11:a","n":4,"seed":2180504651,"round":11,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"minimax-dynamic","moves":8,"totalMs":0.332,"maxMs":0.057,"nodes":76,"searches":7,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":8,"totalMs":0.323,"maxMs":0.05,"nodes":83,"searches":7,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:greedy:11:b","n":4,"seed":2180504651,"round":11,"result":"win","winner":"red","drawReason":null,"turns":11,"red":{"agent":"greedy","moves":6,"totalMs":0.209,"maxMs":0.046,"nodes":65,"searches":5,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":5,"totalMs":0.217,"maxMs":0.082,"nodes":44,"searches":4,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:greedy:12:a","n":4,"seed":3816490963,"round":12,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"minimax-dynamic","moves":8,"totalMs":0.307,"maxMs":0.054,"nodes":76,"searches":7,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":8,"totalMs":0.339,"maxMs":0.08,"nodes":81,"searches":7,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:greedy:12:b","n":4,"seed":3816490963,"round":12,"result":"win","winner":"red","drawReason":null,"turns":11,"red":{"agent":"greedy","moves":6,"totalMs":0.249,"maxMs":0.084,"nodes":65,"searches":5,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":5,"totalMs":0.174,"maxMs":0.045,"nodes":44,"searches":4,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:greedy:13:a","n":4,"seed":2930697538,"round":13,"result":"win","winner":"red","drawReason":null,"turns":13,"red":{"agent":"minimax-dynamic","moves":7,"totalMs":0.216,"maxMs":0.044,"nodes":60,"searches":5,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":6,"totalMs":0.289,"maxMs":0.083,"nodes":72,"searches":6,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:greedy:13:b","n":4,"seed":2930697538,"round":13,"result":"win","winner":"red","drawReason":null,"turns":11,"red":{"agent":"greedy","moves":6,"totalMs":0.21,"maxMs":0.046,"nodes":65,"searches":5,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":5,"totalMs":0.21,"maxMs":0.076,"nodes":44,"searches":4,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:greedy:14:a","n":4,"seed":2922631138,"round":14,"result":"win","winner":"red","drawReason":null,"turns":11,"red":{"agent":"minimax-dynamic","moves":6,"totalMs":0.178,"maxMs":0.049,"nodes":52,"searches":4,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":5,"totalMs":0.269,"maxMs":0.094,"nodes":65,"searches":5,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:greedy:14:b","n":4,"seed":2922631138,"round":14,"result":"win","winner":"blue","drawReason":null,"turns":12,"red":{"agent":"greedy","moves":6,"totalMs":0.252,"maxMs":0.046,"nodes":76,"searches":6,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":6,"totalMs":0.186,"maxMs":0.046,"nodes":46,"searches":4,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:greedy:15:a","n":4,"seed":2027012120,"round":15,"result":"win","winner":"red","drawReason":null,"turns":11,"red":{"agent":"minimax-dynamic","moves":6,"totalMs":0.173,"maxMs":0.048,"nodes":52,"searches":4,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":5,"totalMs":0.259,"maxMs":0.087,"nodes":65,"searches":5,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:greedy:15:b","n":4,"seed":2027012120,"round":15,"result":"win","winner":"red","drawReason":null,"turns":11,"red":{"agent":"greedy","moves":6,"totalMs":0.218,"maxMs":0.048,"nodes":65,"searches":5,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":5,"totalMs":0.184,"maxMs":0.049,"nodes":44,"searches":4,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:greedy:16:a","n":4,"seed":950847575,"round":16,"result":"win","winner":"red","drawReason":null,"turns":13,"red":{"agent":"minimax-dynamic","moves":7,"totalMs":0.256,"maxMs":0.083,"nodes":60,"searches":5,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":6,"totalMs":0.282,"maxMs":0.074,"nodes":72,"searches":6,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:greedy:16:b","n":4,"seed":950847575,"round":16,"result":"win","winner":"red","drawReason":null,"turns":13,"red":{"agent":"greedy","moves":7,"totalMs":0.272,"maxMs":0.054,"nodes":74,"searches":6,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":6,"totalMs":0.238,"maxMs":0.052,"nodes":54,"searches":5,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:greedy:17:a","n":4,"seed":283106451,"round":17,"result":"win","winner":"red","drawReason":null,"turns":11,"red":{"agent":"minimax-dynamic","moves":6,"totalMs":0.174,"maxMs":0.045,"nodes":52,"searches":4,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":5,"totalMs":0.262,"maxMs":0.09,"nodes":65,"searches":5,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:greedy:17:b","n":4,"seed":283106451,"round":17,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"greedy","moves":8,"totalMs":0.318,"maxMs":0.045,"nodes":82,"searches":8,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":8,"totalMs":0.311,"maxMs":0.062,"nodes":54,"searches":6,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:greedy:18:a","n":4,"seed":3445234118,"round":18,"result":"win","winner":"red","drawReason":null,"turns":13,"red":{"agent":"minimax-dynamic","moves":7,"totalMs":0.337,"maxMs":0.13,"nodes":62,"searches":5,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":6,"totalMs":0.324,"maxMs":0.065,"nodes":76,"searches":6,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:greedy:18:b","n":4,"seed":3445234118,"round":18,"result":"win","winner":"red","drawReason":null,"turns":9,"red":{"agent":"greedy","moves":5,"totalMs":0.164,"maxMs":0.043,"nodes":56,"searches":4,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":4,"totalMs":0.142,"maxMs":0.052,"nodes":36,"searches":3,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:greedy:19:a","n":4,"seed":3722051402,"round":19,"result":"win","winner":"red","drawReason":null,"turns":13,"red":{"agent":"minimax-dynamic","moves":7,"totalMs":0.233,"maxMs":0.058,"nodes":60,"searches":5,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":6,"totalMs":0.261,"maxMs":0.051,"nodes":74,"searches":6,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:greedy:19:b","n":4,"seed":3722051402,"round":19,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"greedy","moves":7,"totalMs":0.348,"maxMs":0.09,"nodes":85,"searches":7,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":7,"totalMs":0.255,"maxMs":0.062,"nodes":56,"searches":5,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:random:0:a","n":4,"seed":1077779755,"round":0,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"minimax-dynamic","moves":9,"totalMs":0.356,"maxMs":0.058,"nodes":78,"searches":7,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":8,"totalMs":0.224,"maxMs":0.134,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:random:0:b","n":4,"seed":1077779755,"round":0,"result":"win","winner":"blue","drawReason":null,"turns":12,"red":{"agent":"random","moves":6,"totalMs":0.024,"maxMs":0.005,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":6,"totalMs":0.198,"maxMs":0.051,"nodes":48,"searches":4,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:random:1:a","n":4,"seed":1247481347,"round":1,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"minimax-dynamic","moves":8,"totalMs":0.329,"maxMs":0.095,"nodes":68,"searches":6,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":7,"totalMs":0.027,"maxMs":0.006,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:random:1:b","n":4,"seed":1247481347,"round":1,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"random","moves":8,"totalMs":0.028,"maxMs":0.006,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":7,"totalMs":0.256,"maxMs":0.05,"nodes":54,"searches":6,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:random:2:a","n":4,"seed":975105033,"round":2,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"minimax-dynamic","moves":8,"totalMs":0.278,"maxMs":0.05,"nodes":66,"searches":6,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":7,"totalMs":0.025,"maxMs":0.005,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:random:2:b","n":4,"seed":975105033,"round":2,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"random","moves":9,"totalMs":0.036,"maxMs":0.006,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":8,"totalMs":0.338,"maxMs":0.093,"nodes":66,"searches":7,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:random:3:a","n":4,"seed":158381940,"round":3,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"minimax-dynamic","moves":8,"totalMs":0.283,"maxMs":0.053,"nodes":76,"searches":6,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":7,"totalMs":0.028,"maxMs":0.006,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:random:3:b","n":4,"seed":158381940,"round":3,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"random","moves":9,"totalMs":0.039,"maxMs":0.008,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":8,"totalMs":0.364,"maxMs":0.08,"nodes":66,"searches":7,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:random:4:a","n":4,"seed":2395322408,"round":4,"result":"win","winner":"red","drawReason":null,"turns":11,"red":{"agent":"minimax-dynamic","moves":6,"totalMs":0.175,"maxMs":0.046,"nodes":54,"searches":4,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":5,"totalMs":0.016,"maxMs":0.004,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:random:4:b","n":4,"seed":2395322408,"round":4,"result":"win","winner":"blue","drawReason":null,"turns":20,"red":{"agent":"random","moves":10,"totalMs":0.052,"maxMs":0.012,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":10,"totalMs":0.353,"maxMs":0.045,"nodes":70,"searches":9,"deepSearches":1,"illegal":0}},{"id":"4:minimax-dynamic:random:5:a","n":4,"seed":3788329792,"round":5,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"minimax-dynamic","moves":8,"totalMs":0.321,"maxMs":0.089,"nodes":64,"searches":6,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":7,"totalMs":0.026,"maxMs":0.006,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:random:5:b","n":4,"seed":3788329792,"round":5,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"random","moves":7,"totalMs":0.023,"maxMs":0.005,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":7,"totalMs":0.24,"maxMs":0.054,"nodes":50,"searches":5,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:random:6:a","n":4,"seed":2811393122,"round":6,"result":"win","winner":"red","drawReason":null,"turns":19,"red":{"agent":"minimax-dynamic","moves":10,"totalMs":0.397,"maxMs":0.057,"nodes":86,"searches":8,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":9,"totalMs":0.039,"maxMs":0.006,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:random:6:b","n":4,"seed":2811393122,"round":6,"result":"win","winner":"blue","drawReason":null,"turns":12,"red":{"agent":"random","moves":6,"totalMs":0.017,"maxMs":0.004,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":6,"totalMs":0.227,"maxMs":0.081,"nodes":52,"searches":4,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:random:7:a","n":4,"seed":4178541482,"round":7,"result":"win","winner":"red","drawReason":null,"turns":9,"red":{"agent":"minimax-dynamic","moves":5,"totalMs":0.126,"maxMs":0.041,"nodes":42,"searches":3,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":4,"totalMs":0.012,"maxMs":0.006,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:random:7:b","n":4,"seed":4178541482,"round":7,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"random","moves":8,"totalMs":0.037,"maxMs":0.007,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":8,"totalMs":0.357,"maxMs":0.12,"nodes":58,"searches":6,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:random:8:a","n":4,"seed":2857838620,"round":8,"result":"win","winner":"red","drawReason":null,"turns":11,"red":{"agent":"minimax-dynamic","moves":6,"totalMs":0.197,"maxMs":0.048,"nodes":50,"searches":4,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":5,"totalMs":0.016,"maxMs":0.004,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:random:8:b","n":4,"seed":2857838620,"round":8,"result":"win","winner":"red","drawReason":null,"turns":11,"red":{"agent":"random","moves":6,"totalMs":0.023,"maxMs":0.007,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":5,"totalMs":0.247,"maxMs":0.103,"nodes":44,"searches":4,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:random:9:a","n":4,"seed":1829656933,"round":9,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"minimax-dynamic","moves":8,"totalMs":0.273,"maxMs":0.047,"nodes":62,"searches":6,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":7,"totalMs":0.026,"maxMs":0.005,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:random:9:b","n":4,"seed":1829656933,"round":9,"result":"win","winner":"blue","drawReason":null,"turns":10,"red":{"agent":"random","moves":5,"totalMs":0.013,"maxMs":0.004,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":5,"totalMs":0.146,"maxMs":0.046,"nodes":38,"searches":3,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:random:10:a","n":4,"seed":3772418401,"round":10,"result":"win","winner":"red","drawReason":null,"turns":11,"red":{"agent":"minimax-dynamic","moves":6,"totalMs":0.213,"maxMs":0.055,"nodes":50,"searches":4,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":5,"totalMs":0.018,"maxMs":0.006,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:random:10:b","n":4,"seed":3772418401,"round":10,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"random","moves":7,"totalMs":0.024,"maxMs":0.005,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":7,"totalMs":0.284,"maxMs":0.099,"nodes":54,"searches":5,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:random:11:a","n":4,"seed":3053271800,"round":11,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"minimax-dynamic","moves":9,"totalMs":0.317,"maxMs":0.049,"nodes":73,"searches":7,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":8,"totalMs":0.031,"maxMs":0.005,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:random:11:b","n":4,"seed":3053271800,"round":11,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"random","moves":7,"totalMs":0.022,"maxMs":0.005,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":7,"totalMs":0.233,"maxMs":0.048,"nodes":56,"searches":5,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:random:12:a","n":4,"seed":1833408530,"round":12,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"minimax-dynamic","moves":8,"totalMs":0.323,"maxMs":0.088,"nodes":72,"searches":6,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":7,"totalMs":0.025,"maxMs":0.005,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:random:12:b","n":4,"seed":1833408530,"round":12,"result":"win","winner":"blue","drawReason":null,"turns":10,"red":{"agent":"random","moves":5,"totalMs":0.022,"maxMs":0.011,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":5,"totalMs":0.142,"maxMs":0.049,"nodes":36,"searches":3,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:random:13:a","n":4,"seed":3958780920,"round":13,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"minimax-dynamic","moves":8,"totalMs":0.268,"maxMs":0.049,"nodes":68,"searches":6,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":7,"totalMs":0.025,"maxMs":0.006,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:random:13:b","n":4,"seed":3958780920,"round":13,"result":"win","winner":"blue","drawReason":null,"turns":22,"red":{"agent":"random","moves":11,"totalMs":0.051,"maxMs":0.007,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":11,"totalMs":0.506,"maxMs":0.111,"nodes":94,"searches":9,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:random:14:a","n":4,"seed":3920536134,"round":14,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"minimax-dynamic","moves":7,"totalMs":0.266,"maxMs":0.049,"nodes":60,"searches":6,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":7,"totalMs":0.02,"maxMs":0.004,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:random:14:b","n":4,"seed":3920536134,"round":14,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"random","moves":7,"totalMs":0.022,"maxMs":0.006,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":7,"totalMs":0.311,"maxMs":0.103,"nodes":60,"searches":5,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:random:15:a","n":4,"seed":516430859,"round":15,"result":"win","winner":"red","drawReason":null,"turns":21,"red":{"agent":"minimax-dynamic","moves":11,"totalMs":0.362,"maxMs":0.046,"nodes":80,"searches":9,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":10,"totalMs":0.037,"maxMs":0.007,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:random:15:b","n":4,"seed":516430859,"round":15,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"random","moves":8,"totalMs":0.024,"maxMs":0.005,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":8,"totalMs":0.287,"maxMs":0.056,"nodes":64,"searches":6,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:random:16:a","n":4,"seed":761750165,"round":16,"result":"win","winner":"red","drawReason":null,"turns":13,"red":{"agent":"minimax-dynamic","moves":7,"totalMs":0.27,"maxMs":0.092,"nodes":55,"searches":5,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":6,"totalMs":0.015,"maxMs":0.004,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:random:16:b","n":4,"seed":761750165,"round":16,"result":"win","winner":"blue","drawReason":null,"turns":12,"red":{"agent":"random","moves":6,"totalMs":0.026,"maxMs":0.016,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":6,"totalMs":0.185,"maxMs":0.045,"nodes":44,"searches":4,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:random:17:a","n":4,"seed":734829983,"round":17,"result":"win","winner":"red","drawReason":null,"turns":11,"red":{"agent":"minimax-dynamic","moves":6,"totalMs":0.194,"maxMs":0.061,"nodes":54,"searches":4,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":5,"totalMs":0.012,"maxMs":0.004,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:random:17:b","n":4,"seed":734829983,"round":17,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"random","moves":7,"totalMs":0.018,"maxMs":0.005,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":7,"totalMs":0.227,"maxMs":0.054,"nodes":50,"searches":5,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:random:18:a","n":4,"seed":3588409252,"round":18,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"minimax-dynamic","moves":8,"totalMs":0.308,"maxMs":0.083,"nodes":72,"searches":6,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":7,"totalMs":0.019,"maxMs":0.004,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:random:18:b","n":4,"seed":3588409252,"round":18,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"random","moves":8,"totalMs":0.022,"maxMs":0.005,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":8,"totalMs":0.278,"maxMs":0.05,"nodes":66,"searches":6,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:random:19:a","n":4,"seed":1343996072,"round":19,"result":"win","winner":"red","drawReason":null,"turns":13,"red":{"agent":"minimax-dynamic","moves":7,"totalMs":0.223,"maxMs":0.046,"nodes":66,"searches":5,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":6,"totalMs":0.014,"maxMs":0.004,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-dynamic:random:19:b","n":4,"seed":1343996072,"round":19,"result":"win","winner":"blue","drawReason":null,"turns":12,"red":{"agent":"random","moves":6,"totalMs":0.013,"maxMs":0.004,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":6,"totalMs":0.246,"maxMs":0.095,"nodes":50,"searches":4,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d2:minimax-d3:0:a","n":4,"seed":1286578329,"round":0,"result":"win","winner":"blue","drawReason":null,"turns":12,"red":{"agent":"minimax-d2","moves":6,"totalMs":1.813,"maxMs":0.422,"nodes":650,"searches":5,"deepSearches":5,"illegal":0},"blue":{"agent":"minimax-d3","moves":6,"totalMs":16.033,"maxMs":6.72,"nodes":5102,"searches":4,"deepSearches":4,"illegal":0}},{"id":"4:minimax-d2:minimax-d3:0:b","n":4,"seed":1286578329,"round":0,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"minimax-d3","moves":8,"totalMs":22.091,"maxMs":6.89,"nodes":7416,"searches":7,"deepSearches":7,"illegal":0},"blue":{"agent":"minimax-d2","moves":8,"totalMs":2.055,"maxMs":0.463,"nodes":612,"searches":6,"deepSearches":6,"illegal":0}},{"id":"4:minimax-d2:minimax-d3:1:a","n":4,"seed":807579707,"round":1,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"minimax-d2","moves":7,"totalMs":1.914,"maxMs":0.462,"nodes":676,"searches":6,"deepSearches":6,"illegal":0},"blue":{"agent":"minimax-d3","moves":7,"totalMs":16.835,"maxMs":6.251,"nodes":5271,"searches":5,"deepSearches":5,"illegal":0}},{"id":"4:minimax-d2:minimax-d3:1:b","n":4,"seed":807579707,"round":1,"result":"win","winner":"red","drawReason":null,"turns":23,"red":{"agent":"minimax-d3","moves":12,"totalMs":23.115,"maxMs":6.7,"nodes":7837,"searches":10,"deepSearches":10,"illegal":0},"blue":{"agent":"minimax-d2","moves":11,"totalMs":2.591,"maxMs":0.494,"nodes":742,"searches":10,"deepSearches":10,"illegal":0}},{"id":"4:minimax-d2:minimax-d3:2:a","n":4,"seed":2665367694,"round":2,"result":"win","winner":"blue","drawReason":null,"turns":10,"red":{"agent":"minimax-d2","moves":5,"totalMs":1.582,"maxMs":0.449,"nodes":600,"searches":4,"deepSearches":4,"illegal":0},"blue":{"agent":"minimax-d3","moves":5,"totalMs":12.887,"maxMs":5.576,"nodes":4699,"searches":3,"deepSearches":3,"illegal":0}},{"id":"4:minimax-d2:minimax-d3:2:b","n":4,"seed":2665367694,"round":2,"result":"win","winner":"red","drawReason":null,"turns":11,"red":{"agent":"minimax-d3","moves":6,"totalMs":17.885,"maxMs":6.745,"nodes":6558,"searches":4,"deepSearches":4,"illegal":0},"blue":{"agent":"minimax-d2","moves":5,"totalMs":1.437,"maxMs":0.429,"nodes":508,"searches":4,"deepSearches":4,"illegal":0}},{"id":"4:minimax-d2:minimax-d3:3:a","n":4,"seed":526854556,"round":3,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"minimax-d2","moves":7,"totalMs":1.981,"maxMs":0.52,"nodes":676,"searches":6,"deepSearches":6,"illegal":0},"blue":{"agent":"minimax-d3","moves":7,"totalMs":15.636,"maxMs":5.781,"nodes":5289,"searches":5,"deepSearches":5,"illegal":0}},{"id":"4:minimax-d2:minimax-d3:3:b","n":4,"seed":526854556,"round":3,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"minimax-d3","moves":8,"totalMs":18.969,"maxMs":6.361,"nodes":6898,"searches":6,"deepSearches":6,"illegal":0},"blue":{"agent":"minimax-d2","moves":7,"totalMs":1.688,"maxMs":0.428,"nodes":562,"searches":6,"deepSearches":6,"illegal":0}},{"id":"4:minimax-d2:minimax-d3:4:a","n":4,"seed":1602159095,"round":4,"result":"win","winner":"blue","drawReason":null,"turns":12,"red":{"agent":"minimax-d2","moves":6,"totalMs":1.839,"maxMs":0.427,"nodes":650,"searches":5,"deepSearches":5,"illegal":0},"blue":{"agent":"minimax-d3","moves":6,"totalMs":16.103,"maxMs":5.74,"nodes":5096,"searches":4,"deepSearches":4,"illegal":0}},{"id":"4:minimax-d2:minimax-d3:4:b","n":4,"seed":1602159095,"round":4,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"minimax-d3","moves":8,"totalMs":19.622,"maxMs":6.813,"nodes":6926,"searches":7,"deepSearches":7,"illegal":0},"blue":{"agent":"minimax-d2","moves":8,"totalMs":1.66,"maxMs":0.423,"nodes":562,"searches":6,"deepSearches":6,"illegal":0}},{"id":"4:minimax-d2:minimax-d3:5:a","n":4,"seed":2576710799,"round":5,"result":"win","winner":"red","drawReason":null,"turns":13,"red":{"agent":"minimax-d2","moves":7,"totalMs":1.875,"maxMs":0.469,"nodes":650,"searches":5,"deepSearches":5,"illegal":0},"blue":{"agent":"minimax-d3","moves":6,"totalMs":15.286,"maxMs":6.071,"nodes":5139,"searches":5,"deepSearches":5,"illegal":0}},{"id":"4:minimax-d2:minimax-d3:5:b","n":4,"seed":2576710799,"round":5,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"minimax-d3","moves":9,"totalMs":19.235,"maxMs":6.846,"nodes":6934,"searches":7,"deepSearches":7,"illegal":0},"blue":{"agent":"minimax-d2","moves":8,"totalMs":1.761,"maxMs":0.45,"nodes":567,"searches":7,"deepSearches":7,"illegal":0}},{"id":"4:minimax-d2:minimax-d3:6:a","n":4,"seed":1472758852,"round":6,"result":"win","winner":"blue","drawReason":null,"turns":10,"red":{"agent":"minimax-d2","moves":5,"totalMs":1.605,"maxMs":0.416,"nodes":600,"searches":4,"deepSearches":4,"illegal":0},"blue":{"agent":"minimax-d3","moves":5,"totalMs":13.698,"maxMs":5.944,"nodes":4679,"searches":3,"deepSearches":3,"illegal":0}},{"id":"4:minimax-d2:minimax-d3:6:b","n":4,"seed":1472758852,"round":6,"result":"win","winner":"red","drawReason":null,"turns":11,"red":{"agent":"minimax-d3","moves":6,"totalMs":18.024,"maxMs":6.682,"nodes":6586,"searches":4,"deepSearches":4,"illegal":0},"blue":{"agent":"minimax-d2","moves":5,"totalMs":1.571,"maxMs":0.446,"nodes":544,"searches":4,"deepSearches":4,"illegal":0}},{"id":"4:minimax-d2:minimax-d3:7:a","n":4,"seed":3663229386,"round":7,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"minimax-d2","moves":7,"totalMs":1.982,"maxMs":0.48,"nodes":700,"searches":6,"deepSearches":6,"illegal":0},"blue":{"agent":"minimax-d3","moves":7,"totalMs":15.749,"maxMs":5.625,"nodes":5275,"searches":5,"deepSearches":5,"illegal":0}},{"id":"4:minimax-d2:minimax-d3:7:b","n":4,"seed":3663229386,"round":7,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"minimax-d3","moves":8,"totalMs":19.912,"maxMs":6.402,"nodes":7153,"searches":6,"deepSearches":6,"illegal":0},"blue":{"agent":"minimax-d2","moves":7,"totalMs":1.84,"maxMs":0.436,"nodes":610,"searches":6,"deepSearches":6,"illegal":0}},{"id":"4:minimax-d2:minimax-d3:8:a","n":4,"seed":1647295560,"round":8,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"minimax-d2","moves":8,"totalMs":1.806,"maxMs":0.414,"nodes":676,"searches":6,"deepSearches":6,"illegal":0},"blue":{"agent":"minimax-d3","moves":7,"totalMs":15.905,"maxMs":5.766,"nodes":5263,"searches":6,"deepSearches":6,"illegal":0}},{"id":"4:minimax-d2:minimax-d3:8:b","n":4,"seed":1647295560,"round":8,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"minimax-d3","moves":9,"totalMs":19.554,"maxMs":7.297,"nodes":6936,"searches":7,"deepSearches":7,"illegal":0},"blue":{"agent":"minimax-d2","moves":8,"totalMs":1.811,"maxMs":0.432,"nodes":567,"searches":7,"deepSearches":7,"illegal":0}},{"id":"4:minimax-d2:minimax-d3:9:a","n":4,"seed":3910739066,"round":9,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"minimax-d2","moves":7,"totalMs":1.992,"maxMs":0.468,"nodes":676,"searches":6,"deepSearches":6,"illegal":0},"blue":{"agent":"minimax-d3","moves":7,"totalMs":16.85,"maxMs":6.225,"nodes":5273,"searches":5,"deepSearches":5,"illegal":0}},{"id":"4:minimax-d2:minimax-d3:9:b","n":4,"seed":3910739066,"round":9,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"minimax-d3","moves":9,"totalMs":21.058,"maxMs":6.634,"nodes":7371,"searches":7,"deepSearches":7,"illegal":0},"blue":{"agent":"minimax-d2","moves":8,"totalMs":2.081,"maxMs":0.455,"nodes":649,"searches":7,"deepSearches":7,"illegal":0}},{"id":"4:minimax-d2:minimax-d3:10:a","n":4,"seed":1862592204,"round":10,"result":"win","winner":"blue","drawReason":null,"turns":10,"red":{"agent":"minimax-d2","moves":5,"totalMs":1.523,"maxMs":0.423,"nodes":600,"searches":4,"deepSearches":4,"illegal":0},"blue":{"agent":"minimax-d3","moves":5,"totalMs":15.443,"maxMs":7.381,"nodes":4679,"searches":3,"deepSearches":3,"illegal":0}},{"id":"4:minimax-d2:minimax-d3:10:b","n":4,"seed":1862592204,"round":10,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"minimax-d3","moves":9,"totalMs":21.078,"maxMs":6.521,"nodes":7371,"searches":7,"deepSearches":7,"illegal":0},"blue":{"agent":"minimax-d2","moves":8,"totalMs":1.971,"maxMs":0.43,"nodes":649,"searches":7,"deepSearches":7,"illegal":0}},{"id":"4:minimax-d2:minimax-d3:11:a","n":4,"seed":666194945,"round":11,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"minimax-d2","moves":8,"totalMs":2.011,"maxMs":0.477,"nodes":676,"searches":6,"deepSearches":6,"illegal":0},"blue":{"agent":"minimax-d3","moves":7,"totalMs":15.875,"maxMs":6.078,"nodes":5252,"searches":6,"deepSearches":6,"illegal":0}},{"id":"4:minimax-d2:minimax-d3:11:b","n":4,"seed":666194945,"round":11,"result":"win","winner":"red","drawReason":null,"turns":11,"red":{"agent":"minimax-d3","moves":6,"totalMs":17.975,"maxMs":6.959,"nodes":6560,"searches":4,"deepSearches":4,"illegal":0},"blue":{"agent":"minimax-d2","moves":5,"totalMs":1.454,"maxMs":0.446,"nodes":508,"searches":4,"deepSearches":4,"illegal":0}},{"id":"4:minimax-d2:minimax-d3:12:a","n":4,"seed":1550524873,"round":12,"result":"win","winner":"blue","drawReason":null,"turns":12,"red":{"agent":"minimax-d2","moves":6,"totalMs":2.267,"maxMs":0.483,"nodes":650,"searches":5,"deepSearches":5,"illegal":0},"blue":{"agent":"minimax-d3","moves":6,"totalMs":15.131,"maxMs":5.814,"nodes":5110,"searches":4,"deepSearches":4,"illegal":0}},{"id":"4:minimax-d2:minimax-d3:12:b","n":4,"seed":1550524873,"round":12,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"minimax-d3","moves":8,"totalMs":19.419,"maxMs":6.337,"nodes":6898,"searches":6,"deepSearches":6,"illegal":0},"blue":{"agent":"minimax-d2","moves":7,"totalMs":1.783,"maxMs":0.443,"nodes":582,"searches":6,"deepSearches":6,"illegal":0}},{"id":"4:minimax-d2:minimax-d3:13:a","n":4,"seed":3743660482,"round":13,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"minimax-d2","moves":7,"totalMs":1.952,"maxMs":0.518,"nodes":676,"searches":6,"deepSearches":6,"illegal":0},"blue":{"agent":"minimax-d3","moves":7,"totalMs":15.599,"maxMs":5.79,"nodes":5289,"searches":5,"deepSearches":5,"illegal":0}},{"id":"4:minimax-d2:minimax-d3:13:b","n":4,"seed":3743660482,"round":13,"result":"win","winner":"red","drawReason":null,"turns":13,"red":{"agent":"minimax-d3","moves":7,"totalMs":18.203,"maxMs":6.47,"nodes":6762,"searches":5,"deepSearches":5,"illegal":0},"blue":{"agent":"minimax-d2","moves":6,"totalMs":1.446,"maxMs":0.392,"nodes":545,"searches":5,"deepSearches":5,"illegal":0}},{"id":"4:minimax-d2:minimax-d3:14:a","n":4,"seed":3320064985,"round":14,"result":"win","winner":"blue","drawReason":null,"turns":12,"red":{"agent":"minimax-d2","moves":6,"totalMs":1.763,"maxMs":0.416,"nodes":650,"searches":5,"deepSearches":5,"illegal":0},"blue":{"agent":"minimax-d3","moves":6,"totalMs":14.578,"maxMs":6.071,"nodes":4867,"searches":4,"deepSearches":4,"illegal":0}},{"id":"4:minimax-d2:minimax-d3:14:b","n":4,"seed":3320064985,"round":14,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"minimax-d3","moves":8,"totalMs":19.362,"maxMs":6.707,"nodes":6933,"searches":6,"deepSearches":6,"illegal":0},"blue":{"agent":"minimax-d2","moves":7,"totalMs":1.796,"maxMs":0.525,"nodes":562,"searches":6,"deepSearches":6,"illegal":0}},{"id":"4:minimax-d2:minimax-d3:15:a","n":4,"seed":1815623379,"round":15,"result":"win","winner":"blue","drawReason":null,"turns":12,"red":{"agent":"minimax-d2","moves":6,"totalMs":1.756,"maxMs":0.479,"nodes":650,"searches":5,"deepSearches":5,"illegal":0},"blue":{"agent":"minimax-d3","moves":6,"totalMs":14.989,"maxMs":6.109,"nodes":5072,"searches":4,"deepSearches":4,"illegal":0}},{"id":"4:minimax-d2:minimax-d3:15:b","n":4,"seed":1815623379,"round":15,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"minimax-d3","moves":9,"totalMs":20.073,"maxMs":6.948,"nodes":6928,"searches":7,"deepSearches":7,"illegal":0},"blue":{"agent":"minimax-d2","moves":8,"totalMs":1.725,"maxMs":0.407,"nodes":567,"searches":7,"deepSearches":7,"illegal":0}},{"id":"4:minimax-d2:minimax-d3:16:a","n":4,"seed":2812280319,"round":16,"result":"win","winner":"blue","drawReason":null,"turns":10,"red":{"agent":"minimax-d2","moves":5,"totalMs":1.537,"maxMs":0.422,"nodes":600,"searches":4,"deepSearches":4,"illegal":0},"blue":{"agent":"minimax-d3","moves":5,"totalMs":13.989,"maxMs":6.061,"nodes":4687,"searches":3,"deepSearches":3,"illegal":0}},{"id":"4:minimax-d2:minimax-d3:16:b","n":4,"seed":2812280319,"round":16,"result":"win","winner":"red","drawReason":null,"turns":13,"red":{"agent":"minimax-d3","moves":7,"totalMs":19.068,"maxMs":6.409,"nodes":6818,"searches":5,"deepSearches":5,"illegal":0},"blue":{"agent":"minimax-d2","moves":6,"totalMs":1.765,"maxMs":0.473,"nodes":545,"searches":5,"deepSearches":5,"illegal":0}},{"id":"4:minimax-d2:minimax-d3:17:a","n":4,"seed":2718799764,"round":17,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"minimax-d2","moves":7,"totalMs":2.098,"maxMs":0.474,"nodes":676,"searches":6,"deepSearches":6,"illegal":0},"blue":{"agent":"minimax-d3","moves":7,"totalMs":16.429,"maxMs":5.937,"nodes":5247,"searches":5,"deepSearches":5,"illegal":0}},{"id":"4:minimax-d2:minimax-d3:17:b","n":4,"seed":2718799764,"round":17,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"minimax-d3","moves":8,"totalMs":19.52,"maxMs":6.471,"nodes":6928,"searches":6,"deepSearches":6,"illegal":0},"blue":{"agent":"minimax-d2","moves":7,"totalMs":1.764,"maxMs":0.446,"nodes":562,"searches":6,"deepSearches":6,"illegal":0}},{"id":"4:minimax-d2:minimax-d3:18:a","n":4,"seed":1392041245,"round":18,"result":"win","winner":"red","drawReason":null,"turns":11,"red":{"agent":"minimax-d2","moves":6,"totalMs":1.569,"maxMs":0.431,"nodes":600,"searches":4,"deepSearches":4,"illegal":0},"blue":{"agent":"minimax-d3","moves":5,"totalMs":13.765,"maxMs":6.195,"nodes":4778,"searches":4,"deepSearches":4,"illegal":0}},{"id":"4:minimax-d2:minimax-d3:18:b","n":4,"seed":1392041245,"round":18,"result":"win","winner":"red","drawReason":null,"turns":11,"red":{"agent":"minimax-d3","moves":6,"totalMs":18.055,"maxMs":6.869,"nodes":6617,"searches":4,"deepSearches":4,"illegal":0},"blue":{"agent":"minimax-d2","moves":5,"totalMs":1.606,"maxMs":0.471,"nodes":544,"searches":4,"deepSearches":4,"illegal":0}},{"id":"4:minimax-d2:minimax-d3:19:a","n":4,"seed":2940285513,"round":19,"result":"win","winner":"blue","drawReason":null,"turns":10,"red":{"agent":"minimax-d2","moves":5,"totalMs":1.588,"maxMs":0.435,"nodes":600,"searches":4,"deepSearches":4,"illegal":0},"blue":{"agent":"minimax-d3","moves":5,"totalMs":13.243,"maxMs":6.066,"nodes":4683,"searches":3,"deepSearches":3,"illegal":0}},{"id":"4:minimax-d2:minimax-d3:19:b","n":4,"seed":2940285513,"round":19,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"minimax-d3","moves":8,"totalMs":20.026,"maxMs":6.77,"nodes":6916,"searches":6,"deepSearches":6,"illegal":0},"blue":{"agent":"minimax-d2","moves":7,"totalMs":1.846,"maxMs":0.453,"nodes":562,"searches":6,"deepSearches":6,"illegal":0}},{"id":"4:minimax-d2:greedy:0:a","n":4,"seed":4053350081,"round":0,"result":"win","winner":"red","drawReason":null,"turns":19,"red":{"agent":"minimax-d2","moves":10,"totalMs":2.333,"maxMs":0.46,"nodes":770,"searches":8,"deepSearches":8,"illegal":0},"blue":{"agent":"greedy","moves":9,"totalMs":0.358,"maxMs":0.046,"nodes":91,"searches":9,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d2:greedy:0:b","n":4,"seed":4053350081,"round":0,"result":"win","winner":"red","drawReason":null,"turns":11,"red":{"agent":"greedy","moves":6,"totalMs":0.319,"maxMs":0.097,"nodes":65,"searches":5,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":5,"totalMs":1.302,"maxMs":0.462,"nodes":424,"searches":4,"deepSearches":4,"illegal":0}},{"id":"4:minimax-d2:greedy:1:a","n":4,"seed":2360785490,"round":1,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"minimax-d2","moves":8,"totalMs":2.01,"maxMs":0.441,"nodes":686,"searches":7,"deepSearches":7,"illegal":0},"blue":{"agent":"greedy","moves":8,"totalMs":0.302,"maxMs":0.048,"nodes":77,"searches":7,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d2:greedy:1:b","n":4,"seed":2360785490,"round":1,"result":"win","winner":"red","drawReason":null,"turns":13,"red":{"agent":"greedy","moves":7,"totalMs":0.255,"maxMs":0.045,"nodes":72,"searches":6,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":6,"totalMs":1.483,"maxMs":0.467,"nodes":450,"searches":5,"deepSearches":5,"illegal":0}},{"id":"4:minimax-d2:greedy:2:a","n":4,"seed":1156160642,"round":2,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"minimax-d2","moves":8,"totalMs":2.455,"maxMs":0.674,"nodes":678,"searches":6,"deepSearches":6,"illegal":0},"blue":{"agent":"greedy","moves":7,"totalMs":0.408,"maxMs":0.13,"nodes":79,"searches":7,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d2:greedy:2:b","n":4,"seed":1156160642,"round":2,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"greedy","moves":7,"totalMs":0.29,"maxMs":0.048,"nodes":83,"searches":7,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":7,"totalMs":1.749,"maxMs":0.491,"nodes":545,"searches":5,"deepSearches":5,"illegal":0}},{"id":"4:minimax-d2:greedy:3:a","n":4,"seed":553593201,"round":3,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"minimax-d2","moves":8,"totalMs":2.247,"maxMs":0.622,"nodes":704,"searches":7,"deepSearches":7,"illegal":0},"blue":{"agent":"greedy","moves":8,"totalMs":0.302,"maxMs":0.06,"nodes":77,"searches":7,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d2:greedy:3:b","n":4,"seed":553593201,"round":3,"result":"win","winner":"red","drawReason":null,"turns":11,"red":{"agent":"greedy","moves":6,"totalMs":0.202,"maxMs":0.042,"nodes":65,"searches":5,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":5,"totalMs":1.29,"maxMs":0.421,"nodes":424,"searches":4,"deepSearches":4,"illegal":0}},{"id":"4:minimax-d2:greedy:4:a","n":4,"seed":2195973840,"round":4,"result":"win","winner":"red","drawReason":null,"turns":13,"red":{"agent":"minimax-d2","moves":7,"totalMs":1.817,"maxMs":0.454,"nodes":684,"searches":5,"deepSearches":5,"illegal":0},"blue":{"agent":"greedy","moves":6,"totalMs":0.24,"maxMs":0.043,"nodes":76,"searches":6,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d2:greedy:4:b","n":4,"seed":2195973840,"round":4,"result":"win","winner":"red","drawReason":null,"turns":11,"red":{"agent":"greedy","moves":6,"totalMs":0.195,"maxMs":0.042,"nodes":65,"searches":5,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":5,"totalMs":1.296,"maxMs":0.406,"nodes":424,"searches":4,"deepSearches":4,"illegal":0}},{"id":"4:minimax-d2:greedy:5:a","n":4,"seed":886605442,"round":5,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"minimax-d2","moves":9,"totalMs":2.455,"maxMs":0.512,"nodes":850,"searches":7,"deepSearches":7,"illegal":0},"blue":{"agent":"greedy","moves":8,"totalMs":0.41,"maxMs":0.129,"nodes":96,"searches":8,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d2:greedy:5:b","n":4,"seed":886605442,"round":5,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"greedy","moves":8,"totalMs":0.298,"maxMs":0.042,"nodes":82,"searches":8,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":8,"totalMs":1.497,"maxMs":0.403,"nodes":462,"searches":6,"deepSearches":6,"illegal":0}},{"id":"4:minimax-d2:greedy:6:a","n":4,"seed":161840683,"round":6,"result":"win","winner":"red","drawReason":null,"turns":13,"red":{"agent":"minimax-d2","moves":7,"totalMs":1.742,"maxMs":0.442,"nodes":654,"searches":5,"deepSearches":5,"illegal":0},"blue":{"agent":"greedy","moves":6,"totalMs":0.238,"maxMs":0.043,"nodes":74,"searches":6,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d2:greedy:6:b","n":4,"seed":161840683,"round":6,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"greedy","moves":8,"totalMs":0.345,"maxMs":0.096,"nodes":77,"searches":7,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":7,"totalMs":1.63,"maxMs":0.484,"nodes":462,"searches":6,"deepSearches":6,"illegal":0}},{"id":"4:minimax-d2:greedy:7:a","n":4,"seed":1380735084,"round":7,"result":"win","winner":"blue","drawReason":null,"turns":10,"red":{"agent":"minimax-d2","moves":5,"totalMs":1.615,"maxMs":0.518,"nodes":600,"searches":4,"deepSearches":4,"illegal":0},"blue":{"agent":"greedy","moves":5,"totalMs":0.17,"maxMs":0.044,"nodes":56,"searches":4,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d2:greedy:7:b","n":4,"seed":1380735084,"round":7,"result":"win","winner":"blue","drawReason":null,"turns":12,"red":{"agent":"greedy","moves":6,"totalMs":0.243,"maxMs":0.053,"nodes":74,"searches":6,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":6,"totalMs":1.314,"maxMs":0.439,"nodes":426,"searches":4,"deepSearches":4,"illegal":0}},{"id":"4:minimax-d2:greedy:8:a","n":4,"seed":2456224780,"round":8,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"minimax-d2","moves":9,"totalMs":2.207,"maxMs":0.438,"nodes":816,"searches":7,"deepSearches":7,"illegal":0},"blue":{"agent":"greedy","moves":8,"totalMs":0.399,"maxMs":0.085,"nodes":92,"searches":8,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d2:greedy:8:b","n":4,"seed":2456224780,"round":8,"result":"win","winner":"red","drawReason":null,"turns":11,"red":{"agent":"greedy","moves":6,"totalMs":0.204,"maxMs":0.045,"nodes":69,"searches":5,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":5,"totalMs":1.43,"maxMs":0.449,"nodes":508,"searches":4,"deepSearches":4,"illegal":0}},{"id":"4:minimax-d2:greedy:9:a","n":4,"seed":3954891492,"round":9,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"minimax-d2","moves":8,"totalMs":2.159,"maxMs":0.429,"nodes":752,"searches":7,"deepSearches":7,"illegal":0},"blue":{"agent":"greedy","moves":8,"totalMs":0.344,"maxMs":0.086,"nodes":81,"searches":7,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d2:greedy:9:b","n":4,"seed":3954891492,"round":9,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"greedy","moves":8,"totalMs":0.293,"maxMs":0.042,"nodes":82,"searches":8,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":8,"totalMs":1.471,"maxMs":0.397,"nodes":462,"searches":6,"deepSearches":6,"illegal":0}},{"id":"4:minimax-d2:greedy:10:a","n":4,"seed":1887905423,"round":10,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"minimax-d2","moves":9,"totalMs":1.937,"maxMs":0.44,"nodes":688,"searches":7,"deepSearches":7,"illegal":0},"blue":{"agent":"greedy","moves":8,"totalMs":0.351,"maxMs":0.083,"nodes":82,"searches":8,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d2:greedy:10:b","n":4,"seed":1887905423,"round":10,"result":"win","winner":"red","drawReason":null,"turns":9,"red":{"agent":"greedy","moves":5,"totalMs":0.168,"maxMs":0.046,"nodes":56,"searches":4,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":4,"totalMs":1.305,"maxMs":0.638,"nodes":374,"searches":3,"deepSearches":3,"illegal":0}},{"id":"4:minimax-d2:greedy:11:a","n":4,"seed":4172684224,"round":11,"result":"win","winner":"blue","drawReason":null,"turns":12,"red":{"agent":"minimax-d2","moves":6,"totalMs":2.585,"maxMs":0.836,"nodes":652,"searches":5,"deepSearches":5,"illegal":0},"blue":{"agent":"greedy","moves":6,"totalMs":0.364,"maxMs":0.147,"nodes":65,"searches":5,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d2:greedy:11:b","n":4,"seed":4172684224,"round":11,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"greedy","moves":7,"totalMs":0.368,"maxMs":0.09,"nodes":79,"searches":7,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":7,"totalMs":2.275,"maxMs":0.793,"nodes":452,"searches":5,"deepSearches":5,"illegal":0}},{"id":"4:minimax-d2:greedy:12:a","n":4,"seed":1138651947,"round":12,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"minimax-d2","moves":9,"totalMs":2.132,"maxMs":0.47,"nodes":784,"searches":7,"deepSearches":7,"illegal":0},"blue":{"agent":"greedy","moves":8,"totalMs":0.311,"maxMs":0.042,"nodes":90,"searches":8,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d2:greedy:12:b","n":4,"seed":1138651947,"round":12,"result":"win","winner":"red","drawReason":null,"turns":11,"red":{"agent":"greedy","moves":6,"totalMs":0.246,"maxMs":0.092,"nodes":69,"searches":5,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":5,"totalMs":1.812,"maxMs":0.613,"nodes":508,"searches":4,"deepSearches":4,"illegal":0}},{"id":"4:minimax-d2:greedy:13:a","n":4,"seed":2874573784,"round":13,"result":"win","winner":"blue","drawReason":null,"turns":12,"red":{"agent":"minimax-d2","moves":6,"totalMs":1.856,"maxMs":0.513,"nodes":652,"searches":5,"deepSearches":5,"illegal":0},"blue":{"agent":"greedy","moves":6,"totalMs":0.227,"maxMs":0.045,"nodes":65,"searches":5,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d2:greedy:13:b","n":4,"seed":2874573784,"round":13,"result":"win","winner":"blue","drawReason":null,"turns":18,"red":{"agent":"greedy","moves":9,"totalMs":0.418,"maxMs":0.078,"nodes":93,"searches":9,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":9,"totalMs":1.935,"maxMs":0.456,"nodes":554,"searches":7,"deepSearches":7,"illegal":0}},{"id":"4:minimax-d2:greedy:14:a","n":4,"seed":961219998,"round":14,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"minimax-d2","moves":7,"totalMs":1.849,"maxMs":0.415,"nodes":676,"searches":6,"deepSearches":6,"illegal":0},"blue":{"agent":"greedy","moves":7,"totalMs":0.261,"maxMs":0.047,"nodes":72,"searches":6,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d2:greedy:14:b","n":4,"seed":961219998,"round":14,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"greedy","moves":8,"totalMs":0.343,"maxMs":0.05,"nodes":82,"searches":8,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":8,"totalMs":1.728,"maxMs":0.447,"nodes":462,"searches":6,"deepSearches":6,"illegal":0}},{"id":"4:minimax-d2:greedy:15:a","n":4,"seed":2633025130,"round":15,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"minimax-d2","moves":8,"totalMs":2.463,"maxMs":0.475,"nodes":818,"searches":7,"deepSearches":7,"illegal":0},"blue":{"agent":"greedy","moves":8,"totalMs":0.385,"maxMs":0.125,"nodes":85,"searches":7,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d2:greedy:15:b","n":4,"seed":2633025130,"round":15,"result":"win","winner":"red","drawReason":null,"turns":11,"red":{"agent":"greedy","moves":6,"totalMs":0.211,"maxMs":0.046,"nodes":65,"searches":5,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":5,"totalMs":1.427,"maxMs":0.433,"nodes":424,"searches":4,"deepSearches":4,"illegal":0}},{"id":"4:minimax-d2:greedy:16:a","n":4,"seed":271410032,"round":16,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"minimax-d2","moves":8,"totalMs":1.847,"maxMs":0.416,"nodes":676,"searches":6,"deepSearches":6,"illegal":0},"blue":{"agent":"greedy","moves":7,"totalMs":0.279,"maxMs":0.044,"nodes":77,"searches":7,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d2:greedy:16:b","n":4,"seed":271410032,"round":16,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"greedy","moves":8,"totalMs":0.277,"maxMs":0.043,"nodes":77,"searches":7,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":7,"totalMs":1.442,"maxMs":0.402,"nodes":460,"searches":6,"deepSearches":6,"illegal":0}},{"id":"4:minimax-d2:greedy:17:a","n":4,"seed":3218172949,"round":17,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"minimax-d2","moves":8,"totalMs":2.163,"maxMs":0.422,"nodes":752,"searches":7,"deepSearches":7,"illegal":0},"blue":{"agent":"greedy","moves":8,"totalMs":0.303,"maxMs":0.048,"nodes":81,"searches":7,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d2:greedy:17:b","n":4,"seed":3218172949,"round":17,"result":"win","winner":"blue","drawReason":null,"turns":12,"red":{"agent":"greedy","moves":6,"totalMs":0.232,"maxMs":0.042,"nodes":72,"searches":6,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":6,"totalMs":1.298,"maxMs":0.476,"nodes":424,"searches":4,"deepSearches":4,"illegal":0}},{"id":"4:minimax-d2:greedy:18:a","n":4,"seed":173649364,"round":18,"result":"win","winner":"blue","drawReason":null,"turns":12,"red":{"agent":"minimax-d2","moves":6,"totalMs":1.731,"maxMs":0.46,"nodes":650,"searches":5,"deepSearches":5,"illegal":0},"blue":{"agent":"greedy","moves":6,"totalMs":0.209,"maxMs":0.043,"nodes":65,"searches":5,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d2:greedy:18:b","n":4,"seed":173649364,"round":18,"result":"win","winner":"red","drawReason":null,"turns":13,"red":{"agent":"greedy","moves":7,"totalMs":0.406,"maxMs":0.15,"nodes":72,"searches":6,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":6,"totalMs":1.654,"maxMs":0.483,"nodes":450,"searches":5,"deepSearches":5,"illegal":0}},{"id":"4:minimax-d2:greedy:19:a","n":4,"seed":3411682386,"round":19,"result":"win","winner":"blue","drawReason":null,"turns":12,"red":{"agent":"minimax-d2","moves":6,"totalMs":1.792,"maxMs":0.532,"nodes":650,"searches":5,"deepSearches":5,"illegal":0},"blue":{"agent":"greedy","moves":6,"totalMs":0.216,"maxMs":0.049,"nodes":65,"searches":5,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d2:greedy:19:b","n":4,"seed":3411682386,"round":19,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"greedy","moves":8,"totalMs":0.358,"maxMs":0.086,"nodes":91,"searches":8,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":8,"totalMs":1.77,"maxMs":0.461,"nodes":584,"searches":6,"deepSearches":6,"illegal":0}},{"id":"4:minimax-d2:random:0:a","n":4,"seed":3061522886,"round":0,"result":"win","winner":"red","drawReason":null,"turns":13,"red":{"agent":"minimax-d2","moves":7,"totalMs":1.884,"maxMs":0.446,"nodes":649,"searches":5,"deepSearches":5,"illegal":0},"blue":{"agent":"random","moves":6,"totalMs":0.022,"maxMs":0.005,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d2:random:0:b","n":4,"seed":3061522886,"round":0,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"random","moves":9,"totalMs":0.033,"maxMs":0.007,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":8,"totalMs":1.906,"maxMs":0.413,"nodes":632,"searches":7,"deepSearches":7,"illegal":0}},{"id":"4:minimax-d2:random:1:a","n":4,"seed":3980755399,"round":1,"result":"win","winner":"red","drawReason":null,"turns":13,"red":{"agent":"minimax-d2","moves":7,"totalMs":1.973,"maxMs":0.456,"nodes":693,"searches":5,"deepSearches":5,"illegal":0},"blue":{"agent":"random","moves":6,"totalMs":0.018,"maxMs":0.005,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d2:random:1:b","n":4,"seed":3980755399,"round":1,"result":"win","winner":"blue","drawReason":null,"turns":12,"red":{"agent":"random","moves":6,"totalMs":0.014,"maxMs":0.004,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":6,"totalMs":1.386,"maxMs":0.506,"nodes":428,"searches":4,"deepSearches":4,"illegal":0}},{"id":"4:minimax-d2:random:2:a","n":4,"seed":1018173285,"round":2,"result":"win","winner":"red","drawReason":null,"turns":13,"red":{"agent":"minimax-d2","moves":7,"totalMs":2.073,"maxMs":0.507,"nodes":724,"searches":5,"deepSearches":5,"illegal":0},"blue":{"agent":"random","moves":6,"totalMs":0.019,"maxMs":0.004,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d2:random:2:b","n":4,"seed":1018173285,"round":2,"result":"win","winner":"blue","drawReason":null,"turns":12,"red":{"agent":"random","moves":6,"totalMs":0.015,"maxMs":0.004,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":6,"totalMs":1.653,"maxMs":0.441,"nodes":588,"searches":4,"deepSearches":4,"illegal":0}},{"id":"4:minimax-d2:random:3:a","n":4,"seed":3449121993,"round":3,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"minimax-d2","moves":8,"totalMs":2.178,"maxMs":0.569,"nodes":650,"searches":6,"deepSearches":6,"illegal":0},"blue":{"agent":"random","moves":7,"totalMs":0.022,"maxMs":0.004,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d2:random:3:b","n":4,"seed":3449121993,"round":3,"result":"win","winner":"blue","drawReason":null,"turns":18,"red":{"agent":"random","moves":9,"totalMs":0.03,"maxMs":0.006,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":9,"totalMs":2.101,"maxMs":0.396,"nodes":644,"searches":7,"deepSearches":7,"illegal":0}},{"id":"4:minimax-d2:random:4:a","n":4,"seed":2530861162,"round":4,"result":"win","winner":"red","drawReason":null,"turns":13,"red":{"agent":"minimax-d2","moves":7,"totalMs":1.933,"maxMs":0.461,"nodes":684,"searches":5,"deepSearches":5,"illegal":0},"blue":{"agent":"random","moves":6,"totalMs":0.015,"maxMs":0.004,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d2:random:4:b","n":4,"seed":2530861162,"round":4,"result":"win","winner":"blue","drawReason":null,"turns":12,"red":{"agent":"random","moves":6,"totalMs":0.016,"maxMs":0.005,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":6,"totalMs":1.55,"maxMs":0.408,"nodes":540,"searches":4,"deepSearches":4,"illegal":0}},{"id":"4:minimax-d2:random:5:a","n":4,"seed":1731815511,"round":5,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"minimax-d2","moves":8,"totalMs":1.898,"maxMs":0.57,"nodes":615,"searches":6,"deepSearches":6,"illegal":0},"blue":{"agent":"random","moves":7,"totalMs":0.024,"maxMs":0.006,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d2:random:5:b","n":4,"seed":1731815511,"round":5,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"random","moves":7,"totalMs":0.017,"maxMs":0.004,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":7,"totalMs":1.699,"maxMs":0.475,"nodes":577,"searches":5,"deepSearches":5,"illegal":0}},{"id":"4:minimax-d2:random:6:a","n":4,"seed":818465685,"round":6,"result":"win","winner":"blue","drawReason":null,"turns":18,"red":{"agent":"minimax-d2","moves":9,"totalMs":2.446,"maxMs":0.461,"nodes":830,"searches":8,"deepSearches":8,"illegal":0},"blue":{"agent":"random","moves":9,"totalMs":0.031,"maxMs":0.006,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d2:random:6:b","n":4,"seed":818465685,"round":6,"result":"win","winner":"blue","drawReason":null,"turns":18,"red":{"agent":"random","moves":9,"totalMs":0.033,"maxMs":0.006,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":9,"totalMs":1.734,"maxMs":0.407,"nodes":518,"searches":7,"deepSearches":7,"illegal":0}},{"id":"4:minimax-d2:random:7:a","n":4,"seed":2988368963,"round":7,"result":"win","winner":"red","drawReason":null,"turns":13,"red":{"agent":"minimax-d2","moves":7,"totalMs":1.868,"maxMs":0.429,"nodes":611,"searches":5,"deepSearches":5,"illegal":0},"blue":{"agent":"random","moves":6,"totalMs":0.022,"maxMs":0.008,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d2:random:7:b","n":4,"seed":2988368963,"round":7,"result":"win","winner":"blue","drawReason":null,"turns":10,"red":{"agent":"random","moves":5,"totalMs":0.014,"maxMs":0.005,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":5,"totalMs":1.073,"maxMs":0.443,"nodes":374,"searches":3,"deepSearches":3,"illegal":0}},{"id":"4:minimax-d2:random:8:a","n":4,"seed":1051098821,"round":8,"result":"win","winner":"red","drawReason":null,"turns":13,"red":{"agent":"minimax-d2","moves":7,"totalMs":1.665,"maxMs":0.55,"nodes":553,"searches":5,"deepSearches":5,"illegal":0},"blue":{"agent":"random","moves":6,"totalMs":0.016,"maxMs":0.004,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d2:random:8:b","n":4,"seed":1051098821,"round":8,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"random","moves":7,"totalMs":0.017,"maxMs":0.004,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":7,"totalMs":1.478,"maxMs":0.47,"nodes":452,"searches":5,"deepSearches":5,"illegal":0}},{"id":"4:minimax-d2:random:9:a","n":4,"seed":832367481,"round":9,"result":"win","winner":"red","drawReason":null,"turns":21,"red":{"agent":"minimax-d2","moves":11,"totalMs":2.776,"maxMs":0.475,"nodes":936,"searches":10,"deepSearches":10,"illegal":0},"blue":{"agent":"random","moves":10,"totalMs":0.054,"maxMs":0.018,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d2:random:9:b","n":4,"seed":832367481,"round":9,"result":"win","winner":"blue","drawReason":null,"turns":10,"red":{"agent":"random","moves":5,"totalMs":0.009,"maxMs":0.003,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":5,"totalMs":1.104,"maxMs":0.416,"nodes":374,"searches":3,"deepSearches":3,"illegal":0}},{"id":"4:minimax-d2:random:10:a","n":4,"seed":77667761,"round":10,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"minimax-d2","moves":8,"totalMs":2.081,"maxMs":0.413,"nodes":776,"searches":6,"deepSearches":6,"illegal":0},"blue":{"agent":"random","moves":7,"totalMs":0.019,"maxMs":0.005,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d2:random:10:b","n":4,"seed":77667761,"round":10,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"random","moves":8,"totalMs":0.028,"maxMs":0.006,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":8,"totalMs":1.469,"maxMs":0.387,"nodes":480,"searches":6,"deepSearches":6,"illegal":0}},{"id":"4:minimax-d2:random:11:a","n":4,"seed":2849687775,"round":11,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"minimax-d2","moves":8,"totalMs":2.562,"maxMs":0.806,"nodes":736,"searches":6,"deepSearches":6,"illegal":0},"blue":{"agent":"random","moves":7,"totalMs":0.036,"maxMs":0.012,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d2:random:11:b","n":4,"seed":2849687775,"round":11,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"random","moves":7,"totalMs":0.019,"maxMs":0.005,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":7,"totalMs":1.75,"maxMs":0.431,"nodes":547,"searches":5,"deepSearches":5,"illegal":0}},{"id":"4:minimax-d2:random:12:a","n":4,"seed":683812457,"round":12,"result":"win","winner":"red","drawReason":null,"turns":11,"red":{"agent":"minimax-d2","moves":6,"totalMs":1.684,"maxMs":0.477,"nodes":642,"searches":4,"deepSearches":4,"illegal":0},"blue":{"agent":"random","moves":5,"totalMs":0.012,"maxMs":0.004,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d2:random:12:b","n":4,"seed":683812457,"round":12,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"random","moves":7,"totalMs":0.016,"maxMs":0.004,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":7,"totalMs":1.3,"maxMs":0.381,"nodes":450,"searches":5,"deepSearches":5,"illegal":0}},{"id":"4:minimax-d2:random:13:a","n":4,"seed":3070803376,"round":13,"result":"win","winner":"red","drawReason":null,"turns":19,"red":{"agent":"minimax-d2","moves":10,"totalMs":2.347,"maxMs":0.45,"nodes":856,"searches":8,"deepSearches":8,"illegal":0},"blue":{"agent":"random","moves":9,"totalMs":0.028,"maxMs":0.006,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d2:random:13:b","n":4,"seed":3070803376,"round":13,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"random","moves":7,"totalMs":0.017,"maxMs":0.004,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":7,"totalMs":1.503,"maxMs":0.412,"nodes":508,"searches":5,"deepSearches":5,"illegal":0}},{"id":"4:minimax-d2:random:14:a","n":4,"seed":2350484263,"round":14,"result":"win","winner":"red","drawReason":null,"turns":11,"red":{"agent":"minimax-d2","moves":6,"totalMs":1.673,"maxMs":0.446,"nodes":644,"searches":4,"deepSearches":4,"illegal":0},"blue":{"agent":"random","moves":5,"totalMs":0.013,"maxMs":0.006,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d2:random:14:b","n":4,"seed":2350484263,"round":14,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"random","moves":7,"totalMs":0.018,"maxMs":0.004,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":7,"totalMs":1.446,"maxMs":0.437,"nodes":460,"searches":5,"deepSearches":5,"illegal":0}},{"id":"4:minimax-d2:random:15:a","n":4,"seed":2181997440,"round":15,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"minimax-d2","moves":8,"totalMs":2.096,"maxMs":0.409,"nodes":776,"searches":6,"deepSearches":6,"illegal":0},"blue":{"agent":"random","moves":7,"totalMs":0.021,"maxMs":0.005,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d2:random:15:b","n":4,"seed":2181997440,"round":15,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"random","moves":8,"totalMs":0.023,"maxMs":0.005,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":8,"totalMs":1.532,"maxMs":0.41,"nodes":507,"searches":6,"deepSearches":6,"illegal":0}},{"id":"4:minimax-d2:random:16:a","n":4,"seed":695879078,"round":16,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"minimax-d2","moves":8,"totalMs":1.919,"maxMs":0.464,"nodes":684,"searches":6,"deepSearches":6,"illegal":0},"blue":{"agent":"random","moves":7,"totalMs":0.02,"maxMs":0.004,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d2:random:16:b","n":4,"seed":695879078,"round":16,"result":"win","winner":"blue","drawReason":null,"turns":18,"red":{"agent":"random","moves":9,"totalMs":0.048,"maxMs":0.014,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":9,"totalMs":2.394,"maxMs":0.582,"nodes":656,"searches":7,"deepSearches":7,"illegal":0}},{"id":"4:minimax-d2:random:17:a","n":4,"seed":3663324224,"round":17,"result":"win","winner":"red","drawReason":null,"turns":13,"red":{"agent":"minimax-d2","moves":7,"totalMs":1.974,"maxMs":0.492,"nodes":684,"searches":5,"deepSearches":5,"illegal":0},"blue":{"agent":"random","moves":6,"totalMs":0.017,"maxMs":0.004,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d2:random:17:b","n":4,"seed":3663324224,"round":17,"result":"win","winner":"blue","drawReason":null,"turns":12,"red":{"agent":"random","moves":6,"totalMs":0.014,"maxMs":0.005,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":6,"totalMs":1.548,"maxMs":0.45,"nodes":500,"searches":4,"deepSearches":4,"illegal":0}},{"id":"4:minimax-d2:random:18:a","n":4,"seed":1258795218,"round":18,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"minimax-d2","moves":9,"totalMs":1.877,"maxMs":0.443,"nodes":605,"searches":7,"deepSearches":7,"illegal":0},"blue":{"agent":"random","moves":8,"totalMs":0.025,"maxMs":0.005,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d2:random:18:b","n":4,"seed":1258795218,"round":18,"result":"win","winner":"blue","drawReason":null,"turns":10,"red":{"agent":"random","moves":5,"totalMs":0.009,"maxMs":0.003,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":5,"totalMs":1.073,"maxMs":0.407,"nodes":374,"searches":3,"deepSearches":3,"illegal":0}},{"id":"4:minimax-d2:random:19:a","n":4,"seed":3474729713,"round":19,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"minimax-d2","moves":7,"totalMs":1.659,"maxMs":0.433,"nodes":562,"searches":6,"deepSearches":6,"illegal":0},"blue":{"agent":"random","moves":7,"totalMs":0.021,"maxMs":0.004,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d2:random:19:b","n":4,"seed":3474729713,"round":19,"result":"win","winner":"blue","drawReason":null,"turns":10,"red":{"agent":"random","moves":5,"totalMs":0.01,"maxMs":0.004,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":5,"totalMs":1.139,"maxMs":0.41,"nodes":416,"searches":3,"deepSearches":3,"illegal":0}},{"id":"4:minimax-d3:greedy:0:a","n":4,"seed":3207707080,"round":0,"result":"win","winner":"red","drawReason":null,"turns":11,"red":{"agent":"minimax-d3","moves":6,"totalMs":17.924,"maxMs":6.956,"nodes":6562,"searches":4,"deepSearches":4,"illegal":0},"blue":{"agent":"greedy","moves":5,"totalMs":0.306,"maxMs":0.129,"nodes":65,"searches":5,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d3:greedy:0:b","n":4,"seed":3207707080,"round":0,"result":"win","winner":"red","drawReason":null,"turns":13,"red":{"agent":"greedy","moves":7,"totalMs":0.27,"maxMs":0.05,"nodes":72,"searches":6,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":6,"totalMs":12.207,"maxMs":5.19,"nodes":3923,"searches":5,"deepSearches":5,"illegal":0}},{"id":"4:minimax-d3:greedy:1:a","n":4,"seed":2725520152,"round":1,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"minimax-d3","moves":8,"totalMs":21.73,"maxMs":6.229,"nodes":7490,"searches":6,"deepSearches":6,"illegal":0},"blue":{"agent":"greedy","moves":7,"totalMs":0.367,"maxMs":0.076,"nodes":83,"searches":7,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d3:greedy:1:b","n":4,"seed":2725520152,"round":1,"result":"win","winner":"red","drawReason":null,"turns":11,"red":{"agent":"greedy","moves":6,"totalMs":0.224,"maxMs":0.049,"nodes":65,"searches":5,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":5,"totalMs":11.846,"maxMs":5.414,"nodes":3717,"searches":4,"deepSearches":4,"illegal":0}},{"id":"4:minimax-d3:greedy:2:a","n":4,"seed":2871353029,"round":2,"result":"win","winner":"red","drawReason":null,"turns":13,"red":{"agent":"minimax-d3","moves":7,"totalMs":18.213,"maxMs":6.26,"nodes":6768,"searches":5,"deepSearches":5,"illegal":0},"blue":{"agent":"greedy","moves":6,"totalMs":0.375,"maxMs":0.163,"nodes":72,"searches":6,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d3:greedy:2:b","n":4,"seed":2871353029,"round":2,"result":"win","winner":"red","drawReason":null,"turns":13,"red":{"agent":"greedy","moves":7,"totalMs":0.283,"maxMs":0.055,"nodes":77,"searches":6,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":6,"totalMs":15.311,"maxMs":6.353,"nodes":5104,"searches":5,"deepSearches":5,"illegal":0}},{"id":"4:minimax-d3:greedy:3:a","n":4,"seed":1218748353,"round":3,"result":"win","winner":"red","drawReason":null,"turns":13,"red":{"agent":"minimax-d3","moves":7,"totalMs":18.676,"maxMs":6.772,"nodes":6854,"searches":5,"deepSearches":5,"illegal":0},"blue":{"agent":"greedy","moves":6,"totalMs":0.272,"maxMs":0.047,"nodes":74,"searches":6,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d3:greedy:3:b","n":4,"seed":1218748353,"round":3,"result":"win","winner":"red","drawReason":null,"turns":13,"red":{"agent":"greedy","moves":7,"totalMs":0.255,"maxMs":0.049,"nodes":72,"searches":6,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":6,"totalMs":12.015,"maxMs":5.485,"nodes":3913,"searches":5,"deepSearches":5,"illegal":0}},{"id":"4:minimax-d3:greedy:4:a","n":4,"seed":3823103917,"round":4,"result":"win","winner":"red","drawReason":null,"turns":11,"red":{"agent":"minimax-d3","moves":6,"totalMs":17.062,"maxMs":6.608,"nodes":6494,"searches":4,"deepSearches":4,"illegal":0},"blue":{"agent":"greedy","moves":5,"totalMs":0.217,"maxMs":0.047,"nodes":65,"searches":5,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d3:greedy:4:b","n":4,"seed":3823103917,"round":4,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"greedy","moves":7,"totalMs":0.341,"maxMs":0.091,"nodes":77,"searches":7,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":7,"totalMs":12.468,"maxMs":4.993,"nodes":3898,"searches":5,"deepSearches":5,"illegal":0}},{"id":"4:minimax-d3:greedy:5:a","n":4,"seed":2963572384,"round":5,"result":"win","winner":"blue","drawReason":null,"turns":18,"red":{"agent":"minimax-d3","moves":9,"totalMs":18.765,"maxMs":6.212,"nodes":6940,"searches":8,"deepSearches":8,"illegal":0},"blue":{"agent":"greedy","moves":9,"totalMs":0.324,"maxMs":0.05,"nodes":80,"searches":8,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d3:greedy:5:b","n":4,"seed":2963572384,"round":5,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"greedy","moves":8,"totalMs":0.33,"maxMs":0.055,"nodes":87,"searches":8,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":8,"totalMs":15.922,"maxMs":5.999,"nodes":5343,"searches":6,"deepSearches":6,"illegal":0}},{"id":"4:minimax-d3:greedy:6:a","n":4,"seed":1158885291,"round":6,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"minimax-d3","moves":9,"totalMs":19.591,"maxMs":6.273,"nodes":7191,"searches":7,"deepSearches":7,"illegal":0},"blue":{"agent":"greedy","moves":8,"totalMs":0.348,"maxMs":0.053,"nodes":86,"searches":8,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d3:greedy:6:b","n":4,"seed":1158885291,"round":6,"result":"win","winner":"red","drawReason":null,"turns":11,"red":{"agent":"greedy","moves":6,"totalMs":0.245,"maxMs":0.057,"nodes":65,"searches":5,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":5,"totalMs":12.259,"maxMs":5.405,"nodes":3692,"searches":4,"deepSearches":4,"illegal":0}},{"id":"4:minimax-d3:greedy:7:a","n":4,"seed":1653380667,"round":7,"result":"win","winner":"red","drawReason":null,"turns":13,"red":{"agent":"minimax-d3","moves":7,"totalMs":18.619,"maxMs":6.285,"nodes":6852,"searches":5,"deepSearches":5,"illegal":0},"blue":{"agent":"greedy","moves":6,"totalMs":0.262,"maxMs":0.054,"nodes":74,"searches":6,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d3:greedy:7:b","n":4,"seed":1653380667,"round":7,"result":"win","winner":"blue","drawReason":null,"turns":10,"red":{"agent":"greedy","moves":5,"totalMs":0.278,"maxMs":0.107,"nodes":65,"searches":5,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":5,"totalMs":11.544,"maxMs":5.452,"nodes":3604,"searches":3,"deepSearches":3,"illegal":0}},{"id":"4:minimax-d3:greedy:8:a","n":4,"seed":868771161,"round":8,"result":"win","winner":"red","drawReason":null,"turns":11,"red":{"agent":"minimax-d3","moves":6,"totalMs":17.654,"maxMs":6.412,"nodes":6550,"searches":4,"deepSearches":4,"illegal":0},"blue":{"agent":"greedy","moves":5,"totalMs":0.444,"maxMs":0.21,"nodes":65,"searches":5,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d3:greedy:8:b","n":4,"seed":868771161,"round":8,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"greedy","moves":9,"totalMs":0.349,"maxMs":0.062,"nodes":84,"searches":8,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":8,"totalMs":12.308,"maxMs":5.037,"nodes":3901,"searches":7,"deepSearches":7,"illegal":0}},{"id":"4:minimax-d3:greedy:9:a","n":4,"seed":1673050818,"round":9,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"minimax-d3","moves":9,"totalMs":19.774,"maxMs":6.125,"nodes":7228,"searches":7,"deepSearches":7,"illegal":0},"blue":{"agent":"greedy","moves":8,"totalMs":0.35,"maxMs":0.065,"nodes":86,"searches":8,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d3:greedy:9:b","n":4,"seed":1673050818,"round":9,"result":"win","winner":"blue","drawReason":null,"turns":12,"red":{"agent":"greedy","moves":6,"totalMs":0.377,"maxMs":0.149,"nodes":72,"searches":6,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":6,"totalMs":12.445,"maxMs":4.962,"nodes":3869,"searches":4,"deepSearches":4,"illegal":0}},{"id":"4:minimax-d3:greedy:10:a","n":4,"seed":908068585,"round":10,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"minimax-d3","moves":8,"totalMs":19.199,"maxMs":6.189,"nodes":6912,"searches":6,"deepSearches":6,"illegal":0},"blue":{"agent":"greedy","moves":7,"totalMs":0.311,"maxMs":0.051,"nodes":77,"searches":7,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d3:greedy:10:b","n":4,"seed":908068585,"round":10,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"greedy","moves":7,"totalMs":0.299,"maxMs":0.055,"nodes":77,"searches":7,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":7,"totalMs":12.555,"maxMs":5.122,"nodes":4001,"searches":5,"deepSearches":5,"illegal":0}},{"id":"4:minimax-d3:greedy:11:a","n":4,"seed":1969530172,"round":11,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"minimax-d3","moves":9,"totalMs":22.611,"maxMs":6.367,"nodes":8084,"searches":7,"deepSearches":7,"illegal":0},"blue":{"agent":"greedy","moves":8,"totalMs":0.405,"maxMs":0.102,"nodes":92,"searches":8,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d3:greedy:11:b","n":4,"seed":1969530172,"round":11,"result":"win","winner":"blue","drawReason":null,"turns":12,"red":{"agent":"greedy","moves":6,"totalMs":0.278,"maxMs":0.061,"nodes":77,"searches":6,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":6,"totalMs":15.516,"maxMs":5.888,"nodes":5096,"searches":4,"deepSearches":4,"illegal":0}},{"id":"4:minimax-d3:greedy:12:a","n":4,"seed":707026154,"round":12,"result":"win","winner":"blue","drawReason":null,"turns":12,"red":{"agent":"minimax-d3","moves":6,"totalMs":19.559,"maxMs":6.411,"nodes":6930,"searches":5,"deepSearches":5,"illegal":0},"blue":{"agent":"greedy","moves":6,"totalMs":0.242,"maxMs":0.057,"nodes":65,"searches":5,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d3:greedy:12:b","n":4,"seed":707026154,"round":12,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"greedy","moves":8,"totalMs":0.41,"maxMs":0.116,"nodes":80,"searches":8,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":8,"totalMs":14.587,"maxMs":5.928,"nodes":4010,"searches":6,"deepSearches":6,"illegal":0}},{"id":"4:minimax-d3:greedy:13:a","n":4,"seed":1825965305,"round":13,"result":"win","winner":"red","drawReason":null,"turns":11,"red":{"agent":"minimax-d3","moves":6,"totalMs":18.231,"maxMs":7.185,"nodes":6500,"searches":4,"deepSearches":4,"illegal":0},"blue":{"agent":"greedy","moves":5,"totalMs":0.247,"maxMs":0.065,"nodes":65,"searches":5,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d3:greedy:13:b","n":4,"seed":1825965305,"round":13,"result":"win","winner":"red","drawReason":null,"turns":11,"red":{"agent":"greedy","moves":6,"totalMs":0.272,"maxMs":0.078,"nodes":69,"searches":5,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":5,"totalMs":15.244,"maxMs":6.46,"nodes":4802,"searches":4,"deepSearches":4,"illegal":0}},{"id":"4:minimax-d3:greedy:14:a","n":4,"seed":3422855365,"round":14,"result":"win","winner":"red","drawReason":null,"turns":13,"red":{"agent":"minimax-d3","moves":7,"totalMs":19.12,"maxMs":7.311,"nodes":6762,"searches":5,"deepSearches":5,"illegal":0},"blue":{"agent":"greedy","moves":6,"totalMs":0.285,"maxMs":0.058,"nodes":72,"searches":6,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d3:greedy:14:b","n":4,"seed":3422855365,"round":14,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"greedy","moves":7,"totalMs":0.34,"maxMs":0.068,"nodes":79,"searches":7,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":7,"totalMs":14.109,"maxMs":6.455,"nodes":3965,"searches":5,"deepSearches":5,"illegal":0}},{"id":"4:minimax-d3:greedy:15:a","n":4,"seed":3278198814,"round":15,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"minimax-d3","moves":8,"totalMs":20.277,"maxMs":7.457,"nodes":6917,"searches":6,"deepSearches":6,"illegal":0},"blue":{"agent":"greedy","moves":7,"totalMs":0.369,"maxMs":0.075,"nodes":79,"searches":7,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d3:greedy:15:b","n":4,"seed":3278198814,"round":15,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"greedy","moves":8,"totalMs":0.314,"maxMs":0.051,"nodes":77,"searches":7,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":7,"totalMs":13.958,"maxMs":6.295,"nodes":3965,"searches":6,"deepSearches":6,"illegal":0}},{"id":"4:minimax-d3:greedy:16:a","n":4,"seed":3644449129,"round":16,"result":"win","winner":"red","drawReason":null,"turns":11,"red":{"agent":"minimax-d3","moves":6,"totalMs":19.115,"maxMs":7.134,"nodes":6570,"searches":4,"deepSearches":4,"illegal":0},"blue":{"agent":"greedy","moves":5,"totalMs":0.253,"maxMs":0.058,"nodes":65,"searches":5,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d3:greedy:16:b","n":4,"seed":3644449129,"round":16,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"greedy","moves":7,"totalMs":0.385,"maxMs":0.085,"nodes":77,"searches":7,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":7,"totalMs":13.601,"maxMs":6.457,"nodes":3937,"searches":5,"deepSearches":5,"illegal":0}},{"id":"4:minimax-d3:greedy:17:a","n":4,"seed":685501803,"round":17,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"minimax-d3","moves":7,"totalMs":20.018,"maxMs":7.476,"nodes":6990,"searches":6,"deepSearches":6,"illegal":0},"blue":{"agent":"greedy","moves":7,"totalMs":0.285,"maxMs":0.049,"nodes":72,"searches":6,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d3:greedy:17:b","n":4,"seed":685501803,"round":17,"result":"win","winner":"blue","drawReason":null,"turns":10,"red":{"agent":"greedy","moves":5,"totalMs":0.221,"maxMs":0.056,"nodes":65,"searches":5,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":5,"totalMs":11.391,"maxMs":5.496,"nodes":3610,"searches":3,"deepSearches":3,"illegal":0}},{"id":"4:minimax-d3:greedy:18:a","n":4,"seed":1050948070,"round":18,"result":"win","winner":"red","drawReason":null,"turns":11,"red":{"agent":"minimax-d3","moves":6,"totalMs":17.181,"maxMs":6.922,"nodes":6500,"searches":4,"deepSearches":4,"illegal":0},"blue":{"agent":"greedy","moves":5,"totalMs":0.348,"maxMs":0.135,"nodes":65,"searches":5,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d3:greedy:18:b","n":4,"seed":1050948070,"round":18,"result":"win","winner":"blue","drawReason":null,"turns":12,"red":{"agent":"greedy","moves":6,"totalMs":0.309,"maxMs":0.07,"nodes":74,"searches":6,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":6,"totalMs":12.584,"maxMs":5.705,"nodes":3796,"searches":4,"deepSearches":4,"illegal":0}},{"id":"4:minimax-d3:greedy:19:a","n":4,"seed":432345983,"round":19,"result":"win","winner":"red","drawReason":null,"turns":19,"red":{"agent":"minimax-d3","moves":10,"totalMs":24.133,"maxMs":6.445,"nodes":8178,"searches":8,"deepSearches":8,"illegal":0},"blue":{"agent":"greedy","moves":9,"totalMs":0.567,"maxMs":0.123,"nodes":97,"searches":9,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d3:greedy:19:b","n":4,"seed":432345983,"round":19,"result":"win","winner":"red","drawReason":null,"turns":11,"red":{"agent":"greedy","moves":6,"totalMs":0.228,"maxMs":0.052,"nodes":65,"searches":5,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":5,"totalMs":11.475,"maxMs":5.549,"nodes":3619,"searches":4,"deepSearches":4,"illegal":0}},{"id":"4:minimax-d3:random:0:a","n":4,"seed":2056391150,"round":0,"result":"win","winner":"red","drawReason":null,"turns":13,"red":{"agent":"minimax-d3","moves":7,"totalMs":20.772,"maxMs":6.742,"nodes":7700,"searches":5,"deepSearches":5,"illegal":0},"blue":{"agent":"random","moves":6,"totalMs":0.039,"maxMs":0.009,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d3:random:0:b","n":4,"seed":2056391150,"round":0,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"random","moves":8,"totalMs":0.053,"maxMs":0.018,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":8,"totalMs":12.553,"maxMs":5.837,"nodes":3508,"searches":6,"deepSearches":6,"illegal":0}},{"id":"4:minimax-d3:random:1:a","n":4,"seed":953977068,"round":1,"result":"win","winner":"red","drawReason":null,"turns":11,"red":{"agent":"minimax-d3","moves":6,"totalMs":17.822,"maxMs":6.513,"nodes":5589,"searches":4,"deepSearches":4,"illegal":0},"blue":{"agent":"random","moves":5,"totalMs":0.028,"maxMs":0.007,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d3:random:1:b","n":4,"seed":953977068,"round":1,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"random","moves":8,"totalMs":0.038,"maxMs":0.008,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":7,"totalMs":15.7,"maxMs":6.275,"nodes":4563,"searches":6,"deepSearches":6,"illegal":0}},{"id":"4:minimax-d3:random:2:a","n":4,"seed":4236816859,"round":2,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"minimax-d3","moves":9,"totalMs":23.489,"maxMs":7.719,"nodes":7752,"searches":7,"deepSearches":7,"illegal":0},"blue":{"agent":"random","moves":8,"totalMs":0.061,"maxMs":0.016,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d3:random:2:b","n":4,"seed":4236816859,"round":2,"result":"win","winner":"blue","drawReason":null,"turns":8,"red":{"agent":"random","moves":4,"totalMs":0.021,"maxMs":0.012,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":4,"totalMs":7.458,"maxMs":5.23,"nodes":2570,"searches":2,"deepSearches":2,"illegal":0}},{"id":"4:minimax-d3:random:3:a","n":4,"seed":275571364,"round":3,"result":"win","winner":"red","drawReason":null,"turns":11,"red":{"agent":"minimax-d3","moves":6,"totalMs":15.855,"maxMs":6.556,"nodes":5044,"searches":4,"deepSearches":4,"illegal":0},"blue":{"agent":"random","moves":5,"totalMs":0.042,"maxMs":0.016,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d3:random:3:b","n":4,"seed":275571364,"round":3,"result":"win","winner":"blue","drawReason":null,"turns":12,"red":{"agent":"random","moves":6,"totalMs":0.028,"maxMs":0.008,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":6,"totalMs":12.132,"maxMs":5.183,"nodes":3669,"searches":4,"deepSearches":4,"illegal":0}},{"id":"4:minimax-d3:random:4:a","n":4,"seed":2994560946,"round":4,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"minimax-d3","moves":9,"totalMs":24.055,"maxMs":6.313,"nodes":8850,"searches":7,"deepSearches":7,"illegal":0},"blue":{"agent":"random","moves":8,"totalMs":0.048,"maxMs":0.009,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d3:random:4:b","n":4,"seed":2994560946,"round":4,"result":"win","winner":"red","drawReason":null,"turns":7,"red":{"agent":"random","moves":4,"totalMs":0.011,"maxMs":0.005,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":3,"totalMs":6.267,"maxMs":5.426,"nodes":2175,"searches":2,"deepSearches":2,"illegal":0}},{"id":"4:minimax-d3:random:5:a","n":4,"seed":172402713,"round":5,"result":"win","winner":"red","drawReason":null,"turns":13,"red":{"agent":"minimax-d3","moves":7,"totalMs":15.597,"maxMs":5.581,"nodes":5315,"searches":5,"deepSearches":5,"illegal":0},"blue":{"agent":"random","moves":6,"totalMs":0.033,"maxMs":0.013,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d3:random:5:b","n":4,"seed":172402713,"round":5,"result":"win","winner":"blue","drawReason":null,"turns":10,"red":{"agent":"random","moves":5,"totalMs":0.017,"maxMs":0.005,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":5,"totalMs":10.66,"maxMs":4.905,"nodes":3636,"searches":3,"deepSearches":3,"illegal":0}},{"id":"4:minimax-d3:random:6:a","n":4,"seed":2397058936,"round":6,"result":"win","winner":"red","drawReason":null,"turns":11,"red":{"agent":"minimax-d3","moves":6,"totalMs":17.069,"maxMs":6.399,"nodes":5556,"searches":4,"deepSearches":4,"illegal":0},"blue":{"agent":"random","moves":5,"totalMs":0.029,"maxMs":0.012,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d3:random:6:b","n":4,"seed":2397058936,"round":6,"result":"win","winner":"blue","drawReason":null,"turns":10,"red":{"agent":"random","moves":5,"totalMs":0.024,"maxMs":0.011,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":5,"totalMs":11.268,"maxMs":5.232,"nodes":3627,"searches":3,"deepSearches":3,"illegal":0}},{"id":"4:minimax-d3:random:7:a","n":4,"seed":1867976404,"round":7,"result":"win","winner":"red","drawReason":null,"turns":11,"red":{"agent":"minimax-d3","moves":6,"totalMs":16.799,"maxMs":6.256,"nodes":6526,"searches":4,"deepSearches":4,"illegal":0},"blue":{"agent":"random","moves":5,"totalMs":0.023,"maxMs":0.007,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d3:random:7:b","n":4,"seed":1867976404,"round":7,"result":"win","winner":"blue","drawReason":null,"turns":12,"red":{"agent":"random","moves":6,"totalMs":0.024,"maxMs":0.007,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":6,"totalMs":12.042,"maxMs":5.126,"nodes":3866,"searches":4,"deepSearches":4,"illegal":0}},{"id":"4:minimax-d3:random:8:a","n":4,"seed":742053772,"round":8,"result":"win","winner":"red","drawReason":null,"turns":11,"red":{"agent":"minimax-d3","moves":6,"totalMs":14.933,"maxMs":5.84,"nodes":5138,"searches":4,"deepSearches":4,"illegal":0},"blue":{"agent":"random","moves":5,"totalMs":0.025,"maxMs":0.011,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d3:random:8:b","n":4,"seed":742053772,"round":8,"result":"win","winner":"blue","drawReason":null,"turns":10,"red":{"agent":"random","moves":5,"totalMs":0.021,"maxMs":0.006,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":5,"totalMs":11.559,"maxMs":5.186,"nodes":3640,"searches":3,"deepSearches":3,"illegal":0}},{"id":"4:minimax-d3:random:9:a","n":4,"seed":2997662824,"round":9,"result":"win","winner":"red","drawReason":null,"turns":11,"red":{"agent":"minimax-d3","moves":6,"totalMs":14.639,"maxMs":5.934,"nodes":5026,"searches":4,"deepSearches":4,"illegal":0},"blue":{"agent":"random","moves":5,"totalMs":0.023,"maxMs":0.006,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d3:random:9:b","n":4,"seed":2997662824,"round":9,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"random","moves":8,"totalMs":0.032,"maxMs":0.006,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":8,"totalMs":13.13,"maxMs":5.087,"nodes":4043,"searches":6,"deepSearches":6,"illegal":0}},{"id":"4:minimax-d3:random:10:a","n":4,"seed":129681713,"round":10,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"minimax-d3","moves":8,"totalMs":20.82,"maxMs":6.231,"nodes":7340,"searches":6,"deepSearches":6,"illegal":0},"blue":{"agent":"random","moves":7,"totalMs":0.044,"maxMs":0.016,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d3:random:10:b","n":4,"seed":129681713,"round":10,"result":"win","winner":"blue","drawReason":null,"turns":12,"red":{"agent":"random","moves":6,"totalMs":0.033,"maxMs":0.015,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":6,"totalMs":12.457,"maxMs":4.759,"nodes":3862,"searches":4,"deepSearches":4,"illegal":0}},{"id":"4:minimax-d3:random:11:a","n":4,"seed":2897537476,"round":11,"result":"win","winner":"red","drawReason":null,"turns":7,"red":{"agent":"minimax-d3","moves":4,"totalMs":10.857,"maxMs":5.891,"nodes":3846,"searches":2,"deepSearches":2,"illegal":0},"blue":{"agent":"random","moves":3,"totalMs":0.012,"maxMs":0.007,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d3:random:11:b","n":4,"seed":2897537476,"round":11,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"random","moves":7,"totalMs":0.03,"maxMs":0.007,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":7,"totalMs":13.645,"maxMs":5.065,"nodes":4322,"searches":5,"deepSearches":5,"illegal":0}},{"id":"4:minimax-d3:random:12:a","n":4,"seed":704268634,"round":12,"result":"win","winner":"red","drawReason":null,"turns":11,"red":{"agent":"minimax-d3","moves":6,"totalMs":14.554,"maxMs":6.262,"nodes":4990,"searches":4,"deepSearches":4,"illegal":0},"blue":{"agent":"random","moves":5,"totalMs":0.023,"maxMs":0.006,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d3:random:12:b","n":4,"seed":704268634,"round":12,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"random","moves":7,"totalMs":0.033,"maxMs":0.007,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":7,"totalMs":13.854,"maxMs":5.668,"nodes":4218,"searches":5,"deepSearches":5,"illegal":0}},{"id":"4:minimax-d3:random:13:a","n":4,"seed":2131652595,"round":13,"result":"win","winner":"red","drawReason":null,"turns":9,"red":{"agent":"minimax-d3","moves":5,"totalMs":16.199,"maxMs":5.952,"nodes":5395,"searches":3,"deepSearches":3,"illegal":0},"blue":{"agent":"random","moves":4,"totalMs":0.025,"maxMs":0.01,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d3:random:13:b","n":4,"seed":2131652595,"round":13,"result":"win","winner":"blue","drawReason":null,"turns":12,"red":{"agent":"random","moves":6,"totalMs":0.031,"maxMs":0.009,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":6,"totalMs":15.796,"maxMs":5.801,"nodes":4472,"searches":4,"deepSearches":4,"illegal":0}},{"id":"4:minimax-d3:random:14:a","n":4,"seed":3375949843,"round":14,"result":"win","winner":"red","drawReason":null,"turns":11,"red":{"agent":"minimax-d3","moves":6,"totalMs":19.769,"maxMs":6.776,"nodes":7114,"searches":4,"deepSearches":4,"illegal":0},"blue":{"agent":"random","moves":5,"totalMs":0.037,"maxMs":0.01,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d3:random:14:b","n":4,"seed":3375949843,"round":14,"result":"win","winner":"blue","drawReason":null,"turns":10,"red":{"agent":"random","moves":5,"totalMs":0.025,"maxMs":0.009,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":5,"totalMs":12.434,"maxMs":5.87,"nodes":3778,"searches":3,"deepSearches":3,"illegal":0}},{"id":"4:minimax-d3:random:15:a","n":4,"seed":4146960723,"round":15,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"minimax-d3","moves":8,"totalMs":23.43,"maxMs":6.31,"nodes":8331,"searches":6,"deepSearches":6,"illegal":0},"blue":{"agent":"random","moves":7,"totalMs":0.055,"maxMs":0.024,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d3:random:15:b","n":4,"seed":4146960723,"round":15,"result":"win","winner":"blue","drawReason":null,"turns":12,"red":{"agent":"random","moves":6,"totalMs":0.027,"maxMs":0.007,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":6,"totalMs":10.383,"maxMs":5.167,"nodes":3473,"searches":4,"deepSearches":4,"illegal":0}},{"id":"4:minimax-d3:random:16:a","n":4,"seed":1753342570,"round":16,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"minimax-d3","moves":9,"totalMs":24.525,"maxMs":6.372,"nodes":8283,"searches":7,"deepSearches":7,"illegal":0},"blue":{"agent":"random","moves":8,"totalMs":0.046,"maxMs":0.008,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d3:random:16:b","n":4,"seed":1753342570,"round":16,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"random","moves":7,"totalMs":0.036,"maxMs":0.006,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":7,"totalMs":15.447,"maxMs":5.421,"nodes":4518,"searches":5,"deepSearches":5,"illegal":0}},{"id":"4:minimax-d3:random:17:a","n":4,"seed":3323985844,"round":17,"result":"win","winner":"red","drawReason":null,"turns":11,"red":{"agent":"minimax-d3","moves":6,"totalMs":21.045,"maxMs":6.904,"nodes":7896,"searches":4,"deepSearches":4,"illegal":0},"blue":{"agent":"random","moves":5,"totalMs":0.027,"maxMs":0.009,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d3:random:17:b","n":4,"seed":3323985844,"round":17,"result":"win","winner":"blue","drawReason":null,"turns":10,"red":{"agent":"random","moves":5,"totalMs":0.017,"maxMs":0.006,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":5,"totalMs":10.103,"maxMs":5.192,"nodes":3288,"searches":3,"deepSearches":3,"illegal":0}},{"id":"4:minimax-d3:random:18:a","n":4,"seed":3546655332,"round":18,"result":"win","winner":"red","drawReason":null,"turns":13,"red":{"agent":"minimax-d3","moves":7,"totalMs":19.862,"maxMs":6.27,"nodes":6591,"searches":5,"deepSearches":5,"illegal":0},"blue":{"agent":"random","moves":6,"totalMs":0.03,"maxMs":0.007,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d3:random:18:b","n":4,"seed":3546655332,"round":18,"result":"win","winner":"red","drawReason":null,"turns":11,"red":{"agent":"random","moves":6,"totalMs":0.018,"maxMs":0.005,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":5,"totalMs":9.918,"maxMs":5.652,"nodes":3204,"searches":4,"deepSearches":4,"illegal":0}},{"id":"4:minimax-d3:random:19:a","n":4,"seed":3849685026,"round":19,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"minimax-d3","moves":8,"totalMs":20.033,"maxMs":6.633,"nodes":7180,"searches":6,"deepSearches":6,"illegal":0},"blue":{"agent":"random","moves":7,"totalMs":0.041,"maxMs":0.011,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:minimax-d3:random:19:b","n":4,"seed":3849685026,"round":19,"result":"win","winner":"blue","drawReason":null,"turns":10,"red":{"agent":"random","moves":5,"totalMs":0.021,"maxMs":0.007,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":5,"totalMs":14.649,"maxMs":5.44,"nodes":4958,"searches":3,"deepSearches":3,"illegal":0}},{"id":"4:greedy:random:0:a","n":4,"seed":2310353951,"round":0,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"greedy","moves":8,"totalMs":0.303,"maxMs":0.049,"nodes":89,"searches":7,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":7,"totalMs":0.019,"maxMs":0.004,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:greedy:random:0:b","n":4,"seed":2310353951,"round":0,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"random","moves":9,"totalMs":0.026,"maxMs":0.005,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":8,"totalMs":0.353,"maxMs":0.05,"nodes":88,"searches":8,"deepSearches":0,"illegal":0}},{"id":"4:greedy:random:1:a","n":4,"seed":257011862,"round":1,"result":"win","winner":"red","drawReason":null,"turns":11,"red":{"agent":"greedy","moves":6,"totalMs":0.249,"maxMs":0.075,"nodes":73,"searches":5,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":5,"totalMs":0.009,"maxMs":0.003,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:greedy:random:1:b","n":4,"seed":257011862,"round":1,"result":"win","winner":"blue","drawReason":null,"turns":12,"red":{"agent":"random","moves":6,"totalMs":0.011,"maxMs":0.003,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":6,"totalMs":0.222,"maxMs":0.048,"nodes":65,"searches":5,"deepSearches":0,"illegal":0}},{"id":"4:greedy:random:2:a","n":4,"seed":1828872169,"round":2,"result":"win","winner":"red","drawReason":null,"turns":11,"red":{"agent":"greedy","moves":6,"totalMs":0.215,"maxMs":0.049,"nodes":65,"searches":5,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":5,"totalMs":0.01,"maxMs":0.003,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:greedy:random:2:b","n":4,"seed":1828872169,"round":2,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"random","moves":7,"totalMs":0.014,"maxMs":0.004,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":7,"totalMs":0.256,"maxMs":0.048,"nodes":72,"searches":6,"deepSearches":0,"illegal":0}},{"id":"4:greedy:random:3:a","n":4,"seed":1747326573,"round":3,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"greedy","moves":8,"totalMs":0.331,"maxMs":0.057,"nodes":84,"searches":8,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":8,"totalMs":0.029,"maxMs":0.008,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:greedy:random:3:b","n":4,"seed":1747326573,"round":3,"result":"win","winner":"blue","drawReason":null,"turns":12,"red":{"agent":"random","moves":6,"totalMs":0.012,"maxMs":0.004,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":6,"totalMs":0.222,"maxMs":0.048,"nodes":67,"searches":5,"deepSearches":0,"illegal":0}},{"id":"4:greedy:random:4:a","n":4,"seed":2625493615,"round":4,"result":"win","winner":"red","drawReason":null,"turns":11,"red":{"agent":"greedy","moves":6,"totalMs":0.27,"maxMs":0.101,"nodes":71,"searches":5,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":5,"totalMs":0.043,"maxMs":0.035,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:greedy:random:4:b","n":4,"seed":2625493615,"round":4,"result":"win","winner":"blue","drawReason":null,"turns":12,"red":{"agent":"random","moves":6,"totalMs":0.016,"maxMs":0.009,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":6,"totalMs":0.216,"maxMs":0.048,"nodes":65,"searches":5,"deepSearches":0,"illegal":0}},{"id":"4:greedy:random:5:a","n":4,"seed":3224668059,"round":5,"result":"win","winner":"red","drawReason":null,"turns":13,"red":{"agent":"greedy","moves":7,"totalMs":0.258,"maxMs":0.048,"nodes":79,"searches":6,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":6,"totalMs":0.014,"maxMs":0.004,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:greedy:random:5:b","n":4,"seed":3224668059,"round":5,"result":"win","winner":"blue","drawReason":null,"turns":12,"red":{"agent":"random","moves":6,"totalMs":0.013,"maxMs":0.005,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":6,"totalMs":0.28,"maxMs":0.094,"nodes":67,"searches":5,"deepSearches":0,"illegal":0}},{"id":"4:greedy:random:6:a","n":4,"seed":2723690355,"round":6,"result":"win","winner":"red","drawReason":null,"turns":11,"red":{"agent":"greedy","moves":6,"totalMs":0.206,"maxMs":0.045,"nodes":71,"searches":5,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":5,"totalMs":0.009,"maxMs":0.003,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:greedy:random:6:b","n":4,"seed":2723690355,"round":6,"result":"win","winner":"blue","drawReason":null,"turns":10,"red":{"agent":"random","moves":5,"totalMs":0.008,"maxMs":0.003,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":5,"totalMs":0.172,"maxMs":0.046,"nodes":56,"searches":4,"deepSearches":0,"illegal":0}},{"id":"4:greedy:random:7:a","n":4,"seed":3604595885,"round":7,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"greedy","moves":8,"totalMs":0.304,"maxMs":0.047,"nodes":87,"searches":8,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":8,"totalMs":0.021,"maxMs":0.005,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:greedy:random:7:b","n":4,"seed":3604595885,"round":7,"result":"win","winner":"blue","drawReason":null,"turns":12,"red":{"agent":"random","moves":6,"totalMs":0.033,"maxMs":0.016,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":6,"totalMs":0.454,"maxMs":0.132,"nodes":65,"searches":5,"deepSearches":0,"illegal":0}},{"id":"4:greedy:random:8:a","n":4,"seed":3149261863,"round":8,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"greedy","moves":9,"totalMs":0.358,"maxMs":0.05,"nodes":89,"searches":8,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":8,"totalMs":0.027,"maxMs":0.007,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:greedy:random:8:b","n":4,"seed":3149261863,"round":8,"result":"win","winner":"red","drawReason":null,"turns":11,"red":{"agent":"random","moves":6,"totalMs":0.019,"maxMs":0.005,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":5,"totalMs":0.248,"maxMs":0.052,"nodes":65,"searches":5,"deepSearches":0,"illegal":0}},{"id":"4:greedy:random:9:a","n":4,"seed":3942836941,"round":9,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"greedy","moves":8,"totalMs":0.29,"maxMs":0.049,"nodes":77,"searches":7,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":7,"totalMs":0.02,"maxMs":0.005,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:greedy:random:9:b","n":4,"seed":3942836941,"round":9,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"random","moves":8,"totalMs":0.02,"maxMs":0.005,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":7,"totalMs":0.282,"maxMs":0.043,"nodes":77,"searches":7,"deepSearches":0,"illegal":0}},{"id":"4:greedy:random:10:a","n":4,"seed":1374924490,"round":10,"result":"win","winner":"blue","drawReason":null,"turns":18,"red":{"agent":"greedy","moves":9,"totalMs":0.332,"maxMs":0.046,"nodes":91,"searches":9,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":9,"totalMs":0.026,"maxMs":0.005,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:greedy:random:10:b","n":4,"seed":1374924490,"round":10,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"random","moves":7,"totalMs":0.015,"maxMs":0.004,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":7,"totalMs":0.301,"maxMs":0.093,"nodes":78,"searches":6,"deepSearches":0,"illegal":0}},{"id":"4:greedy:random:11:a","n":4,"seed":300480153,"round":11,"result":"win","winner":"red","drawReason":null,"turns":13,"red":{"agent":"greedy","moves":7,"totalMs":0.255,"maxMs":0.048,"nodes":83,"searches":6,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":6,"totalMs":0.014,"maxMs":0.004,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:greedy:random:11:b","n":4,"seed":300480153,"round":11,"result":"win","winner":"blue","drawReason":null,"turns":12,"red":{"agent":"random","moves":6,"totalMs":0.012,"maxMs":0.003,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":6,"totalMs":0.24,"maxMs":0.055,"nodes":69,"searches":5,"deepSearches":0,"illegal":0}},{"id":"4:greedy:random:12:a","n":4,"seed":3887592603,"round":12,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"greedy","moves":9,"totalMs":0.343,"maxMs":0.049,"nodes":97,"searches":8,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":8,"totalMs":0.023,"maxMs":0.005,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:greedy:random:12:b","n":4,"seed":3887592603,"round":12,"result":"win","winner":"blue","drawReason":null,"turns":20,"red":{"agent":"random","moves":10,"totalMs":0.03,"maxMs":0.006,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":10,"totalMs":0.35,"maxMs":0.044,"nodes":87,"searches":9,"deepSearches":0,"illegal":0}},{"id":"4:greedy:random:13:a","n":4,"seed":3178405031,"round":13,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"greedy","moves":8,"totalMs":0.276,"maxMs":0.043,"nodes":83,"searches":7,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":7,"totalMs":0.017,"maxMs":0.004,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:greedy:random:13:b","n":4,"seed":3178405031,"round":13,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"random","moves":8,"totalMs":0.02,"maxMs":0.005,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":8,"totalMs":0.34,"maxMs":0.083,"nodes":77,"searches":7,"deepSearches":0,"illegal":0}},{"id":"4:greedy:random:14:a","n":4,"seed":1135482123,"round":14,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"greedy","moves":7,"totalMs":0.264,"maxMs":0.043,"nodes":77,"searches":7,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":7,"totalMs":0.018,"maxMs":0.004,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:greedy:random:14:b","n":4,"seed":1135482123,"round":14,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"random","moves":8,"totalMs":0.019,"maxMs":0.005,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":7,"totalMs":0.287,"maxMs":0.048,"nodes":81,"searches":7,"deepSearches":0,"illegal":0}},{"id":"4:greedy:random:15:a","n":4,"seed":4062417433,"round":15,"result":"win","winner":"red","drawReason":null,"turns":13,"red":{"agent":"greedy","moves":7,"totalMs":0.235,"maxMs":0.045,"nodes":77,"searches":6,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":6,"totalMs":0.012,"maxMs":0.003,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:greedy:random:15:b","n":4,"seed":4062417433,"round":15,"result":"win","winner":"blue","drawReason":null,"turns":12,"red":{"agent":"random","moves":6,"totalMs":0.011,"maxMs":0.004,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":6,"totalMs":0.196,"maxMs":0.044,"nodes":65,"searches":5,"deepSearches":0,"illegal":0}},{"id":"4:greedy:random:16:a","n":4,"seed":3001902720,"round":16,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"greedy","moves":9,"totalMs":0.334,"maxMs":0.067,"nodes":80,"searches":8,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":8,"totalMs":0.023,"maxMs":0.005,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:greedy:random:16:b","n":4,"seed":3001902720,"round":16,"result":"win","winner":"red","drawReason":null,"turns":19,"red":{"agent":"random","moves":10,"totalMs":0.03,"maxMs":0.006,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":9,"totalMs":0.347,"maxMs":0.045,"nodes":87,"searches":9,"deepSearches":0,"illegal":0}},{"id":"4:greedy:random:17:a","n":4,"seed":3879962572,"round":17,"result":"win","winner":"blue","drawReason":null,"turns":12,"red":{"agent":"greedy","moves":6,"totalMs":0.239,"maxMs":0.046,"nodes":81,"searches":6,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":6,"totalMs":0.013,"maxMs":0.003,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:greedy:random:17:b","n":4,"seed":3879962572,"round":17,"result":"win","winner":"blue","drawReason":null,"turns":8,"red":{"agent":"random","moves":4,"totalMs":0.005,"maxMs":0.002,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":4,"totalMs":0.121,"maxMs":0.041,"nodes":45,"searches":3,"deepSearches":0,"illegal":0}},{"id":"4:greedy:random:18:a","n":4,"seed":1652865246,"round":18,"result":"win","winner":"red","drawReason":null,"turns":11,"red":{"agent":"greedy","moves":6,"totalMs":0.199,"maxMs":0.045,"nodes":71,"searches":5,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":5,"totalMs":0.009,"maxMs":0.003,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:greedy:random:18:b","n":4,"seed":1652865246,"round":18,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"random","moves":8,"totalMs":0.019,"maxMs":0.004,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":8,"totalMs":0.282,"maxMs":0.046,"nodes":77,"searches":7,"deepSearches":0,"illegal":0}},{"id":"4:greedy:random:19:a","n":4,"seed":1569178180,"round":19,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"greedy","moves":8,"totalMs":0.284,"maxMs":0.046,"nodes":77,"searches":7,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":7,"totalMs":0.019,"maxMs":0.004,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"4:greedy:random:19:b","n":4,"seed":1569178180,"round":19,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"random","moves":9,"totalMs":0.024,"maxMs":0.005,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":8,"totalMs":0.349,"maxMs":0.082,"nodes":80,"searches":8,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d2:0:a","n":5,"seed":1606945800,"round":0,"result":"win","winner":"red","drawReason":null,"turns":23,"red":{"agent":"minimax-dynamic","moves":12,"totalMs":1.013,"maxMs":0.15,"nodes":160,"searches":10,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":11,"totalMs":9.869,"maxMs":1.466,"nodes":2300,"searches":10,"deepSearches":10,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d2:0:b","n":5,"seed":1606945800,"round":0,"result":"win","winner":"red","drawReason":null,"turns":31,"red":{"agent":"minimax-d2","moves":16,"totalMs":12.303,"maxMs":1.407,"nodes":2966,"searches":14,"deepSearches":14,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":15,"totalMs":1.229,"maxMs":0.107,"nodes":196,"searches":14,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d2:1:a","n":5,"seed":371807006,"round":1,"result":"win","winner":"blue","drawReason":null,"turns":30,"red":{"agent":"minimax-dynamic","moves":15,"totalMs":1.255,"maxMs":0.114,"nodes":204,"searches":14,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":15,"totalMs":12.908,"maxMs":1.726,"nodes":2688,"searches":13,"deepSearches":13,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d2:1:b","n":5,"seed":371807006,"round":1,"result":"win","winner":"red","drawReason":null,"turns":21,"red":{"agent":"minimax-d2","moves":11,"totalMs":11.231,"maxMs":1.962,"nodes":2553,"searches":9,"deepSearches":9,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":10,"totalMs":1.008,"maxMs":0.204,"nodes":144,"searches":9,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d2:2:a","n":5,"seed":1945461847,"round":2,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"minimax-dynamic","moves":7,"totalMs":0.615,"maxMs":0.165,"nodes":122,"searches":6,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":7,"totalMs":7.298,"maxMs":1.597,"nodes":1852,"searches":5,"deepSearches":5,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d2:2:b","n":5,"seed":1945461847,"round":2,"result":"win","winner":"red","drawReason":null,"turns":21,"red":{"agent":"minimax-d2","moves":11,"totalMs":9.657,"maxMs":1.529,"nodes":2553,"searches":9,"deepSearches":9,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":10,"totalMs":0.751,"maxMs":0.093,"nodes":144,"searches":9,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d2:3:a","n":5,"seed":1294273508,"round":3,"result":"win","winner":"red","drawReason":null,"turns":29,"red":{"agent":"minimax-dynamic","moves":15,"totalMs":1.234,"maxMs":0.191,"nodes":185,"searches":13,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":14,"totalMs":11.708,"maxMs":2.244,"nodes":2476,"searches":13,"deepSearches":13,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d2:3:b","n":5,"seed":1294273508,"round":3,"result":"win","winner":"blue","drawReason":null,"turns":22,"red":{"agent":"minimax-d2","moves":11,"totalMs":12.533,"maxMs":1.849,"nodes":2780,"searches":10,"deepSearches":10,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":11,"totalMs":0.983,"maxMs":0.177,"nodes":152,"searches":9,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d2:4:a","n":5,"seed":2986737568,"round":4,"result":"win","winner":"red","drawReason":null,"turns":19,"red":{"agent":"minimax-dynamic","moves":10,"totalMs":0.734,"maxMs":0.1,"nodes":144,"searches":8,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":9,"totalMs":9.113,"maxMs":1.45,"nodes":2224,"searches":8,"deepSearches":8,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d2:4:b","n":5,"seed":2986737568,"round":4,"result":"win","winner":"red","drawReason":null,"turns":27,"red":{"agent":"minimax-d2","moves":14,"totalMs":11.774,"maxMs":1.815,"nodes":2794,"searches":12,"deepSearches":12,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":13,"totalMs":1.03,"maxMs":0.1,"nodes":172,"searches":12,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d2:5:a","n":5,"seed":1761968949,"round":5,"result":"win","winner":"blue","drawReason":null,"turns":26,"red":{"agent":"minimax-dynamic","moves":13,"totalMs":1.054,"maxMs":0.127,"nodes":170,"searches":12,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":13,"totalMs":10.627,"maxMs":2.054,"nodes":2312,"searches":11,"deepSearches":11,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d2:5:b","n":5,"seed":1761968949,"round":5,"result":"win","winner":"blue","drawReason":null,"turns":24,"red":{"agent":"minimax-d2","moves":12,"totalMs":11.976,"maxMs":1.529,"nodes":2723,"searches":11,"deepSearches":11,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":12,"totalMs":1.221,"maxMs":0.274,"nodes":156,"searches":10,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d2:6:a","n":5,"seed":3256436148,"round":6,"result":"win","winner":"blue","drawReason":null,"turns":20,"red":{"agent":"minimax-dynamic","moves":10,"totalMs":0.962,"maxMs":0.216,"nodes":155,"searches":9,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":10,"totalMs":9.562,"maxMs":1.733,"nodes":2226,"searches":8,"deepSearches":8,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d2:6:b","n":5,"seed":3256436148,"round":6,"result":"win","winner":"blue","drawReason":null,"turns":24,"red":{"agent":"minimax-d2","moves":12,"totalMs":13.175,"maxMs":2.343,"nodes":2687,"searches":11,"deepSearches":11,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":12,"totalMs":1.118,"maxMs":0.249,"nodes":154,"searches":10,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d2:7:a","n":5,"seed":380151437,"round":7,"result":"win","winner":"red","drawReason":null,"turns":21,"red":{"agent":"minimax-dynamic","moves":11,"totalMs":0.876,"maxMs":0.13,"nodes":153,"searches":9,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":10,"totalMs":11.476,"maxMs":2.008,"nodes":2274,"searches":9,"deepSearches":9,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d2:7:b","n":5,"seed":380151437,"round":7,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"minimax-d2","moves":8,"totalMs":8.711,"maxMs":1.479,"nodes":2387,"searches":7,"deepSearches":7,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":8,"totalMs":0.594,"maxMs":0.155,"nodes":114,"searches":6,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d2:8:a","n":5,"seed":451582188,"round":8,"result":"win","winner":"red","drawReason":null,"turns":23,"red":{"agent":"minimax-dynamic","moves":12,"totalMs":0.893,"maxMs":0.097,"nodes":178,"searches":10,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":11,"totalMs":12.173,"maxMs":1.795,"nodes":2760,"searches":10,"deepSearches":10,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d2:8:b","n":5,"seed":451582188,"round":8,"result":"win","winner":"blue","drawReason":null,"turns":18,"red":{"agent":"minimax-d2","moves":9,"totalMs":9.857,"maxMs":1.7,"nodes":2488,"searches":8,"deepSearches":8,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":9,"totalMs":0.705,"maxMs":0.135,"nodes":126,"searches":7,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d2:9:a","n":5,"seed":3124163200,"round":9,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"minimax-dynamic","moves":8,"totalMs":0.681,"maxMs":0.178,"nodes":133,"searches":7,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":8,"totalMs":7.63,"maxMs":1.462,"nodes":2020,"searches":6,"deepSearches":6,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d2:9:b","n":5,"seed":3124163200,"round":9,"result":"win","winner":"blue","drawReason":null,"turns":18,"red":{"agent":"minimax-d2","moves":9,"totalMs":9.666,"maxMs":2.083,"nodes":2488,"searches":8,"deepSearches":8,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":9,"totalMs":0.707,"maxMs":0.132,"nodes":126,"searches":7,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d2:10:a","n":5,"seed":1683244991,"round":10,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"minimax-dynamic","moves":8,"totalMs":0.846,"maxMs":0.197,"nodes":133,"searches":7,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":8,"totalMs":7.885,"maxMs":1.403,"nodes":2020,"searches":6,"deepSearches":6,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d2:10:b","n":5,"seed":1683244991,"round":10,"result":"win","winner":"red","drawReason":null,"turns":19,"red":{"agent":"minimax-d2","moves":10,"totalMs":9.467,"maxMs":1.647,"nodes":2488,"searches":8,"deepSearches":8,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":9,"totalMs":0.789,"maxMs":0.199,"nodes":136,"searches":8,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d2:11:a","n":5,"seed":376514909,"round":11,"result":"win","winner":"blue","drawReason":null,"turns":18,"red":{"agent":"minimax-dynamic","moves":9,"totalMs":0.723,"maxMs":0.156,"nodes":144,"searches":8,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":9,"totalMs":8.624,"maxMs":1.435,"nodes":2142,"searches":7,"deepSearches":7,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d2:11:b","n":5,"seed":376514909,"round":11,"result":"win","winner":"blue","drawReason":null,"turns":18,"red":{"agent":"minimax-d2","moves":9,"totalMs":8.728,"maxMs":1.337,"nodes":2488,"searches":8,"deepSearches":8,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":9,"totalMs":0.611,"maxMs":0.093,"nodes":126,"searches":7,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d2:12:a","n":5,"seed":153818286,"round":12,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"minimax-dynamic","moves":9,"totalMs":0.583,"maxMs":0.092,"nodes":133,"searches":7,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":8,"totalMs":8.528,"maxMs":1.874,"nodes":2142,"searches":7,"deepSearches":7,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d2:12:b","n":5,"seed":153818286,"round":12,"result":"win","winner":"blue","drawReason":null,"turns":20,"red":{"agent":"minimax-d2","moves":10,"totalMs":9.395,"maxMs":1.413,"nodes":2553,"searches":9,"deepSearches":9,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":10,"totalMs":0.716,"maxMs":0.133,"nodes":136,"searches":8,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d2:13:a","n":5,"seed":783232238,"round":13,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"minimax-dynamic","moves":9,"totalMs":0.626,"maxMs":0.098,"nodes":135,"searches":7,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":8,"totalMs":8.973,"maxMs":1.604,"nodes":2250,"searches":7,"deepSearches":7,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d2:13:b","n":5,"seed":783232238,"round":13,"result":"win","winner":"red","drawReason":null,"turns":31,"red":{"agent":"minimax-d2","moves":16,"totalMs":12.081,"maxMs":1.561,"nodes":2850,"searches":14,"deepSearches":14,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":15,"totalMs":1.257,"maxMs":0.146,"nodes":184,"searches":14,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d2:14:a","n":5,"seed":1204692375,"round":14,"result":"win","winner":"red","drawReason":null,"turns":19,"red":{"agent":"minimax-dynamic","moves":10,"totalMs":0.876,"maxMs":0.214,"nodes":144,"searches":8,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":9,"totalMs":9.193,"maxMs":1.465,"nodes":2224,"searches":8,"deepSearches":8,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d2:14:b","n":5,"seed":1204692375,"round":14,"result":"win","winner":"blue","drawReason":null,"turns":26,"red":{"agent":"minimax-d2","moves":13,"totalMs":11.227,"maxMs":1.418,"nodes":2760,"searches":12,"deepSearches":12,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":13,"totalMs":0.944,"maxMs":0.101,"nodes":164,"searches":11,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d2:15:a","n":5,"seed":834880765,"round":15,"result":"win","winner":"blue","drawReason":null,"turns":18,"red":{"agent":"minimax-dynamic","moves":9,"totalMs":0.771,"maxMs":0.194,"nodes":144,"searches":8,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":9,"totalMs":8.551,"maxMs":1.802,"nodes":2142,"searches":7,"deepSearches":7,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d2:15:b","n":5,"seed":834880765,"round":15,"result":"win","winner":"red","drawReason":null,"turns":23,"red":{"agent":"minimax-d2","moves":12,"totalMs":10.177,"maxMs":1.387,"nodes":2592,"searches":10,"deepSearches":10,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":11,"totalMs":0.979,"maxMs":0.138,"nodes":152,"searches":10,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d2:16:a","n":5,"seed":3614914481,"round":16,"result":"win","winner":"blue","drawReason":null,"turns":28,"red":{"agent":"minimax-dynamic","moves":14,"totalMs":1.134,"maxMs":0.132,"nodes":193,"searches":13,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":14,"totalMs":11.708,"maxMs":1.714,"nodes":2602,"searches":12,"deepSearches":12,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d2:16:b","n":5,"seed":3614914481,"round":16,"result":"win","winner":"red","drawReason":null,"turns":23,"red":{"agent":"minimax-d2","moves":12,"totalMs":11.127,"maxMs":1.851,"nodes":2592,"searches":10,"deepSearches":10,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":11,"totalMs":0.925,"maxMs":0.133,"nodes":152,"searches":10,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d2:17:a","n":5,"seed":2136346945,"round":17,"result":"win","winner":"blue","drawReason":null,"turns":20,"red":{"agent":"minimax-dynamic","moves":10,"totalMs":0.957,"maxMs":0.222,"nodes":153,"searches":9,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":10,"totalMs":9.656,"maxMs":1.664,"nodes":2224,"searches":8,"deepSearches":8,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d2:17:b","n":5,"seed":2136346945,"round":17,"result":"win","winner":"red","drawReason":null,"turns":19,"red":{"agent":"minimax-d2","moves":10,"totalMs":9.635,"maxMs":1.537,"nodes":2490,"searches":8,"deepSearches":8,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":9,"totalMs":0.8,"maxMs":0.165,"nodes":138,"searches":8,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d2:18:a","n":5,"seed":2571492803,"round":18,"result":"win","winner":"blue","drawReason":null,"turns":18,"red":{"agent":"minimax-dynamic","moves":9,"totalMs":0.838,"maxMs":0.137,"nodes":144,"searches":8,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":9,"totalMs":9.248,"maxMs":1.702,"nodes":2142,"searches":7,"deepSearches":7,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d2:18:b","n":5,"seed":2571492803,"round":18,"result":"win","winner":"blue","drawReason":null,"turns":28,"red":{"agent":"minimax-d2","moves":14,"totalMs":10.185,"maxMs":1.348,"nodes":2665,"searches":13,"deepSearches":13,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":14,"totalMs":1.021,"maxMs":0.1,"nodes":170,"searches":12,"deepSearches":1,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d2:19:a","n":5,"seed":3882748089,"round":19,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"minimax-dynamic","moves":8,"totalMs":0.807,"maxMs":0.209,"nodes":133,"searches":7,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":8,"totalMs":8.232,"maxMs":2.303,"nodes":2020,"searches":6,"deepSearches":6,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d2:19:b","n":5,"seed":3882748089,"round":19,"result":"win","winner":"blue","drawReason":null,"turns":28,"red":{"agent":"minimax-d2","moves":14,"totalMs":12.46,"maxMs":1.612,"nodes":2825,"searches":13,"deepSearches":13,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":14,"totalMs":1.149,"maxMs":0.199,"nodes":174,"searches":12,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d3:0:a","n":5,"seed":61641387,"round":0,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"minimax-dynamic","moves":7,"totalMs":0.619,"maxMs":0.137,"nodes":120,"searches":6,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":7,"totalMs":130.601,"maxMs":32.23,"nodes":33138,"searches":5,"deepSearches":5,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d3:0:b","n":5,"seed":61641387,"round":0,"result":"win","winner":"red","drawReason":null,"turns":25,"red":{"agent":"minimax-d3","moves":13,"totalMs":193.097,"maxMs":37.15,"nodes":44025,"searches":11,"deepSearches":11,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":12,"totalMs":1.334,"maxMs":0.246,"nodes":158,"searches":11,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d3:1:a","n":5,"seed":800081749,"round":1,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"minimax-dynamic","moves":9,"totalMs":0.886,"maxMs":0.246,"nodes":133,"searches":7,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":8,"totalMs":141.271,"maxMs":33.949,"nodes":34865,"searches":7,"deepSearches":7,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d3:1:b","n":5,"seed":800081749,"round":1,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"minimax-d3","moves":7,"totalMs":151.245,"maxMs":31.462,"nodes":40626,"searches":6,"deepSearches":6,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":7,"totalMs":0.554,"maxMs":0.137,"nodes":100,"searches":5,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d3:2:a","n":5,"seed":825180,"round":2,"result":"win","winner":"blue","drawReason":null,"turns":24,"red":{"agent":"minimax-dynamic","moves":12,"totalMs":1.052,"maxMs":0.122,"nodes":165,"searches":11,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":12,"totalMs":147.12,"maxMs":31.067,"nodes":37080,"searches":10,"deepSearches":10,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d3:2:b","n":5,"seed":825180,"round":2,"result":"win","winner":"red","drawReason":null,"turns":25,"red":{"agent":"minimax-d3","moves":13,"totalMs":190.089,"maxMs":31.56,"nodes":47469,"searches":11,"deepSearches":11,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":12,"totalMs":1.311,"maxMs":0.229,"nodes":170,"searches":11,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d3:3:a","n":5,"seed":2329563330,"round":3,"result":"win","winner":"blue","drawReason":null,"turns":26,"red":{"agent":"minimax-dynamic","moves":13,"totalMs":1.325,"maxMs":0.179,"nodes":182,"searches":12,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":13,"totalMs":172.763,"maxMs":36.065,"nodes":39106,"searches":11,"deepSearches":11,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d3:3:b","n":5,"seed":2329563330,"round":3,"result":"win","winner":"blue","drawReason":null,"turns":26,"red":{"agent":"minimax-d3","moves":13,"totalMs":165.807,"maxMs":32.214,"nodes":43896,"searches":12,"deepSearches":12,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":13,"totalMs":1.052,"maxMs":0.143,"nodes":156,"searches":11,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d3:4:a","n":5,"seed":539275163,"round":4,"result":"win","winner":"blue","drawReason":null,"turns":24,"red":{"agent":"minimax-dynamic","moves":12,"totalMs":1.199,"maxMs":0.2,"nodes":175,"searches":11,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":12,"totalMs":160.056,"maxMs":31.055,"nodes":38994,"searches":10,"deepSearches":10,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d3:4:b","n":5,"seed":539275163,"round":4,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"minimax-d3","moves":8,"totalMs":159.857,"maxMs":32.262,"nodes":42875,"searches":7,"deepSearches":7,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":8,"totalMs":0.76,"maxMs":0.246,"nodes":114,"searches":6,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d3:5:a","n":5,"seed":376047287,"round":5,"result":"win","winner":"blue","drawReason":null,"turns":12,"red":{"agent":"minimax-dynamic","moves":6,"totalMs":0.491,"maxMs":0.13,"nodes":107,"searches":5,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":6,"totalMs":108.538,"maxMs":32.679,"nodes":30265,"searches":4,"deepSearches":4,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d3:5:b","n":5,"seed":376047287,"round":5,"result":"win","winner":"blue","drawReason":null,"turns":28,"red":{"agent":"minimax-d3","moves":14,"totalMs":166.907,"maxMs":31.256,"nodes":44334,"searches":13,"deepSearches":13,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":14,"totalMs":1.177,"maxMs":0.125,"nodes":170,"searches":12,"deepSearches":1,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d3:6:a","n":5,"seed":1007935568,"round":6,"result":"win","winner":"blue","drawReason":null,"turns":12,"red":{"agent":"minimax-dynamic","moves":6,"totalMs":0.53,"maxMs":0.135,"nodes":105,"searches":5,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":6,"totalMs":117.695,"maxMs":39.257,"nodes":30176,"searches":4,"deepSearches":4,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d3:6:b","n":5,"seed":1007935568,"round":6,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"minimax-d3","moves":8,"totalMs":154.879,"maxMs":34.41,"nodes":40972,"searches":6,"deepSearches":6,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":7,"totalMs":0.635,"maxMs":0.12,"nodes":114,"searches":6,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d3:7:a","n":5,"seed":3123620197,"round":7,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"minimax-dynamic","moves":7,"totalMs":0.606,"maxMs":0.119,"nodes":120,"searches":6,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":7,"totalMs":128.972,"maxMs":31.003,"nodes":33138,"searches":5,"deepSearches":5,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d3:7:b","n":5,"seed":3123620197,"round":7,"result":"win","winner":"blue","drawReason":null,"turns":28,"red":{"agent":"minimax-d3","moves":14,"totalMs":187.337,"maxMs":33.037,"nodes":46883,"searches":13,"deepSearches":13,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":14,"totalMs":1.428,"maxMs":0.227,"nodes":174,"searches":12,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d3:8:a","n":5,"seed":12693131,"round":8,"result":"win","winner":"blue","drawReason":null,"turns":24,"red":{"agent":"minimax-dynamic","moves":12,"totalMs":1.121,"maxMs":0.202,"nodes":165,"searches":11,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":12,"totalMs":144.602,"maxMs":30.497,"nodes":37132,"searches":10,"deepSearches":10,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d3:8:b","n":5,"seed":12693131,"round":8,"result":"win","winner":"red","drawReason":null,"turns":23,"red":{"agent":"minimax-d3","moves":12,"totalMs":170.196,"maxMs":31.293,"nodes":44482,"searches":10,"deepSearches":10,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":11,"totalMs":1.118,"maxMs":0.165,"nodes":158,"searches":10,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d3:9:a","n":5,"seed":142225492,"round":9,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"minimax-dynamic","moves":8,"totalMs":0.649,"maxMs":0.146,"nodes":120,"searches":6,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":7,"totalMs":124.367,"maxMs":30.417,"nodes":33661,"searches":6,"deepSearches":6,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d3:9:b","n":5,"seed":142225492,"round":9,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"minimax-d3","moves":9,"totalMs":152.547,"maxMs":32.65,"nodes":42449,"searches":7,"deepSearches":7,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":8,"totalMs":0.712,"maxMs":0.121,"nodes":126,"searches":7,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d3:10:a","n":5,"seed":1031454277,"round":10,"result":"win","winner":"blue","drawReason":null,"turns":24,"red":{"agent":"minimax-dynamic","moves":12,"totalMs":1.255,"maxMs":0.247,"nodes":167,"searches":11,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":12,"totalMs":157.703,"maxMs":31.273,"nodes":37154,"searches":10,"deepSearches":10,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d3:10:b","n":5,"seed":1031454277,"round":10,"result":"win","winner":"blue","drawReason":null,"turns":30,"red":{"agent":"minimax-d3","moves":15,"totalMs":253.601,"maxMs":60.856,"nodes":49199,"searches":14,"deepSearches":14,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":15,"totalMs":1.515,"maxMs":0.235,"nodes":190,"searches":13,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d3:11:a","n":5,"seed":889105609,"round":11,"result":"win","winner":"blue","drawReason":null,"turns":22,"red":{"agent":"minimax-dynamic","moves":11,"totalMs":0.906,"maxMs":0.109,"nodes":162,"searches":10,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":11,"totalMs":143.104,"maxMs":31.07,"nodes":36991,"searches":9,"deepSearches":9,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d3:11:b","n":5,"seed":889105609,"round":11,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"minimax-d3","moves":8,"totalMs":157.767,"maxMs":31.202,"nodes":42177,"searches":7,"deepSearches":7,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":8,"totalMs":0.791,"maxMs":0.247,"nodes":114,"searches":6,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d3:12:a","n":5,"seed":2168545147,"round":12,"result":"win","winner":"blue","drawReason":null,"turns":18,"red":{"agent":"minimax-dynamic","moves":9,"totalMs":0.762,"maxMs":0.11,"nodes":146,"searches":8,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":9,"totalMs":139.76,"maxMs":31.71,"nodes":36234,"searches":7,"deepSearches":7,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d3:12:b","n":5,"seed":2168545147,"round":12,"result":"win","winner":"blue","drawReason":null,"turns":22,"red":{"agent":"minimax-d3","moves":11,"totalMs":168.54,"maxMs":34.889,"nodes":43782,"searches":10,"deepSearches":10,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":11,"totalMs":0.965,"maxMs":0.167,"nodes":144,"searches":9,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d3:13:a","n":5,"seed":1704787389,"round":13,"result":"win","winner":"blue","drawReason":null,"turns":20,"red":{"agent":"minimax-dynamic","moves":10,"totalMs":0.916,"maxMs":0.141,"nodes":157,"searches":9,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":10,"totalMs":146.439,"maxMs":30.062,"nodes":37407,"searches":8,"deepSearches":8,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d3:13:b","n":5,"seed":1704787389,"round":13,"result":"win","winner":"red","drawReason":null,"turns":23,"red":{"agent":"minimax-d3","moves":12,"totalMs":162.012,"maxMs":31.937,"nodes":43806,"searches":10,"deepSearches":10,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":11,"totalMs":1.199,"maxMs":0.243,"nodes":150,"searches":10,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d3:14:a","n":5,"seed":922382284,"round":14,"result":"win","winner":"blue","drawReason":null,"turns":20,"red":{"agent":"minimax-dynamic","moves":10,"totalMs":0.911,"maxMs":0.112,"nodes":159,"searches":9,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":10,"totalMs":157.864,"maxMs":31.305,"nodes":38132,"searches":8,"deepSearches":8,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d3:14:b","n":5,"seed":922382284,"round":14,"result":"win","winner":"red","drawReason":null,"turns":27,"red":{"agent":"minimax-d3","moves":14,"totalMs":176.186,"maxMs":32.589,"nodes":44694,"searches":12,"deepSearches":12,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":13,"totalMs":1.183,"maxMs":0.123,"nodes":168,"searches":12,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d3:15:a","n":5,"seed":2745791285,"round":15,"result":"win","winner":"blue","drawReason":null,"turns":20,"red":{"agent":"minimax-dynamic","moves":10,"totalMs":0.939,"maxMs":0.134,"nodes":155,"searches":9,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":10,"totalMs":146.516,"maxMs":31.132,"nodes":36776,"searches":8,"deepSearches":8,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d3:15:b","n":5,"seed":2745791285,"round":15,"result":"win","winner":"red","drawReason":null,"turns":23,"red":{"agent":"minimax-d3","moves":12,"totalMs":158.918,"maxMs":31.113,"nodes":43848,"searches":10,"deepSearches":10,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":11,"totalMs":0.995,"maxMs":0.149,"nodes":152,"searches":10,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d3:16:a","n":5,"seed":1556136033,"round":16,"result":"win","winner":"blue","drawReason":null,"turns":24,"red":{"agent":"minimax-dynamic","moves":12,"totalMs":1.108,"maxMs":0.188,"nodes":165,"searches":11,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":12,"totalMs":148.241,"maxMs":32.187,"nodes":37109,"searches":10,"deepSearches":10,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d3:16:b","n":5,"seed":1556136033,"round":16,"result":"win","winner":"red","drawReason":null,"turns":21,"red":{"agent":"minimax-d3","moves":11,"totalMs":159.169,"maxMs":32.176,"nodes":43708,"searches":9,"deepSearches":9,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":10,"totalMs":0.866,"maxMs":0.105,"nodes":144,"searches":9,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d3:17:a","n":5,"seed":2922342788,"round":17,"result":"win","winner":"blue","drawReason":null,"turns":26,"red":{"agent":"minimax-dynamic","moves":13,"totalMs":1.124,"maxMs":0.173,"nodes":170,"searches":12,"deepSearches":1,"illegal":0},"blue":{"agent":"minimax-d3","moves":13,"totalMs":148.02,"maxMs":30.677,"nodes":37138,"searches":11,"deepSearches":11,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d3:17:b","n":5,"seed":2922342788,"round":17,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"minimax-d3","moves":9,"totalMs":161.836,"maxMs":31.275,"nodes":43478,"searches":7,"deepSearches":7,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":8,"totalMs":0.836,"maxMs":0.182,"nodes":130,"searches":7,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d3:18:a","n":5,"seed":2680180626,"round":18,"result":"win","winner":"blue","drawReason":null,"turns":22,"red":{"agent":"minimax-dynamic","moves":11,"totalMs":1.046,"maxMs":0.119,"nodes":166,"searches":10,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":11,"totalMs":157.973,"maxMs":32.983,"nodes":37982,"searches":9,"deepSearches":9,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d3:18:b","n":5,"seed":2680180626,"round":18,"result":"win","winner":"red","drawReason":null,"turns":23,"red":{"agent":"minimax-d3","moves":12,"totalMs":166.638,"maxMs":31.164,"nodes":43832,"searches":10,"deepSearches":10,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":11,"totalMs":1.159,"maxMs":0.231,"nodes":152,"searches":10,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d3:19:a","n":5,"seed":3424242822,"round":19,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"minimax-dynamic","moves":8,"totalMs":0.853,"maxMs":0.166,"nodes":135,"searches":7,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":8,"totalMs":141.765,"maxMs":35.041,"nodes":35121,"searches":6,"deepSearches":6,"illegal":0}},{"id":"5:minimax-dynamic:minimax-d3:19:b","n":5,"seed":3424242822,"round":19,"result":"win","winner":"blue","drawReason":null,"turns":24,"red":{"agent":"minimax-d3","moves":12,"totalMs":163.852,"maxMs":31.299,"nodes":43857,"searches":11,"deepSearches":11,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":12,"totalMs":1.102,"maxMs":0.156,"nodes":150,"searches":10,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:greedy:0:a","n":5,"seed":2360984532,"round":0,"result":"win","winner":"blue","drawReason":null,"turns":26,"red":{"agent":"minimax-dynamic","moves":13,"totalMs":0.976,"maxMs":0.094,"nodes":176,"searches":12,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":13,"totalMs":1.087,"maxMs":0.17,"nodes":188,"searches":12,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:greedy:0:b","n":5,"seed":2360984532,"round":0,"result":"win","winner":"blue","drawReason":null,"turns":20,"red":{"agent":"greedy","moves":10,"totalMs":0.857,"maxMs":0.096,"nodes":177,"searches":10,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":10,"totalMs":0.708,"maxMs":0.097,"nodes":134,"searches":8,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:greedy:1:a","n":5,"seed":336190782,"round":1,"result":"win","winner":"red","drawReason":null,"turns":21,"red":{"agent":"minimax-dynamic","moves":11,"totalMs":0.908,"maxMs":0.167,"nodes":153,"searches":9,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":10,"totalMs":0.938,"maxMs":0.133,"nodes":170,"searches":10,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:greedy:1:b","n":5,"seed":336190782,"round":1,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"greedy","moves":8,"totalMs":0.612,"maxMs":0.108,"nodes":139,"searches":7,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":7,"totalMs":0.58,"maxMs":0.115,"nodes":110,"searches":6,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:greedy:2:a","n":5,"seed":1915697798,"round":2,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"minimax-dynamic","moves":8,"totalMs":0.499,"maxMs":0.099,"nodes":122,"searches":6,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":7,"totalMs":0.572,"maxMs":0.094,"nodes":144,"searches":7,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:greedy:2:b","n":5,"seed":1915697798,"round":2,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"greedy","moves":8,"totalMs":0.705,"maxMs":0.146,"nodes":151,"searches":8,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":8,"totalMs":0.548,"maxMs":0.1,"nodes":108,"searches":6,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:greedy:3:a","n":5,"seed":637054772,"round":3,"result":"win","winner":"red","drawReason":null,"turns":21,"red":{"agent":"minimax-dynamic","moves":11,"totalMs":0.757,"maxMs":0.095,"nodes":153,"searches":9,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":10,"totalMs":0.814,"maxMs":0.099,"nodes":170,"searches":10,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:greedy:3:b","n":5,"seed":637054772,"round":3,"result":"win","winner":"blue","drawReason":null,"turns":24,"red":{"agent":"greedy","moves":12,"totalMs":1.036,"maxMs":0.157,"nodes":181,"searches":12,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":12,"totalMs":0.935,"maxMs":0.166,"nodes":140,"searches":10,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:greedy:4:a","n":5,"seed":1726377628,"round":4,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"minimax-dynamic","moves":7,"totalMs":0.523,"maxMs":0.107,"nodes":120,"searches":6,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":7,"totalMs":0.554,"maxMs":0.135,"nodes":126,"searches":6,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:greedy:4:b","n":5,"seed":1726377628,"round":4,"result":"win","winner":"red","drawReason":null,"turns":27,"red":{"agent":"greedy","moves":14,"totalMs":1.337,"maxMs":0.194,"nodes":193,"searches":13,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":13,"totalMs":1.135,"maxMs":0.151,"nodes":158,"searches":12,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:greedy:5:a","n":5,"seed":1255986265,"round":5,"result":"win","winner":"blue","drawReason":null,"turns":20,"red":{"agent":"minimax-dynamic","moves":10,"totalMs":0.746,"maxMs":0.094,"nodes":153,"searches":9,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":10,"totalMs":0.778,"maxMs":0.096,"nodes":162,"searches":9,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:greedy:5:b","n":5,"seed":1255986265,"round":5,"result":"win","winner":"red","drawReason":null,"turns":19,"red":{"agent":"greedy","moves":10,"totalMs":0.75,"maxMs":0.098,"nodes":161,"searches":9,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":9,"totalMs":0.775,"maxMs":0.164,"nodes":130,"searches":8,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:greedy:6:a","n":5,"seed":4231196856,"round":6,"result":"win","winner":"blue","drawReason":null,"turns":18,"red":{"agent":"minimax-dynamic","moves":9,"totalMs":0.711,"maxMs":0.101,"nodes":150,"searches":8,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":9,"totalMs":0.701,"maxMs":0.104,"nodes":156,"searches":8,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:greedy:6:b","n":5,"seed":4231196856,"round":6,"result":"win","winner":"red","drawReason":null,"turns":19,"red":{"agent":"greedy","moves":10,"totalMs":0.766,"maxMs":0.099,"nodes":161,"searches":9,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":9,"totalMs":0.703,"maxMs":0.098,"nodes":128,"searches":8,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:greedy:7:a","n":5,"seed":3326570832,"round":7,"result":"win","winner":"red","drawReason":null,"turns":25,"red":{"agent":"minimax-dynamic","moves":13,"totalMs":0.947,"maxMs":0.107,"nodes":167,"searches":11,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":12,"totalMs":1.046,"maxMs":0.122,"nodes":184,"searches":12,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:greedy:7:b","n":5,"seed":3326570832,"round":7,"result":"win","winner":"red","drawReason":null,"turns":23,"red":{"agent":"greedy","moves":12,"totalMs":0.916,"maxMs":0.095,"nodes":187,"searches":11,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":11,"totalMs":0.943,"maxMs":0.144,"nodes":156,"searches":10,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:greedy:8:a","n":5,"seed":2949321839,"round":8,"result":"win","winner":"blue","drawReason":null,"turns":20,"red":{"agent":"minimax-dynamic","moves":10,"totalMs":0.856,"maxMs":0.175,"nodes":157,"searches":9,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":10,"totalMs":0.758,"maxMs":0.095,"nodes":166,"searches":9,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:greedy:8:b","n":5,"seed":2949321839,"round":8,"result":"win","winner":"blue","drawReason":null,"turns":18,"red":{"agent":"greedy","moves":9,"totalMs":0.857,"maxMs":0.158,"nodes":163,"searches":9,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":9,"totalMs":0.646,"maxMs":0.099,"nodes":119,"searches":7,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:greedy:9:a","n":5,"seed":603062061,"round":9,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"minimax-dynamic","moves":9,"totalMs":0.646,"maxMs":0.118,"nodes":133,"searches":7,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":8,"totalMs":0.872,"maxMs":0.176,"nodes":152,"searches":8,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:greedy:9:b","n":5,"seed":603062061,"round":9,"result":"win","winner":"red","drawReason":null,"turns":27,"red":{"agent":"greedy","moves":14,"totalMs":1.066,"maxMs":0.098,"nodes":189,"searches":13,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":13,"totalMs":1.096,"maxMs":0.166,"nodes":156,"searches":12,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:greedy:10:a","n":5,"seed":2608070357,"round":10,"result":"win","winner":"blue","drawReason":null,"turns":18,"red":{"agent":"minimax-dynamic","moves":9,"totalMs":0.658,"maxMs":0.09,"nodes":146,"searches":8,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":9,"totalMs":0.667,"maxMs":0.095,"nodes":152,"searches":8,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:greedy:10:b","n":5,"seed":2608070357,"round":10,"result":"win","winner":"red","drawReason":null,"turns":29,"red":{"agent":"greedy","moves":15,"totalMs":1.183,"maxMs":0.145,"nodes":209,"searches":14,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":14,"totalMs":1.083,"maxMs":0.094,"nodes":175,"searches":13,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:greedy:11:a","n":5,"seed":246169904,"round":11,"result":"win","winner":"blue","drawReason":null,"turns":18,"red":{"agent":"minimax-dynamic","moves":9,"totalMs":0.694,"maxMs":0.099,"nodes":144,"searches":8,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":9,"totalMs":0.704,"maxMs":0.103,"nodes":152,"searches":8,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:greedy:11:b","n":5,"seed":246169904,"round":11,"result":"win","winner":"blue","drawReason":null,"turns":18,"red":{"agent":"greedy","moves":9,"totalMs":0.851,"maxMs":0.185,"nodes":161,"searches":9,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":9,"totalMs":0.715,"maxMs":0.163,"nodes":119,"searches":7,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:greedy:12:a","n":5,"seed":1241848127,"round":12,"result":"win","winner":"red","drawReason":null,"turns":23,"red":{"agent":"minimax-dynamic","moves":12,"totalMs":0.918,"maxMs":0.13,"nodes":160,"searches":10,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":11,"totalMs":0.92,"maxMs":0.093,"nodes":176,"searches":11,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:greedy:12:b","n":5,"seed":1241848127,"round":12,"result":"win","winner":"red","drawReason":null,"turns":23,"red":{"agent":"greedy","moves":12,"totalMs":0.891,"maxMs":0.097,"nodes":175,"searches":11,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":11,"totalMs":0.888,"maxMs":0.126,"nodes":140,"searches":10,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:greedy:13:a","n":5,"seed":1556351690,"round":13,"result":"win","winner":"red","drawReason":null,"turns":27,"red":{"agent":"minimax-dynamic","moves":14,"totalMs":1.095,"maxMs":0.111,"nodes":190,"searches":12,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":13,"totalMs":1.202,"maxMs":0.138,"nodes":206,"searches":13,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:greedy:13:b","n":5,"seed":1556351690,"round":13,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"greedy","moves":7,"totalMs":0.664,"maxMs":0.143,"nodes":139,"searches":7,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":7,"totalMs":0.659,"maxMs":0.264,"nodes":95,"searches":5,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:greedy:14:a","n":5,"seed":2514874144,"round":14,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"minimax-dynamic","moves":8,"totalMs":0.578,"maxMs":0.092,"nodes":133,"searches":7,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":8,"totalMs":0.593,"maxMs":0.094,"nodes":140,"searches":7,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:greedy:14:b","n":5,"seed":2514874144,"round":14,"result":"win","winner":"red","drawReason":null,"turns":23,"red":{"agent":"greedy","moves":12,"totalMs":0.987,"maxMs":0.185,"nodes":175,"searches":11,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":11,"totalMs":0.852,"maxMs":0.098,"nodes":140,"searches":10,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:greedy:15:a","n":5,"seed":4172979844,"round":15,"result":"win","winner":"blue","drawReason":null,"turns":20,"red":{"agent":"minimax-dynamic","moves":10,"totalMs":0.888,"maxMs":0.174,"nodes":159,"searches":9,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":10,"totalMs":0.812,"maxMs":0.105,"nodes":166,"searches":9,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:greedy:15:b","n":5,"seed":4172979844,"round":15,"result":"win","winner":"red","drawReason":null,"turns":23,"red":{"agent":"greedy","moves":12,"totalMs":0.942,"maxMs":0.102,"nodes":181,"searches":11,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":11,"totalMs":0.854,"maxMs":0.092,"nodes":148,"searches":10,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:greedy:16:a","n":5,"seed":4252162739,"round":16,"result":"win","winner":"red","drawReason":null,"turns":27,"red":{"agent":"minimax-dynamic","moves":14,"totalMs":1.047,"maxMs":0.142,"nodes":178,"searches":12,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":13,"totalMs":1.032,"maxMs":0.091,"nodes":192,"searches":13,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:greedy:16:b","n":5,"seed":4252162739,"round":16,"result":"win","winner":"red","drawReason":null,"turns":23,"red":{"agent":"greedy","moves":12,"totalMs":0.952,"maxMs":0.143,"nodes":181,"searches":11,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":11,"totalMs":0.847,"maxMs":0.09,"nodes":150,"searches":10,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:greedy:17:a","n":5,"seed":3067864896,"round":17,"result":"win","winner":"blue","drawReason":null,"turns":18,"red":{"agent":"minimax-dynamic","moves":9,"totalMs":0.66,"maxMs":0.092,"nodes":148,"searches":8,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":9,"totalMs":0.677,"maxMs":0.096,"nodes":154,"searches":8,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:greedy:17:b","n":5,"seed":3067864896,"round":17,"result":"win","winner":"red","drawReason":null,"turns":23,"red":{"agent":"greedy","moves":12,"totalMs":0.934,"maxMs":0.121,"nodes":175,"searches":11,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":11,"totalMs":0.829,"maxMs":0.091,"nodes":142,"searches":10,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:greedy:18:a","n":5,"seed":2796316090,"round":18,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"minimax-dynamic","moves":9,"totalMs":0.613,"maxMs":0.107,"nodes":133,"searches":7,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":8,"totalMs":0.672,"maxMs":0.097,"nodes":152,"searches":8,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:greedy:18:b","n":5,"seed":2796316090,"round":18,"result":"win","winner":"red","drawReason":null,"turns":19,"red":{"agent":"greedy","moves":10,"totalMs":1.065,"maxMs":0.24,"nodes":169,"searches":9,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":9,"totalMs":1.035,"maxMs":0.213,"nodes":136,"searches":8,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:greedy:19:a","n":5,"seed":3131961485,"round":19,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"minimax-dynamic","moves":9,"totalMs":0.757,"maxMs":0.196,"nodes":135,"searches":7,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":8,"totalMs":0.761,"maxMs":0.135,"nodes":156,"searches":8,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:greedy:19:b","n":5,"seed":3131961485,"round":19,"result":"win","winner":"red","drawReason":null,"turns":25,"red":{"agent":"greedy","moves":13,"totalMs":0.974,"maxMs":0.092,"nodes":191,"searches":12,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":12,"totalMs":0.942,"maxMs":0.093,"nodes":157,"searches":11,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:random:0:a","n":5,"seed":1151323532,"round":0,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"minimax-dynamic","moves":8,"totalMs":0.711,"maxMs":0.164,"nodes":130,"searches":7,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":8,"totalMs":0.077,"maxMs":0.031,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:random:0:b","n":5,"seed":1151323532,"round":0,"result":"win","winner":"blue","drawReason":null,"turns":26,"red":{"agent":"random","moves":13,"totalMs":0.142,"maxMs":0.064,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":13,"totalMs":0.997,"maxMs":0.115,"nodes":161,"searches":11,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:random:1:a","n":5,"seed":2140195228,"round":1,"result":"win","winner":"red","drawReason":null,"turns":23,"red":{"agent":"minimax-dynamic","moves":12,"totalMs":0.957,"maxMs":0.11,"nodes":180,"searches":10,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":11,"totalMs":0.058,"maxMs":0.009,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:random:1:b","n":5,"seed":2140195228,"round":1,"result":"win","winner":"blue","drawReason":null,"turns":22,"red":{"agent":"random","moves":11,"totalMs":0.059,"maxMs":0.008,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":11,"totalMs":0.805,"maxMs":0.102,"nodes":149,"searches":9,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:random:2:a","n":5,"seed":899007921,"round":2,"result":"win","winner":"blue","drawReason":null,"turns":32,"red":{"agent":"minimax-dynamic","moves":16,"totalMs":1.5,"maxMs":0.226,"nodes":215,"searches":15,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":16,"totalMs":0.123,"maxMs":0.017,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:random:2:b","n":5,"seed":899007921,"round":2,"result":"win","winner":"blue","drawReason":null,"turns":24,"red":{"agent":"random","moves":12,"totalMs":0.072,"maxMs":0.009,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":12,"totalMs":0.93,"maxMs":0.097,"nodes":164,"searches":10,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:random:3:a","n":5,"seed":1707955630,"round":3,"result":"win","winner":"red","drawReason":null,"turns":21,"red":{"agent":"minimax-dynamic","moves":11,"totalMs":0.86,"maxMs":0.107,"nodes":168,"searches":9,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":10,"totalMs":0.055,"maxMs":0.009,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:random:3:b","n":5,"seed":1707955630,"round":3,"result":"win","winner":"blue","drawReason":null,"turns":24,"red":{"agent":"random","moves":12,"totalMs":0.066,"maxMs":0.01,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":12,"totalMs":0.979,"maxMs":0.162,"nodes":156,"searches":10,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:random:4:a","n":5,"seed":1198099845,"round":4,"result":"win","winner":"red","drawReason":null,"turns":23,"red":{"agent":"minimax-dynamic","moves":12,"totalMs":0.862,"maxMs":0.102,"nodes":179,"searches":10,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":11,"totalMs":0.056,"maxMs":0.008,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:random:4:b","n":5,"seed":1198099845,"round":4,"result":"win","winner":"blue","drawReason":null,"turns":26,"red":{"agent":"random","moves":13,"totalMs":0.135,"maxMs":0.033,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":13,"totalMs":1.394,"maxMs":0.225,"nodes":165,"searches":11,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:random:5:a","n":5,"seed":2298919643,"round":5,"result":"win","winner":"red","drawReason":null,"turns":27,"red":{"agent":"minimax-dynamic","moves":14,"totalMs":1.222,"maxMs":0.204,"nodes":174,"searches":12,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":13,"totalMs":0.067,"maxMs":0.008,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:random:5:b","n":5,"seed":2298919643,"round":5,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"random","moves":8,"totalMs":0.029,"maxMs":0.007,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":8,"totalMs":0.545,"maxMs":0.093,"nodes":110,"searches":6,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:random:6:a","n":5,"seed":2741787223,"round":6,"result":"win","winner":"red","drawReason":null,"turns":21,"red":{"agent":"minimax-dynamic","moves":11,"totalMs":0.912,"maxMs":0.133,"nodes":160,"searches":9,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":10,"totalMs":0.048,"maxMs":0.009,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:random:6:b","n":5,"seed":2741787223,"round":6,"result":"win","winner":"red","drawReason":null,"turns":31,"red":{"agent":"random","moves":16,"totalMs":0.094,"maxMs":0.01,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":15,"totalMs":1.432,"maxMs":0.18,"nodes":202,"searches":14,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:random:7:a","n":5,"seed":873288982,"round":7,"result":"win","winner":"blue","drawReason":null,"turns":20,"red":{"agent":"minimax-dynamic","moves":10,"totalMs":0.806,"maxMs":0.106,"nodes":163,"searches":9,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":10,"totalMs":0.037,"maxMs":0.006,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:random:7:b","n":5,"seed":873288982,"round":7,"result":"win","winner":"blue","drawReason":null,"turns":24,"red":{"agent":"random","moves":12,"totalMs":0.062,"maxMs":0.016,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":12,"totalMs":0.943,"maxMs":0.1,"nodes":168,"searches":10,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:random:8:a","n":5,"seed":268178456,"round":8,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"minimax-dynamic","moves":9,"totalMs":0.691,"maxMs":0.119,"nodes":134,"searches":7,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":8,"totalMs":0.029,"maxMs":0.006,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:random:8:b","n":5,"seed":268178456,"round":8,"result":"win","winner":"blue","drawReason":null,"turns":24,"red":{"agent":"random","moves":12,"totalMs":0.055,"maxMs":0.008,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":12,"totalMs":1.051,"maxMs":0.176,"nodes":154,"searches":10,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:random:9:a","n":5,"seed":1228001398,"round":9,"result":"win","winner":"blue","drawReason":null,"turns":26,"red":{"agent":"minimax-dynamic","moves":13,"totalMs":1.083,"maxMs":0.111,"nodes":200,"searches":12,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":13,"totalMs":0.065,"maxMs":0.009,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:random:9:b","n":5,"seed":1228001398,"round":9,"result":"win","winner":"blue","drawReason":null,"turns":20,"red":{"agent":"random","moves":10,"totalMs":0.038,"maxMs":0.006,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":10,"totalMs":0.711,"maxMs":0.092,"nodes":142,"searches":8,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:random:10:a","n":5,"seed":1562513779,"round":10,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"minimax-dynamic","moves":8,"totalMs":0.544,"maxMs":0.1,"nodes":120,"searches":6,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":7,"totalMs":0.022,"maxMs":0.005,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:random:10:b","n":5,"seed":1562513779,"round":10,"result":"win","winner":"blue","drawReason":null,"turns":26,"red":{"agent":"random","moves":13,"totalMs":0.062,"maxMs":0.008,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":13,"totalMs":1.025,"maxMs":0.164,"nodes":159,"searches":11,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:random:11:a","n":5,"seed":3067335959,"round":11,"result":"win","winner":"blue","drawReason":null,"turns":28,"red":{"agent":"minimax-dynamic","moves":14,"totalMs":1.14,"maxMs":0.11,"nodes":188,"searches":13,"deepSearches":1,"illegal":0},"blue":{"agent":"random","moves":14,"totalMs":0.069,"maxMs":0.009,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:random:11:b","n":5,"seed":3067335959,"round":11,"result":"win","winner":"blue","drawReason":null,"turns":22,"red":{"agent":"random","moves":11,"totalMs":0.043,"maxMs":0.007,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":11,"totalMs":0.829,"maxMs":0.099,"nodes":155,"searches":9,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:random:12:a","n":5,"seed":616850111,"round":12,"result":"win","winner":"red","drawReason":null,"turns":25,"red":{"agent":"minimax-dynamic","moves":13,"totalMs":1.026,"maxMs":0.162,"nodes":177,"searches":11,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":12,"totalMs":0.06,"maxMs":0.015,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:random:12:b","n":5,"seed":616850111,"round":12,"result":"win","winner":"red","drawReason":null,"turns":25,"red":{"agent":"random","moves":13,"totalMs":0.058,"maxMs":0.008,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":12,"totalMs":1.009,"maxMs":0.115,"nodes":153,"searches":11,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:random:13:a","n":5,"seed":3076070219,"round":13,"result":"win","winner":"red","drawReason":null,"turns":29,"red":{"agent":"minimax-dynamic","moves":15,"totalMs":1.571,"maxMs":0.236,"nodes":209,"searches":13,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":14,"totalMs":0.102,"maxMs":0.019,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:random:13:b","n":5,"seed":3076070219,"round":13,"result":"win","winner":"blue","drawReason":null,"turns":28,"red":{"agent":"random","moves":14,"totalMs":0.083,"maxMs":0.015,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":14,"totalMs":1.288,"maxMs":0.201,"nodes":188,"searches":12,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:random:14:a","n":5,"seed":2032792111,"round":14,"result":"win","winner":"red","drawReason":null,"turns":19,"red":{"agent":"minimax-dynamic","moves":10,"totalMs":0.728,"maxMs":0.102,"nodes":142,"searches":8,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":9,"totalMs":0.036,"maxMs":0.011,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:random:14:b","n":5,"seed":2032792111,"round":14,"result":"win","winner":"blue","drawReason":null,"turns":20,"red":{"agent":"random","moves":10,"totalMs":0.036,"maxMs":0.006,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":10,"totalMs":0.688,"maxMs":0.092,"nodes":136,"searches":8,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:random:15:a","n":5,"seed":3865804354,"round":15,"result":"win","winner":"red","drawReason":null,"turns":23,"red":{"agent":"minimax-dynamic","moves":12,"totalMs":0.917,"maxMs":0.103,"nodes":170,"searches":10,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":11,"totalMs":0.046,"maxMs":0.01,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:random:15:b","n":5,"seed":3865804354,"round":15,"result":"win","winner":"blue","drawReason":null,"turns":18,"red":{"agent":"random","moves":9,"totalMs":0.031,"maxMs":0.006,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":9,"totalMs":0.716,"maxMs":0.187,"nodes":131,"searches":7,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:random:16:a","n":5,"seed":306761365,"round":16,"result":"win","winner":"red","drawReason":null,"turns":25,"red":{"agent":"minimax-dynamic","moves":13,"totalMs":0.971,"maxMs":0.095,"nodes":174,"searches":11,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":12,"totalMs":0.05,"maxMs":0.008,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:random:16:b","n":5,"seed":306761365,"round":16,"result":"win","winner":"blue","drawReason":null,"turns":20,"red":{"agent":"random","moves":10,"totalMs":0.037,"maxMs":0.006,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":10,"totalMs":0.645,"maxMs":0.089,"nodes":132,"searches":8,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:random:17:a","n":5,"seed":1957235827,"round":17,"result":"win","winner":"red","drawReason":null,"turns":21,"red":{"agent":"minimax-dynamic","moves":11,"totalMs":0.741,"maxMs":0.095,"nodes":168,"searches":9,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":10,"totalMs":0.035,"maxMs":0.006,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:random:17:b","n":5,"seed":1957235827,"round":17,"result":"win","winner":"blue","drawReason":null,"turns":26,"red":{"agent":"random","moves":13,"totalMs":0.057,"maxMs":0.008,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":13,"totalMs":1.029,"maxMs":0.153,"nodes":185,"searches":11,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:random:18:a","n":5,"seed":1394870808,"round":18,"result":"win","winner":"red","drawReason":null,"turns":19,"red":{"agent":"minimax-dynamic","moves":10,"totalMs":0.712,"maxMs":0.102,"nodes":154,"searches":8,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":9,"totalMs":0.032,"maxMs":0.006,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:random:18:b","n":5,"seed":1394870808,"round":18,"result":"win","winner":"blue","drawReason":null,"turns":18,"red":{"agent":"random","moves":9,"totalMs":0.029,"maxMs":0.005,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":9,"totalMs":0.645,"maxMs":0.098,"nodes":121,"searches":7,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:random:19:a","n":5,"seed":1811535624,"round":19,"result":"win","winner":"red","drawReason":null,"turns":21,"red":{"agent":"minimax-dynamic","moves":11,"totalMs":0.789,"maxMs":0.098,"nodes":167,"searches":9,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":10,"totalMs":0.034,"maxMs":0.006,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-dynamic:random:19:b","n":5,"seed":1811535624,"round":19,"result":"win","winner":"blue","drawReason":null,"turns":24,"red":{"agent":"random","moves":12,"totalMs":0.048,"maxMs":0.007,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":12,"totalMs":0.907,"maxMs":0.137,"nodes":156,"searches":10,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d2:minimax-d3:0:a","n":5,"seed":2838380457,"round":0,"result":"win","winner":"blue","drawReason":null,"turns":22,"red":{"agent":"minimax-d2","moves":11,"totalMs":10.159,"maxMs":1.466,"nodes":2590,"searches":10,"deepSearches":10,"illegal":0},"blue":{"agent":"minimax-d3","moves":11,"totalMs":148.077,"maxMs":30.405,"nodes":37064,"searches":9,"deepSearches":9,"illegal":0}},{"id":"5:minimax-d2:minimax-d3:0:b","n":5,"seed":2838380457,"round":0,"result":"win","winner":"red","drawReason":null,"turns":21,"red":{"agent":"minimax-d3","moves":11,"totalMs":196.717,"maxMs":34.217,"nodes":43481,"searches":9,"deepSearches":9,"illegal":0},"blue":{"agent":"minimax-d2","moves":10,"totalMs":13.005,"maxMs":2.987,"nodes":2274,"searches":9,"deepSearches":9,"illegal":0}},{"id":"5:minimax-d2:minimax-d3:1:a","n":5,"seed":36915689,"round":1,"result":"win","winner":"red","drawReason":null,"turns":25,"red":{"agent":"minimax-d2","moves":13,"totalMs":12.887,"maxMs":2.136,"nodes":2607,"searches":11,"deepSearches":11,"illegal":0},"blue":{"agent":"minimax-d3","moves":12,"totalMs":182.092,"maxMs":39.582,"nodes":37025,"searches":11,"deepSearches":11,"illegal":0}},{"id":"5:minimax-d2:minimax-d3:1:b","n":5,"seed":36915689,"round":1,"result":"win","winner":"red","drawReason":null,"turns":25,"red":{"agent":"minimax-d3","moves":13,"totalMs":163.364,"maxMs":32.379,"nodes":43855,"searches":11,"deepSearches":11,"illegal":0},"blue":{"agent":"minimax-d2","moves":12,"totalMs":9.994,"maxMs":1.463,"nodes":2326,"searches":11,"deepSearches":11,"illegal":0}},{"id":"5:minimax-d2:minimax-d3:2:a","n":5,"seed":1565880073,"round":2,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"minimax-d2","moves":8,"totalMs":11.797,"maxMs":3.148,"nodes":2387,"searches":7,"deepSearches":7,"illegal":0},"blue":{"agent":"minimax-d3","moves":8,"totalMs":137.052,"maxMs":33.648,"nodes":33992,"searches":6,"deepSearches":6,"illegal":0}},{"id":"5:minimax-d2:minimax-d3:2:b","n":5,"seed":1565880073,"round":2,"result":"win","winner":"blue","drawReason":null,"turns":20,"red":{"agent":"minimax-d3","moves":10,"totalMs":171.511,"maxMs":33.155,"nodes":44019,"searches":9,"deepSearches":9,"illegal":0},"blue":{"agent":"minimax-d2","moves":10,"totalMs":9.646,"maxMs":1.701,"nodes":2226,"searches":8,"deepSearches":8,"illegal":0}},{"id":"5:minimax-d2:minimax-d3:3:a","n":5,"seed":3894324494,"round":3,"result":"win","winner":"red","drawReason":null,"turns":29,"red":{"agent":"minimax-d2","moves":15,"totalMs":10.879,"maxMs":1.413,"nodes":2741,"searches":13,"deepSearches":13,"illegal":0},"blue":{"agent":"minimax-d3","moves":14,"totalMs":152.986,"maxMs":30.328,"nodes":37928,"searches":13,"deepSearches":13,"illegal":0}},{"id":"5:minimax-d2:minimax-d3:3:b","n":5,"seed":3894324494,"round":3,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"minimax-d3","moves":8,"totalMs":149.047,"maxMs":32.347,"nodes":40938,"searches":6,"deepSearches":6,"illegal":0},"blue":{"agent":"minimax-d2","moves":7,"totalMs":8.053,"maxMs":1.64,"nodes":2020,"searches":6,"deepSearches":6,"illegal":0}},{"id":"5:minimax-d2:minimax-d3:4:a","n":5,"seed":2046990932,"round":4,"result":"win","winner":"blue","drawReason":null,"turns":24,"red":{"agent":"minimax-d2","moves":12,"totalMs":10.162,"maxMs":1.437,"nodes":2607,"searches":11,"deepSearches":11,"illegal":0},"blue":{"agent":"minimax-d3","moves":12,"totalMs":145.996,"maxMs":32.135,"nodes":37151,"searches":10,"deepSearches":10,"illegal":0}},{"id":"5:minimax-d2:minimax-d3:4:b","n":5,"seed":2046990932,"round":4,"result":"win","winner":"blue","drawReason":null,"turns":26,"red":{"agent":"minimax-d3","moves":13,"totalMs":174.524,"maxMs":32.379,"nodes":44774,"searches":12,"deepSearches":12,"illegal":0},"blue":{"agent":"minimax-d2","moves":13,"totalMs":10.428,"maxMs":1.746,"nodes":2442,"searches":11,"deepSearches":11,"illegal":0}},{"id":"5:minimax-d2:minimax-d3:5:a","n":5,"seed":1291608623,"round":5,"result":"win","winner":"blue","drawReason":null,"turns":24,"red":{"agent":"minimax-d2","moves":12,"totalMs":13.391,"maxMs":2.623,"nodes":2627,"searches":11,"deepSearches":11,"illegal":0},"blue":{"agent":"minimax-d3","moves":12,"totalMs":168.075,"maxMs":34.505,"nodes":37049,"searches":10,"deepSearches":10,"illegal":0}},{"id":"5:minimax-d2:minimax-d3:5:b","n":5,"seed":1291608623,"round":5,"result":"win","winner":"red","drawReason":null,"turns":21,"red":{"agent":"minimax-d3","moves":11,"totalMs":158.153,"maxMs":31.557,"nodes":43651,"searches":9,"deepSearches":9,"illegal":0},"blue":{"agent":"minimax-d2","moves":10,"totalMs":9.176,"maxMs":1.579,"nodes":2274,"searches":9,"deepSearches":9,"illegal":0}},{"id":"5:minimax-d2:minimax-d3:6:a","n":5,"seed":1825272548,"round":6,"result":"win","winner":"red","drawReason":null,"turns":21,"red":{"agent":"minimax-d2","moves":11,"totalMs":9.696,"maxMs":1.454,"nodes":2555,"searches":9,"deepSearches":9,"illegal":0},"blue":{"agent":"minimax-d3","moves":10,"totalMs":145.064,"maxMs":31.846,"nodes":36555,"searches":9,"deepSearches":9,"illegal":0}},{"id":"5:minimax-d2:minimax-d3:6:b","n":5,"seed":1825272548,"round":6,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"minimax-d3","moves":9,"totalMs":154.285,"maxMs":31.579,"nodes":42459,"searches":7,"deepSearches":7,"illegal":0},"blue":{"agent":"minimax-d2","moves":8,"totalMs":8.692,"maxMs":1.399,"nodes":2190,"searches":7,"deepSearches":7,"illegal":0}},{"id":"5:minimax-d2:minimax-d3:7:a","n":5,"seed":1591172621,"round":7,"result":"win","winner":"red","drawReason":null,"turns":25,"red":{"agent":"minimax-d2","moves":13,"totalMs":10.274,"maxMs":1.452,"nodes":2609,"searches":11,"deepSearches":11,"illegal":0},"blue":{"agent":"minimax-d3","moves":12,"totalMs":153.549,"maxMs":31.926,"nodes":37111,"searches":11,"deepSearches":11,"illegal":0}},{"id":"5:minimax-d2:minimax-d3:7:b","n":5,"seed":1591172621,"round":7,"result":"win","winner":"blue","drawReason":null,"turns":20,"red":{"agent":"minimax-d3","moves":10,"totalMs":157.57,"maxMs":31.584,"nodes":43573,"searches":9,"deepSearches":9,"illegal":0},"blue":{"agent":"minimax-d2","moves":10,"totalMs":9.236,"maxMs":1.424,"nodes":2224,"searches":8,"deepSearches":8,"illegal":0}},{"id":"5:minimax-d2:minimax-d3:8:a","n":5,"seed":3389777582,"round":8,"result":"win","winner":"red","drawReason":null,"turns":31,"red":{"agent":"minimax-d2","moves":16,"totalMs":11.372,"maxMs":1.422,"nodes":2830,"searches":14,"deepSearches":14,"illegal":0},"blue":{"agent":"minimax-d3","moves":15,"totalMs":154.218,"maxMs":32.21,"nodes":38573,"searches":14,"deepSearches":14,"illegal":0}},{"id":"5:minimax-d2:minimax-d3:8:b","n":5,"seed":3389777582,"round":8,"result":"win","winner":"red","drawReason":null,"turns":19,"red":{"agent":"minimax-d3","moves":10,"totalMs":151.813,"maxMs":31.444,"nodes":43154,"searches":8,"deepSearches":8,"illegal":0},"blue":{"agent":"minimax-d2","moves":9,"totalMs":8.749,"maxMs":1.62,"nodes":2224,"searches":8,"deepSearches":8,"illegal":0}},{"id":"5:minimax-d2:minimax-d3:9:a","n":5,"seed":3010035609,"round":9,"result":"win","winner":"red","drawReason":null,"turns":25,"red":{"agent":"minimax-d2","moves":13,"totalMs":10.297,"maxMs":1.505,"nodes":2609,"searches":11,"deepSearches":11,"illegal":0},"blue":{"agent":"minimax-d3","moves":12,"totalMs":149.642,"maxMs":30.258,"nodes":37053,"searches":11,"deepSearches":11,"illegal":0}},{"id":"5:minimax-d2:minimax-d3:9:b","n":5,"seed":3010035609,"round":9,"result":"win","winner":"red","drawReason":null,"turns":27,"red":{"agent":"minimax-d3","moves":14,"totalMs":181.408,"maxMs":32.329,"nodes":46539,"searches":12,"deepSearches":12,"illegal":0},"blue":{"agent":"minimax-d2","moves":13,"totalMs":11.556,"maxMs":1.638,"nodes":2563,"searches":12,"deepSearches":12,"illegal":0}},{"id":"5:minimax-d2:minimax-d3:10:a","n":5,"seed":2278163210,"round":10,"result":"win","winner":"blue","drawReason":null,"turns":24,"red":{"agent":"minimax-d2","moves":12,"totalMs":10.759,"maxMs":1.717,"nodes":2607,"searches":11,"deepSearches":11,"illegal":0},"blue":{"agent":"minimax-d3","moves":12,"totalMs":146.538,"maxMs":31.326,"nodes":36886,"searches":10,"deepSearches":10,"illegal":0}},{"id":"5:minimax-d2:minimax-d3:10:b","n":5,"seed":2278163210,"round":10,"result":"win","winner":"red","drawReason":null,"turns":27,"red":{"agent":"minimax-d3","moves":14,"totalMs":170.278,"maxMs":33.815,"nodes":44334,"searches":12,"deepSearches":12,"illegal":0},"blue":{"agent":"minimax-d2","moves":13,"totalMs":12.396,"maxMs":2.991,"nodes":2392,"searches":12,"deepSearches":12,"illegal":0}},{"id":"5:minimax-d2:minimax-d3:11:a","n":5,"seed":1659578422,"round":11,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"minimax-d2","moves":8,"totalMs":11.15,"maxMs":3.824,"nodes":2387,"searches":7,"deepSearches":7,"illegal":0},"blue":{"agent":"minimax-d3","moves":8,"totalMs":150.839,"maxMs":33.41,"nodes":35064,"searches":6,"deepSearches":6,"illegal":0}},{"id":"5:minimax-d2:minimax-d3:11:b","n":5,"seed":1659578422,"round":11,"result":"win","winner":"red","drawReason":null,"turns":29,"red":{"agent":"minimax-d3","moves":15,"totalMs":224.619,"maxMs":41.41,"nodes":53127,"searches":13,"deepSearches":13,"illegal":0},"blue":{"agent":"minimax-d2","moves":14,"totalMs":14.006,"maxMs":1.748,"nodes":3168,"searches":13,"deepSearches":13,"illegal":0}},{"id":"5:minimax-d2:minimax-d3:12:a","n":5,"seed":119651130,"round":12,"result":"win","winner":"blue","drawReason":null,"turns":32,"red":{"agent":"minimax-d2","moves":16,"totalMs":11.601,"maxMs":1.389,"nodes":2761,"searches":15,"deepSearches":15,"illegal":0},"blue":{"agent":"minimax-d3","moves":16,"totalMs":150.75,"maxMs":31.075,"nodes":37584,"searches":14,"deepSearches":14,"illegal":0}},{"id":"5:minimax-d2:minimax-d3:12:b","n":5,"seed":119651130,"round":12,"result":"win","winner":"red","drawReason":null,"turns":23,"red":{"agent":"minimax-d3","moves":12,"totalMs":169.614,"maxMs":33.735,"nodes":43817,"searches":10,"deepSearches":10,"illegal":0},"blue":{"agent":"minimax-d2","moves":11,"totalMs":9.794,"maxMs":1.418,"nodes":2302,"searches":10,"deepSearches":10,"illegal":0}},{"id":"5:minimax-d2:minimax-d3:13:a","n":5,"seed":1843943598,"round":13,"result":"win","winner":"blue","drawReason":null,"turns":12,"red":{"agent":"minimax-d2","moves":6,"totalMs":6.686,"maxMs":1.744,"nodes":2045,"searches":5,"deepSearches":5,"illegal":0},"blue":{"agent":"minimax-d3","moves":6,"totalMs":103.446,"maxMs":30.568,"nodes":30132,"searches":4,"deepSearches":4,"illegal":0}},{"id":"5:minimax-d2:minimax-d3:13:b","n":5,"seed":1843943598,"round":13,"result":"win","winner":"red","drawReason":null,"turns":19,"red":{"agent":"minimax-d3","moves":10,"totalMs":158.7,"maxMs":32.363,"nodes":43204,"searches":8,"deepSearches":8,"illegal":0},"blue":{"agent":"minimax-d2","moves":9,"totalMs":8.988,"maxMs":1.481,"nodes":2264,"searches":8,"deepSearches":8,"illegal":0}},{"id":"5:minimax-d2:minimax-d3:14:a","n":5,"seed":3196168628,"round":14,"result":"win","winner":"red","drawReason":null,"turns":25,"red":{"agent":"minimax-d2","moves":13,"totalMs":10.171,"maxMs":1.579,"nodes":2633,"searches":11,"deepSearches":11,"illegal":0},"blue":{"agent":"minimax-d3","moves":12,"totalMs":142.18,"maxMs":29.505,"nodes":37209,"searches":11,"deepSearches":11,"illegal":0}},{"id":"5:minimax-d2:minimax-d3:14:b","n":5,"seed":3196168628,"round":14,"result":"win","winner":"blue","drawReason":null,"turns":18,"red":{"agent":"minimax-d3","moves":9,"totalMs":150.072,"maxMs":30.588,"nodes":43100,"searches":8,"deepSearches":8,"illegal":0},"blue":{"agent":"minimax-d2","moves":9,"totalMs":8.109,"maxMs":1.536,"nodes":2142,"searches":7,"deepSearches":7,"illegal":0}},{"id":"5:minimax-d2:minimax-d3:15:a","n":5,"seed":4100265140,"round":15,"result":"win","winner":"red","drawReason":null,"turns":21,"red":{"agent":"minimax-d2","moves":11,"totalMs":9.44,"maxMs":1.412,"nodes":2555,"searches":9,"deepSearches":9,"illegal":0},"blue":{"agent":"minimax-d3","moves":10,"totalMs":139.26,"maxMs":29.7,"nodes":36439,"searches":9,"deepSearches":9,"illegal":0}},{"id":"5:minimax-d2:minimax-d3:15:b","n":5,"seed":4100265140,"round":15,"result":"win","winner":"red","drawReason":null,"turns":23,"red":{"agent":"minimax-d3","moves":12,"totalMs":153.825,"maxMs":30.857,"nodes":43778,"searches":10,"deepSearches":10,"illegal":0},"blue":{"agent":"minimax-d2","moves":11,"totalMs":8.838,"maxMs":1.359,"nodes":2300,"searches":10,"deepSearches":10,"illegal":0}},{"id":"5:minimax-d2:minimax-d3:16:a","n":5,"seed":1090237860,"round":16,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"minimax-d2","moves":8,"totalMs":9.951,"maxMs":1.698,"nodes":2387,"searches":7,"deepSearches":7,"illegal":0},"blue":{"agent":"minimax-d3","moves":8,"totalMs":146.172,"maxMs":32.035,"nodes":35056,"searches":6,"deepSearches":6,"illegal":0}},{"id":"5:minimax-d2:minimax-d3:16:b","n":5,"seed":1090237860,"round":16,"result":"win","winner":"red","drawReason":null,"turns":13,"red":{"agent":"minimax-d3","moves":7,"totalMs":142.243,"maxMs":33.778,"nodes":38539,"searches":5,"deepSearches":5,"illegal":0},"blue":{"agent":"minimax-d2","moves":6,"totalMs":7.431,"maxMs":1.685,"nodes":1850,"searches":5,"deepSearches":5,"illegal":0}},{"id":"5:minimax-d2:minimax-d3:17:a","n":5,"seed":3609482325,"round":17,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"minimax-d2","moves":8,"totalMs":9.289,"maxMs":1.652,"nodes":2387,"searches":7,"deepSearches":7,"illegal":0},"blue":{"agent":"minimax-d3","moves":8,"totalMs":153.853,"maxMs":32.97,"nodes":35032,"searches":6,"deepSearches":6,"illegal":0}},{"id":"5:minimax-d2:minimax-d3:17:b","n":5,"seed":3609482325,"round":17,"result":"win","winner":"blue","drawReason":null,"turns":28,"red":{"agent":"minimax-d3","moves":14,"totalMs":276.368,"maxMs":47.04,"nodes":44367,"searches":13,"deepSearches":13,"illegal":0},"blue":{"agent":"minimax-d2","moves":14,"totalMs":21.947,"maxMs":4.069,"nodes":2394,"searches":12,"deepSearches":12,"illegal":0}},{"id":"5:minimax-d2:minimax-d3:18:a","n":5,"seed":3319731727,"round":18,"result":"win","winner":"blue","drawReason":null,"turns":26,"red":{"agent":"minimax-d2","moves":13,"totalMs":16.996,"maxMs":2.725,"nodes":2612,"searches":12,"deepSearches":12,"illegal":0},"blue":{"agent":"minimax-d3","moves":13,"totalMs":303.16,"maxMs":76.46,"nodes":37072,"searches":11,"deepSearches":11,"illegal":0}},{"id":"5:minimax-d2:minimax-d3:18:b","n":5,"seed":3319731727,"round":18,"result":"win","winner":"blue","drawReason":null,"turns":30,"red":{"agent":"minimax-d3","moves":15,"totalMs":238.254,"maxMs":33.991,"nodes":55760,"searches":14,"deepSearches":14,"illegal":0},"blue":{"agent":"minimax-d2","moves":15,"totalMs":14.912,"maxMs":1.536,"nodes":3154,"searches":13,"deepSearches":13,"illegal":0}},{"id":"5:minimax-d2:minimax-d3:19:a","n":5,"seed":3316495337,"round":19,"result":"win","winner":"blue","drawReason":null,"turns":24,"red":{"agent":"minimax-d2","moves":12,"totalMs":11.876,"maxMs":2.213,"nodes":2607,"searches":11,"deepSearches":11,"illegal":0},"blue":{"agent":"minimax-d3","moves":12,"totalMs":152.59,"maxMs":32.869,"nodes":37042,"searches":10,"deepSearches":10,"illegal":0}},{"id":"5:minimax-d2:minimax-d3:19:b","n":5,"seed":3316495337,"round":19,"result":"win","winner":"red","drawReason":null,"turns":25,"red":{"agent":"minimax-d3","moves":13,"totalMs":180.19,"maxMs":33.052,"nodes":43819,"searches":11,"deepSearches":11,"illegal":0},"blue":{"agent":"minimax-d2","moves":12,"totalMs":11.383,"maxMs":2.04,"nodes":2330,"searches":11,"deepSearches":11,"illegal":0}},{"id":"5:minimax-d2:greedy:0:a","n":5,"seed":2947018501,"round":0,"result":"win","winner":"blue","drawReason":null,"turns":28,"red":{"agent":"minimax-d2","moves":14,"totalMs":14.687,"maxMs":1.738,"nodes":2895,"searches":13,"deepSearches":13,"illegal":0},"blue":{"agent":"greedy","moves":14,"totalMs":1.345,"maxMs":0.241,"nodes":202,"searches":13,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d2:greedy:0:b","n":5,"seed":2947018501,"round":0,"result":"win","winner":"blue","drawReason":null,"turns":26,"red":{"agent":"greedy","moves":13,"totalMs":1.545,"maxMs":0.209,"nodes":201,"searches":13,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":13,"totalMs":11.484,"maxMs":1.585,"nodes":2359,"searches":11,"deepSearches":11,"illegal":0}},{"id":"5:minimax-d2:greedy:1:a","n":5,"seed":1659349577,"round":1,"result":"win","winner":"blue","drawReason":null,"turns":24,"red":{"agent":"minimax-d2","moves":12,"totalMs":17.335,"maxMs":2.595,"nodes":2657,"searches":11,"deepSearches":11,"illegal":0},"blue":{"agent":"greedy","moves":12,"totalMs":1.63,"maxMs":0.279,"nodes":178,"searches":11,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d2:greedy:1:b","n":5,"seed":1659349577,"round":1,"result":"win","winner":"red","drawReason":null,"turns":23,"red":{"agent":"greedy","moves":12,"totalMs":1.929,"maxMs":0.309,"nodes":177,"searches":11,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":11,"totalMs":19.542,"maxMs":2.683,"nodes":2080,"searches":10,"deepSearches":10,"illegal":0}},{"id":"5:minimax-d2:greedy:2:a","n":5,"seed":1127799071,"round":2,"result":"win","winner":"blue","drawReason":null,"turns":18,"red":{"agent":"minimax-d2","moves":9,"totalMs":17.065,"maxMs":3.227,"nodes":2488,"searches":8,"deepSearches":8,"illegal":0},"blue":{"agent":"greedy","moves":9,"totalMs":1.393,"maxMs":0.241,"nodes":152,"searches":8,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d2:greedy:2:b","n":5,"seed":1127799071,"round":2,"result":"win","winner":"blue","drawReason":null,"turns":18,"red":{"agent":"greedy","moves":9,"totalMs":1.25,"maxMs":0.211,"nodes":161,"searches":9,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":9,"totalMs":13.361,"maxMs":2.359,"nodes":1911,"searches":7,"deepSearches":7,"illegal":0}},{"id":"5:minimax-d2:greedy:3:a","n":5,"seed":3057275608,"round":3,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"minimax-d2","moves":9,"totalMs":11.111,"maxMs":2.149,"nodes":2387,"searches":7,"deepSearches":7,"illegal":0},"blue":{"agent":"greedy","moves":8,"totalMs":1.142,"maxMs":0.389,"nodes":152,"searches":8,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d2:greedy:3:b","n":5,"seed":3057275608,"round":3,"result":"win","winner":"red","drawReason":null,"turns":19,"red":{"agent":"greedy","moves":10,"totalMs":1.057,"maxMs":0.274,"nodes":169,"searches":9,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":9,"totalMs":12.322,"maxMs":1.956,"nodes":2224,"searches":8,"deepSearches":8,"illegal":0}},{"id":"5:minimax-d2:greedy:4:a","n":5,"seed":3624808853,"round":4,"result":"win","winner":"red","drawReason":null,"turns":27,"red":{"agent":"minimax-d2","moves":14,"totalMs":15.268,"maxMs":2.416,"nodes":2714,"searches":12,"deepSearches":12,"illegal":0},"blue":{"agent":"greedy","moves":13,"totalMs":1.768,"maxMs":0.277,"nodes":194,"searches":13,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d2:greedy:4:b","n":5,"seed":3624808853,"round":4,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"greedy","moves":9,"totalMs":0.737,"maxMs":0.118,"nodes":151,"searches":8,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":8,"totalMs":11.04,"maxMs":3.16,"nodes":1911,"searches":7,"deepSearches":7,"illegal":0}},{"id":"5:minimax-d2:greedy:5:a","n":5,"seed":3343687111,"round":5,"result":"win","winner":"red","drawReason":null,"turns":27,"red":{"agent":"minimax-d2","moves":14,"totalMs":11.6,"maxMs":1.877,"nodes":2676,"searches":12,"deepSearches":12,"illegal":0},"blue":{"agent":"greedy","moves":13,"totalMs":1.186,"maxMs":0.143,"nodes":192,"searches":13,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d2:greedy:5:b","n":5,"seed":3343687111,"round":5,"result":"win","winner":"blue","drawReason":null,"turns":24,"red":{"agent":"greedy","moves":12,"totalMs":1.855,"maxMs":0.771,"nodes":195,"searches":12,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":12,"totalMs":13.565,"maxMs":2.774,"nodes":2268,"searches":10,"deepSearches":10,"illegal":0}},{"id":"5:minimax-d2:greedy:6:a","n":5,"seed":2065992246,"round":6,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"minimax-d2","moves":9,"totalMs":9.441,"maxMs":1.495,"nodes":2387,"searches":7,"deepSearches":7,"illegal":0},"blue":{"agent":"greedy","moves":8,"totalMs":0.797,"maxMs":0.153,"nodes":152,"searches":8,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d2:greedy:6:b","n":5,"seed":2065992246,"round":6,"result":"win","winner":"blue","drawReason":null,"turns":20,"red":{"agent":"greedy","moves":10,"totalMs":0.879,"maxMs":0.115,"nodes":175,"searches":10,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":10,"totalMs":9.324,"maxMs":1.627,"nodes":2060,"searches":8,"deepSearches":8,"illegal":0}},{"id":"5:minimax-d2:greedy:7:a","n":5,"seed":1496460740,"round":7,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"minimax-d2","moves":8,"totalMs":8.565,"maxMs":1.825,"nodes":2304,"searches":6,"deepSearches":6,"illegal":0},"blue":{"agent":"greedy","moves":7,"totalMs":0.596,"maxMs":0.101,"nodes":144,"searches":7,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d2:greedy:7:b","n":5,"seed":1496460740,"round":7,"result":"win","winner":"blue","drawReason":null,"turns":26,"red":{"agent":"greedy","moves":13,"totalMs":1.317,"maxMs":0.256,"nodes":197,"searches":13,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":13,"totalMs":10.193,"maxMs":1.476,"nodes":2289,"searches":11,"deepSearches":11,"illegal":0}},{"id":"5:minimax-d2:greedy:8:a","n":5,"seed":2056990394,"round":8,"result":"win","winner":"blue","drawReason":null,"turns":18,"red":{"agent":"minimax-d2","moves":9,"totalMs":10.477,"maxMs":1.696,"nodes":2488,"searches":8,"deepSearches":8,"illegal":0},"blue":{"agent":"greedy","moves":9,"totalMs":0.908,"maxMs":0.14,"nodes":152,"searches":8,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d2:greedy:8:b","n":5,"seed":2056990394,"round":8,"result":"win","winner":"blue","drawReason":null,"turns":18,"red":{"agent":"greedy","moves":9,"totalMs":0.767,"maxMs":0.121,"nodes":161,"searches":9,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":9,"totalMs":8.596,"maxMs":1.593,"nodes":1911,"searches":7,"deepSearches":7,"illegal":0}},{"id":"5:minimax-d2:greedy:9:a","n":5,"seed":893924958,"round":9,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"minimax-d2","moves":8,"totalMs":9.611,"maxMs":1.812,"nodes":2387,"searches":7,"deepSearches":7,"illegal":0},"blue":{"agent":"greedy","moves":8,"totalMs":0.696,"maxMs":0.155,"nodes":140,"searches":7,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d2:greedy:9:b","n":5,"seed":893924958,"round":9,"result":"win","winner":"blue","drawReason":null,"turns":18,"red":{"agent":"greedy","moves":9,"totalMs":0.848,"maxMs":0.138,"nodes":161,"searches":9,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":9,"totalMs":8.866,"maxMs":1.884,"nodes":1911,"searches":7,"deepSearches":7,"illegal":0}},{"id":"5:minimax-d2:greedy:10:a","n":5,"seed":373012053,"round":10,"result":"win","winner":"blue","drawReason":null,"turns":24,"red":{"agent":"minimax-d2","moves":12,"totalMs":13.096,"maxMs":1.509,"nodes":3031,"searches":11,"deepSearches":11,"illegal":0},"blue":{"agent":"greedy","moves":12,"totalMs":1.067,"maxMs":0.158,"nodes":196,"searches":11,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d2:greedy:10:b","n":5,"seed":373012053,"round":10,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"greedy","moves":7,"totalMs":0.659,"maxMs":0.154,"nodes":139,"searches":7,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":7,"totalMs":6.691,"maxMs":1.46,"nodes":1665,"searches":5,"deepSearches":5,"illegal":0}},{"id":"5:minimax-d2:greedy:11:a","n":5,"seed":2175431640,"round":11,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"minimax-d2","moves":8,"totalMs":10.432,"maxMs":2.126,"nodes":2387,"searches":7,"deepSearches":7,"illegal":0},"blue":{"agent":"greedy","moves":8,"totalMs":0.692,"maxMs":0.135,"nodes":140,"searches":7,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d2:greedy:11:b","n":5,"seed":2175431640,"round":11,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"greedy","moves":8,"totalMs":0.547,"maxMs":0.092,"nodes":139,"searches":7,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":7,"totalMs":6.856,"maxMs":1.42,"nodes":1810,"searches":6,"deepSearches":6,"illegal":0}},{"id":"5:minimax-d2:greedy:12:a","n":5,"seed":2138130524,"round":12,"result":"win","winner":"red","drawReason":null,"turns":21,"red":{"agent":"minimax-d2","moves":11,"totalMs":10.682,"maxMs":2.111,"nodes":2553,"searches":9,"deepSearches":9,"illegal":0},"blue":{"agent":"greedy","moves":10,"totalMs":0.995,"maxMs":0.165,"nodes":170,"searches":10,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d2:greedy:12:b","n":5,"seed":2138130524,"round":12,"result":"win","winner":"blue","drawReason":null,"turns":30,"red":{"agent":"greedy","moves":15,"totalMs":1.434,"maxMs":0.17,"nodes":231,"searches":15,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":15,"totalMs":13.671,"maxMs":1.525,"nodes":2813,"searches":13,"deepSearches":13,"illegal":0}},{"id":"5:minimax-d2:greedy:13:a","n":5,"seed":625885639,"round":13,"result":"win","winner":"red","drawReason":null,"turns":25,"red":{"agent":"minimax-d2","moves":13,"totalMs":11.08,"maxMs":1.431,"nodes":2657,"searches":11,"deepSearches":11,"illegal":0},"blue":{"agent":"greedy","moves":12,"totalMs":1.202,"maxMs":0.263,"nodes":186,"searches":12,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d2:greedy:13:b","n":5,"seed":625885639,"round":13,"result":"win","winner":"red","drawReason":null,"turns":29,"red":{"agent":"greedy","moves":15,"totalMs":1.219,"maxMs":0.161,"nodes":199,"searches":14,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":14,"totalMs":10.351,"maxMs":1.504,"nodes":2253,"searches":13,"deepSearches":13,"illegal":0}},{"id":"5:minimax-d2:greedy:14:a","n":5,"seed":97619825,"round":14,"result":"win","winner":"red","drawReason":null,"turns":21,"red":{"agent":"minimax-d2","moves":11,"totalMs":10.083,"maxMs":1.586,"nodes":2555,"searches":9,"deepSearches":9,"illegal":0},"blue":{"agent":"greedy","moves":10,"totalMs":1.178,"maxMs":0.219,"nodes":172,"searches":10,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d2:greedy:14:b","n":5,"seed":97619825,"round":14,"result":"win","winner":"blue","drawReason":null,"turns":34,"red":{"agent":"greedy","moves":17,"totalMs":1.514,"maxMs":0.188,"nodes":229,"searches":17,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":17,"totalMs":12.18,"maxMs":1.464,"nodes":2435,"searches":15,"deepSearches":15,"illegal":0}},{"id":"5:minimax-d2:greedy:15:a","n":5,"seed":3293908912,"round":15,"result":"win","winner":"red","drawReason":null,"turns":21,"red":{"agent":"minimax-d2","moves":11,"totalMs":10.936,"maxMs":1.707,"nodes":2555,"searches":9,"deepSearches":9,"illegal":0},"blue":{"agent":"greedy","moves":10,"totalMs":0.931,"maxMs":0.13,"nodes":172,"searches":10,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d2:greedy:15:b","n":5,"seed":3293908912,"round":15,"result":"win","winner":"red","drawReason":null,"turns":25,"red":{"agent":"greedy","moves":13,"totalMs":0.999,"maxMs":0.105,"nodes":183,"searches":12,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":12,"totalMs":9.499,"maxMs":1.5,"nodes":2089,"searches":11,"deepSearches":11,"illegal":0}},{"id":"5:minimax-d2:greedy:16:a","n":5,"seed":776307791,"round":16,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"minimax-d2","moves":8,"totalMs":9.053,"maxMs":1.716,"nodes":2387,"searches":7,"deepSearches":7,"illegal":0},"blue":{"agent":"greedy","moves":8,"totalMs":0.641,"maxMs":0.119,"nodes":140,"searches":7,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d2:greedy:16:b","n":5,"seed":776307791,"round":16,"result":"win","winner":"blue","drawReason":null,"turns":28,"red":{"agent":"greedy","moves":14,"totalMs":1.562,"maxMs":0.32,"nodes":223,"searches":14,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":14,"totalMs":13.467,"maxMs":1.811,"nodes":2576,"searches":12,"deepSearches":12,"illegal":0}},{"id":"5:minimax-d2:greedy:17:a","n":5,"seed":2968838878,"round":17,"result":"win","winner":"red","drawReason":null,"turns":19,"red":{"agent":"minimax-d2","moves":10,"totalMs":10.297,"maxMs":1.707,"nodes":2488,"searches":8,"deepSearches":8,"illegal":0},"blue":{"agent":"greedy","moves":9,"totalMs":0.933,"maxMs":0.182,"nodes":162,"searches":9,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d2:greedy:17:b","n":5,"seed":2968838878,"round":17,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"greedy","moves":8,"totalMs":0.773,"maxMs":0.16,"nodes":151,"searches":8,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":8,"totalMs":8.297,"maxMs":2.177,"nodes":1810,"searches":6,"deepSearches":6,"illegal":0}},{"id":"5:minimax-d2:greedy:18:a","n":5,"seed":4233279521,"round":18,"result":"win","winner":"red","drawReason":null,"turns":23,"red":{"agent":"minimax-d2","moves":12,"totalMs":10.925,"maxMs":1.459,"nodes":2592,"searches":10,"deepSearches":10,"illegal":0},"blue":{"agent":"greedy","moves":11,"totalMs":1.266,"maxMs":0.209,"nodes":178,"searches":11,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d2:greedy:18:b","n":5,"seed":4233279521,"round":18,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"greedy","moves":8,"totalMs":0.76,"maxMs":0.147,"nodes":153,"searches":8,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":8,"totalMs":7.55,"maxMs":1.525,"nodes":1814,"searches":6,"deepSearches":6,"illegal":0}},{"id":"5:minimax-d2:greedy:19:a","n":5,"seed":1610444215,"round":19,"result":"win","winner":"red","drawReason":null,"turns":21,"red":{"agent":"minimax-d2","moves":11,"totalMs":12.241,"maxMs":2.257,"nodes":2553,"searches":9,"deepSearches":9,"illegal":0},"blue":{"agent":"greedy","moves":10,"totalMs":1.049,"maxMs":0.228,"nodes":170,"searches":10,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d2:greedy:19:b","n":5,"seed":1610444215,"round":19,"result":"win","winner":"red","drawReason":null,"turns":19,"red":{"agent":"greedy","moves":10,"totalMs":0.842,"maxMs":0.115,"nodes":163,"searches":9,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":9,"totalMs":9.538,"maxMs":1.469,"nodes":2060,"searches":8,"deepSearches":8,"illegal":0}},{"id":"5:minimax-d2:random:0:a","n":5,"seed":2565409517,"round":0,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"minimax-d2","moves":9,"totalMs":9.001,"maxMs":1.529,"nodes":2569,"searches":7,"deepSearches":7,"illegal":0},"blue":{"agent":"random","moves":8,"totalMs":0.037,"maxMs":0.006,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d2:random:0:b","n":5,"seed":2565409517,"round":0,"result":"win","winner":"blue","drawReason":null,"turns":30,"red":{"agent":"random","moves":15,"totalMs":0.131,"maxMs":0.021,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":15,"totalMs":14.279,"maxMs":2.773,"nodes":2752,"searches":13,"deepSearches":13,"illegal":0}},{"id":"5:minimax-d2:random:1:a","n":5,"seed":1148825826,"round":1,"result":"win","winner":"red","drawReason":null,"turns":13,"red":{"agent":"minimax-d2","moves":7,"totalMs":7.496,"maxMs":1.825,"nodes":1856,"searches":5,"deepSearches":5,"illegal":0},"blue":{"agent":"random","moves":6,"totalMs":0.031,"maxMs":0.016,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d2:random:1:b","n":5,"seed":1148825826,"round":1,"result":"win","winner":"blue","drawReason":null,"turns":18,"red":{"agent":"random","moves":9,"totalMs":0.045,"maxMs":0.008,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":9,"totalMs":9.561,"maxMs":1.947,"nodes":2267,"searches":7,"deepSearches":7,"illegal":0}},{"id":"5:minimax-d2:random:2:a","n":5,"seed":1543740455,"round":2,"result":"win","winner":"red","drawReason":null,"turns":13,"red":{"agent":"minimax-d2","moves":7,"totalMs":7.446,"maxMs":1.738,"nodes":1852,"searches":5,"deepSearches":5,"illegal":0},"blue":{"agent":"random","moves":6,"totalMs":0.05,"maxMs":0.029,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d2:random:2:b","n":5,"seed":1543740455,"round":2,"result":"win","winner":"blue","drawReason":null,"turns":28,"red":{"agent":"random","moves":14,"totalMs":0.081,"maxMs":0.009,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":14,"totalMs":10.094,"maxMs":1.484,"nodes":2201,"searches":12,"deepSearches":12,"illegal":0}},{"id":"5:minimax-d2:random:3:a","n":5,"seed":2944524929,"round":3,"result":"win","winner":"blue","drawReason":null,"turns":26,"red":{"agent":"minimax-d2","moves":13,"totalMs":14.72,"maxMs":2.772,"nodes":2938,"searches":12,"deepSearches":12,"illegal":0},"blue":{"agent":"random","moves":13,"totalMs":0.107,"maxMs":0.022,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d2:random:3:b","n":5,"seed":2944524929,"round":3,"result":"win","winner":"blue","drawReason":null,"turns":18,"red":{"agent":"random","moves":9,"totalMs":0.069,"maxMs":0.027,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":9,"totalMs":9.046,"maxMs":1.734,"nodes":2071,"searches":7,"deepSearches":7,"illegal":0}},{"id":"5:minimax-d2:random:4:a","n":5,"seed":1107073440,"round":4,"result":"win","winner":"red","drawReason":null,"turns":21,"red":{"agent":"minimax-d2","moves":11,"totalMs":11.468,"maxMs":1.948,"nodes":3021,"searches":9,"deepSearches":9,"illegal":0},"blue":{"agent":"random","moves":10,"totalMs":0.047,"maxMs":0.007,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d2:random:4:b","n":5,"seed":1107073440,"round":4,"result":"win","winner":"blue","drawReason":null,"turns":18,"red":{"agent":"random","moves":9,"totalMs":0.047,"maxMs":0.013,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":9,"totalMs":9.12,"maxMs":2.133,"nodes":1959,"searches":7,"deepSearches":7,"illegal":0}},{"id":"5:minimax-d2:random:5:a","n":5,"seed":3297150426,"round":5,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"minimax-d2","moves":8,"totalMs":7.25,"maxMs":1.415,"nodes":2246,"searches":6,"deepSearches":6,"illegal":0},"blue":{"agent":"random","moves":7,"totalMs":0.025,"maxMs":0.005,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d2:random:5:b","n":5,"seed":3297150426,"round":5,"result":"win","winner":"blue","drawReason":null,"turns":18,"red":{"agent":"random","moves":9,"totalMs":0.036,"maxMs":0.006,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":9,"totalMs":8.22,"maxMs":1.702,"nodes":1911,"searches":7,"deepSearches":7,"illegal":0}},{"id":"5:minimax-d2:random:6:a","n":5,"seed":1172022026,"round":6,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"minimax-d2","moves":9,"totalMs":8.682,"maxMs":1.393,"nodes":2370,"searches":7,"deepSearches":7,"illegal":0},"blue":{"agent":"random","moves":8,"totalMs":0.035,"maxMs":0.008,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d2:random:6:b","n":5,"seed":1172022026,"round":6,"result":"win","winner":"blue","drawReason":null,"turns":22,"red":{"agent":"random","moves":11,"totalMs":0.056,"maxMs":0.007,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":11,"totalMs":10.549,"maxMs":2.305,"nodes":2355,"searches":9,"deepSearches":9,"illegal":0}},{"id":"5:minimax-d2:random:7:a","n":5,"seed":1262688316,"round":7,"result":"win","winner":"red","drawReason":null,"turns":25,"red":{"agent":"minimax-d2","moves":13,"totalMs":13.004,"maxMs":1.689,"nodes":3105,"searches":11,"deepSearches":11,"illegal":0},"blue":{"agent":"random","moves":12,"totalMs":0.076,"maxMs":0.011,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d2:random:7:b","n":5,"seed":1262688316,"round":7,"result":"win","winner":"blue","drawReason":null,"turns":24,"red":{"agent":"random","moves":12,"totalMs":0.151,"maxMs":0.027,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":12,"totalMs":16.09,"maxMs":2.623,"nodes":2119,"searches":10,"deepSearches":10,"illegal":0}},{"id":"5:minimax-d2:random:8:a","n":5,"seed":1989761374,"round":8,"result":"win","winner":"red","drawReason":null,"turns":21,"red":{"agent":"minimax-d2","moves":11,"totalMs":17.196,"maxMs":3.149,"nodes":2778,"searches":9,"deepSearches":9,"illegal":0},"blue":{"agent":"random","moves":10,"totalMs":0.159,"maxMs":0.061,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d2:random:8:b","n":5,"seed":1989761374,"round":8,"result":"win","winner":"blue","drawReason":null,"turns":20,"red":{"agent":"random","moves":10,"totalMs":0.146,"maxMs":0.072,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":10,"totalMs":13.02,"maxMs":2.014,"nodes":2110,"searches":8,"deepSearches":8,"illegal":0}},{"id":"5:minimax-d2:random:9:a","n":5,"seed":3662440927,"round":9,"result":"win","winner":"red","drawReason":null,"turns":21,"red":{"agent":"minimax-d2","moves":11,"totalMs":11.3,"maxMs":1.94,"nodes":2653,"searches":9,"deepSearches":9,"illegal":0},"blue":{"agent":"random","moves":10,"totalMs":0.056,"maxMs":0.008,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d2:random:9:b","n":5,"seed":3662440927,"round":9,"result":"win","winner":"blue","drawReason":null,"turns":22,"red":{"agent":"random","moves":11,"totalMs":0.088,"maxMs":0.013,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":11,"totalMs":16.396,"maxMs":3.146,"nodes":2341,"searches":9,"deepSearches":9,"illegal":0}},{"id":"5:minimax-d2:random:10:a","n":5,"seed":2804193786,"round":10,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"minimax-d2","moves":9,"totalMs":13.279,"maxMs":2.397,"nodes":2645,"searches":7,"deepSearches":7,"illegal":0},"blue":{"agent":"random","moves":8,"totalMs":0.071,"maxMs":0.022,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d2:random:10:b","n":5,"seed":2804193786,"round":10,"result":"win","winner":"blue","drawReason":null,"turns":18,"red":{"agent":"random","moves":9,"totalMs":0.053,"maxMs":0.009,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":9,"totalMs":9.748,"maxMs":2.473,"nodes":1967,"searches":7,"deepSearches":7,"illegal":0}},{"id":"5:minimax-d2:random:11:a","n":5,"seed":2289349908,"round":11,"result":"win","winner":"red","drawReason":null,"turns":31,"red":{"agent":"minimax-d2","moves":16,"totalMs":12.892,"maxMs":1.356,"nodes":3012,"searches":14,"deepSearches":14,"illegal":0},"blue":{"agent":"random","moves":15,"totalMs":0.113,"maxMs":0.028,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d2:random:11:b","n":5,"seed":2289349908,"round":11,"result":"win","winner":"blue","drawReason":null,"turns":26,"red":{"agent":"random","moves":13,"totalMs":0.074,"maxMs":0.009,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":13,"totalMs":11.746,"maxMs":1.573,"nodes":2667,"searches":11,"deepSearches":11,"illegal":0}},{"id":"5:minimax-d2:random:12:a","n":5,"seed":4288819082,"round":12,"result":"win","winner":"red","drawReason":null,"turns":27,"red":{"agent":"minimax-d2","moves":14,"totalMs":15.496,"maxMs":1.922,"nodes":3122,"searches":12,"deepSearches":12,"illegal":0},"blue":{"agent":"random","moves":13,"totalMs":0.103,"maxMs":0.021,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d2:random:12:b","n":5,"seed":4288819082,"round":12,"result":"win","winner":"blue","drawReason":null,"turns":24,"red":{"agent":"random","moves":12,"totalMs":0.124,"maxMs":0.036,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":12,"totalMs":12.302,"maxMs":2.107,"nodes":2332,"searches":10,"deepSearches":10,"illegal":0}},{"id":"5:minimax-d2:random:13:a","n":5,"seed":1288212864,"round":13,"result":"win","winner":"red","drawReason":null,"turns":25,"red":{"agent":"minimax-d2","moves":13,"totalMs":16.264,"maxMs":1.998,"nodes":3163,"searches":11,"deepSearches":11,"illegal":0},"blue":{"agent":"random","moves":12,"totalMs":0.126,"maxMs":0.023,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d2:random:13:b","n":5,"seed":1288212864,"round":13,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"random","moves":9,"totalMs":0.104,"maxMs":0.047,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":8,"totalMs":15.062,"maxMs":3.037,"nodes":1973,"searches":7,"deepSearches":7,"illegal":0}},{"id":"5:minimax-d2:random:14:a","n":5,"seed":3178020408,"round":14,"result":"win","winner":"red","drawReason":null,"turns":19,"red":{"agent":"minimax-d2","moves":10,"totalMs":12.656,"maxMs":2.08,"nodes":2436,"searches":8,"deepSearches":8,"illegal":0},"blue":{"agent":"random","moves":9,"totalMs":0.068,"maxMs":0.02,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d2:random:14:b","n":5,"seed":3178020408,"round":14,"result":"win","winner":"blue","drawReason":null,"turns":28,"red":{"agent":"random","moves":14,"totalMs":0.155,"maxMs":0.041,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":14,"totalMs":17.008,"maxMs":2.265,"nodes":2728,"searches":12,"deepSearches":12,"illegal":0}},{"id":"5:minimax-d2:random:15:a","n":5,"seed":856633910,"round":15,"result":"win","winner":"red","drawReason":null,"turns":21,"red":{"agent":"minimax-d2","moves":11,"totalMs":11.529,"maxMs":1.685,"nodes":2793,"searches":9,"deepSearches":9,"illegal":0},"blue":{"agent":"random","moves":10,"totalMs":0.052,"maxMs":0.009,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d2:random:15:b","n":5,"seed":856633910,"round":15,"result":"win","winner":"blue","drawReason":null,"turns":22,"red":{"agent":"random","moves":11,"totalMs":0.064,"maxMs":0.009,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":11,"totalMs":12.119,"maxMs":2.768,"nodes":2516,"searches":9,"deepSearches":9,"illegal":0}},{"id":"5:minimax-d2:random:16:a","n":5,"seed":2521500577,"round":16,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"minimax-d2","moves":8,"totalMs":8.112,"maxMs":1.851,"nodes":2084,"searches":6,"deepSearches":6,"illegal":0},"blue":{"agent":"random","moves":7,"totalMs":0.038,"maxMs":0.019,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d2:random:16:b","n":5,"seed":2521500577,"round":16,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"random","moves":8,"totalMs":0.036,"maxMs":0.006,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":8,"totalMs":8.545,"maxMs":1.863,"nodes":2136,"searches":6,"deepSearches":6,"illegal":0}},{"id":"5:minimax-d2:random:17:a","n":5,"seed":3137397964,"round":17,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"minimax-d2","moves":8,"totalMs":8.969,"maxMs":1.725,"nodes":2024,"searches":6,"deepSearches":6,"illegal":0},"blue":{"agent":"random","moves":7,"totalMs":0.031,"maxMs":0.009,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d2:random:17:b","n":5,"seed":3137397964,"round":17,"result":"win","winner":"blue","drawReason":null,"turns":22,"red":{"agent":"random","moves":11,"totalMs":0.055,"maxMs":0.008,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":11,"totalMs":10.345,"maxMs":1.531,"nodes":2505,"searches":9,"deepSearches":9,"illegal":0}},{"id":"5:minimax-d2:random:18:a","n":5,"seed":3591579908,"round":18,"result":"win","winner":"red","drawReason":null,"turns":25,"red":{"agent":"minimax-d2","moves":13,"totalMs":11.927,"maxMs":1.897,"nodes":2610,"searches":11,"deepSearches":11,"illegal":0},"blue":{"agent":"random","moves":12,"totalMs":0.095,"maxMs":0.02,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d2:random:18:b","n":5,"seed":3591579908,"round":18,"result":"win","winner":"blue","drawReason":null,"turns":18,"red":{"agent":"random","moves":9,"totalMs":0.04,"maxMs":0.011,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":9,"totalMs":9.436,"maxMs":1.707,"nodes":2137,"searches":7,"deepSearches":7,"illegal":0}},{"id":"5:minimax-d2:random:19:a","n":5,"seed":3427584984,"round":19,"result":"win","winner":"red","drawReason":null,"turns":21,"red":{"agent":"minimax-d2","moves":11,"totalMs":11.246,"maxMs":1.653,"nodes":3043,"searches":9,"deepSearches":9,"illegal":0},"blue":{"agent":"random","moves":10,"totalMs":0.049,"maxMs":0.007,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d2:random:19:b","n":5,"seed":3427584984,"round":19,"result":"win","winner":"blue","drawReason":null,"turns":18,"red":{"agent":"random","moves":9,"totalMs":0.044,"maxMs":0.008,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":9,"totalMs":10.346,"maxMs":2.545,"nodes":2299,"searches":7,"deepSearches":7,"illegal":0}},{"id":"5:minimax-d3:greedy:0:a","n":5,"seed":3669876099,"round":0,"result":"win","winner":"red","drawReason":null,"turns":21,"red":{"agent":"minimax-d3","moves":11,"totalMs":185.16,"maxMs":34.596,"nodes":44135,"searches":9,"deepSearches":9,"illegal":0},"blue":{"agent":"greedy","moves":10,"totalMs":1.051,"maxMs":0.171,"nodes":174,"searches":10,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d3:greedy:0:b","n":5,"seed":3669876099,"round":0,"result":"win","winner":"blue","drawReason":null,"turns":12,"red":{"agent":"greedy","moves":6,"totalMs":0.978,"maxMs":0.377,"nodes":125,"searches":6,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":6,"totalMs":122.964,"maxMs":33.161,"nodes":25804,"searches":4,"deepSearches":4,"illegal":0}},{"id":"5:minimax-d3:greedy:1:a","n":5,"seed":2520753804,"round":1,"result":"win","winner":"blue","drawReason":null,"turns":26,"red":{"agent":"minimax-d3","moves":13,"totalMs":282.311,"maxMs":56.273,"nodes":50014,"searches":12,"deepSearches":12,"illegal":0},"blue":{"agent":"greedy","moves":13,"totalMs":1.738,"maxMs":0.267,"nodes":206,"searches":12,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d3:greedy:1:b","n":5,"seed":2520753804,"round":1,"result":"win","winner":"blue","drawReason":null,"turns":22,"red":{"agent":"greedy","moves":11,"totalMs":1.597,"maxMs":0.314,"nodes":175,"searches":11,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":11,"totalMs":182.21,"maxMs":40.985,"nodes":31149,"searches":9,"deepSearches":9,"illegal":0}},{"id":"5:minimax-d3:greedy:2:a","n":5,"seed":4209688703,"round":2,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"minimax-d3","moves":9,"totalMs":334.03,"maxMs":84.772,"nodes":44776,"searches":7,"deepSearches":7,"illegal":0},"blue":{"agent":"greedy","moves":8,"totalMs":1.58,"maxMs":0.502,"nodes":158,"searches":8,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d3:greedy:2:b","n":5,"seed":4209688703,"round":2,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"greedy","moves":7,"totalMs":1.141,"maxMs":0.333,"nodes":139,"searches":7,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":7,"totalMs":214.509,"maxMs":56.827,"nodes":28261,"searches":5,"deepSearches":5,"illegal":0}},{"id":"5:minimax-d3:greedy:3:a","n":5,"seed":4136962505,"round":3,"result":"win","winner":"red","drawReason":null,"turns":23,"red":{"agent":"minimax-d3","moves":12,"totalMs":235.865,"maxMs":46.439,"nodes":43848,"searches":10,"deepSearches":10,"illegal":0},"blue":{"agent":"greedy","moves":11,"totalMs":1.249,"maxMs":0.185,"nodes":176,"searches":11,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d3:greedy:3:b","n":5,"seed":4136962505,"round":3,"result":"win","winner":"red","drawReason":null,"turns":23,"red":{"agent":"greedy","moves":12,"totalMs":1.389,"maxMs":0.253,"nodes":175,"searches":11,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":11,"totalMs":163.7,"maxMs":36.944,"nodes":31188,"searches":10,"deepSearches":10,"illegal":0}},{"id":"5:minimax-d3:greedy:4:a","n":5,"seed":2805139624,"round":4,"result":"win","winner":"red","drawReason":null,"turns":19,"red":{"agent":"minimax-d3","moves":10,"totalMs":220.639,"maxMs":35.073,"nodes":43220,"searches":8,"deepSearches":8,"illegal":0},"blue":{"agent":"greedy","moves":9,"totalMs":1.126,"maxMs":0.204,"nodes":162,"searches":9,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d3:greedy:4:b","n":5,"seed":2805139624,"round":4,"result":"win","winner":"red","drawReason":null,"turns":21,"red":{"agent":"greedy","moves":11,"totalMs":1.256,"maxMs":0.249,"nodes":169,"searches":10,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":10,"totalMs":199.712,"maxMs":76.04,"nodes":30804,"searches":9,"deepSearches":9,"illegal":0}},{"id":"5:minimax-d3:greedy:5:a","n":5,"seed":3803462612,"round":5,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"minimax-d3","moves":8,"totalMs":189.372,"maxMs":43.111,"nodes":41020,"searches":6,"deepSearches":6,"illegal":0},"blue":{"agent":"greedy","moves":7,"totalMs":0.945,"maxMs":0.237,"nodes":142,"searches":7,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d3:greedy:5:b","n":5,"seed":3803462612,"round":5,"result":"win","winner":"blue","drawReason":null,"turns":20,"red":{"agent":"greedy","moves":10,"totalMs":1.547,"maxMs":0.499,"nodes":169,"searches":10,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":10,"totalMs":181.665,"maxMs":43.942,"nodes":30926,"searches":8,"deepSearches":8,"illegal":0}},{"id":"5:minimax-d3:greedy:6:a","n":5,"seed":823776380,"round":6,"result":"win","winner":"red","drawReason":null,"turns":29,"red":{"agent":"minimax-d3","moves":15,"totalMs":204.778,"maxMs":35.768,"nodes":44792,"searches":13,"deepSearches":13,"illegal":0},"blue":{"agent":"greedy","moves":14,"totalMs":1.436,"maxMs":0.157,"nodes":200,"searches":14,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d3:greedy:6:b","n":5,"seed":823776380,"round":6,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"greedy","moves":9,"totalMs":0.976,"maxMs":0.282,"nodes":151,"searches":8,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":8,"totalMs":148.702,"maxMs":38.361,"nodes":29388,"searches":7,"deepSearches":7,"illegal":0}},{"id":"5:minimax-d3:greedy:7:a","n":5,"seed":61426245,"round":7,"result":"win","winner":"red","drawReason":null,"turns":21,"red":{"agent":"minimax-d3","moves":11,"totalMs":285.445,"maxMs":60.658,"nodes":43692,"searches":9,"deepSearches":9,"illegal":0},"blue":{"agent":"greedy","moves":10,"totalMs":1.713,"maxMs":0.316,"nodes":170,"searches":10,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d3:greedy:7:b","n":5,"seed":61426245,"round":7,"result":"win","winner":"blue","drawReason":null,"turns":12,"red":{"agent":"greedy","moves":6,"totalMs":1.241,"maxMs":0.385,"nodes":125,"searches":6,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":6,"totalMs":180.146,"maxMs":48.631,"nodes":25875,"searches":4,"deepSearches":4,"illegal":0}},{"id":"5:minimax-d3:greedy:8:a","n":5,"seed":3466563122,"round":8,"result":"win","winner":"red","drawReason":null,"turns":25,"red":{"agent":"minimax-d3","moves":13,"totalMs":302.068,"maxMs":80.542,"nodes":43899,"searches":11,"deepSearches":11,"illegal":0},"blue":{"agent":"greedy","moves":12,"totalMs":1.95,"maxMs":0.434,"nodes":182,"searches":12,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d3:greedy:8:b","n":5,"seed":3466563122,"round":8,"result":"win","winner":"blue","drawReason":null,"turns":20,"red":{"agent":"greedy","moves":10,"totalMs":1.198,"maxMs":0.182,"nodes":171,"searches":10,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":10,"totalMs":145.635,"maxMs":35.659,"nodes":30982,"searches":8,"deepSearches":8,"illegal":0}},{"id":"5:minimax-d3:greedy:9:a","n":5,"seed":1601905598,"round":9,"result":"win","winner":"blue","drawReason":null,"turns":26,"red":{"agent":"minimax-d3","moves":13,"totalMs":179.52,"maxMs":34.86,"nodes":43867,"searches":12,"deepSearches":12,"illegal":0},"blue":{"agent":"greedy","moves":13,"totalMs":1.473,"maxMs":0.267,"nodes":180,"searches":12,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d3:greedy:9:b","n":5,"seed":1601905598,"round":9,"result":"win","winner":"blue","drawReason":null,"turns":18,"red":{"agent":"greedy","moves":9,"totalMs":1.079,"maxMs":0.276,"nodes":165,"searches":9,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":9,"totalMs":140.369,"maxMs":34.814,"nodes":31253,"searches":7,"deepSearches":7,"illegal":0}},{"id":"5:minimax-d3:greedy:10:a","n":5,"seed":1882580599,"round":10,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"minimax-d3","moves":9,"totalMs":189.098,"maxMs":44.542,"nodes":42343,"searches":7,"deepSearches":7,"illegal":0},"blue":{"agent":"greedy","moves":8,"totalMs":1.109,"maxMs":0.295,"nodes":152,"searches":8,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d3:greedy:10:b","n":5,"seed":1882580599,"round":10,"result":"win","winner":"blue","drawReason":null,"turns":24,"red":{"agent":"greedy","moves":12,"totalMs":1.472,"maxMs":0.267,"nodes":179,"searches":12,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":12,"totalMs":187.778,"maxMs":34.587,"nodes":31121,"searches":10,"deepSearches":10,"illegal":0}},{"id":"5:minimax-d3:greedy:11:a","n":5,"seed":3597402190,"round":11,"result":"win","winner":"red","drawReason":null,"turns":27,"red":{"agent":"minimax-d3","moves":14,"totalMs":250.922,"maxMs":43.769,"nodes":45938,"searches":12,"deepSearches":12,"illegal":0},"blue":{"agent":"greedy","moves":13,"totalMs":2.071,"maxMs":0.368,"nodes":202,"searches":13,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d3:greedy:11:b","n":5,"seed":3597402190,"round":11,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"greedy","moves":8,"totalMs":1.278,"maxMs":0.25,"nodes":151,"searches":8,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":8,"totalMs":162.775,"maxMs":43.599,"nodes":29718,"searches":6,"deepSearches":6,"illegal":0}},{"id":"5:minimax-d3:greedy:12:a","n":5,"seed":2708720597,"round":12,"result":"win","winner":"red","drawReason":null,"turns":23,"red":{"agent":"minimax-d3","moves":12,"totalMs":175.388,"maxMs":35.859,"nodes":43762,"searches":10,"deepSearches":10,"illegal":0},"blue":{"agent":"greedy","moves":11,"totalMs":1.213,"maxMs":0.294,"nodes":176,"searches":11,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d3:greedy:12:b","n":5,"seed":2708720597,"round":12,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"greedy","moves":7,"totalMs":0.618,"maxMs":0.11,"nodes":139,"searches":7,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":7,"totalMs":113.868,"maxMs":31.445,"nodes":28227,"searches":5,"deepSearches":5,"illegal":0}},{"id":"5:minimax-d3:greedy:13:a","n":5,"seed":3367530552,"round":13,"result":"win","winner":"red","drawReason":null,"turns":21,"red":{"agent":"minimax-d3","moves":11,"totalMs":178.32,"maxMs":32.143,"nodes":43649,"searches":9,"deepSearches":9,"illegal":0},"blue":{"agent":"greedy","moves":10,"totalMs":0.912,"maxMs":0.111,"nodes":170,"searches":10,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d3:greedy:13:b","n":5,"seed":3367530552,"round":13,"result":"win","winner":"blue","drawReason":null,"turns":20,"red":{"agent":"greedy","moves":10,"totalMs":1.063,"maxMs":0.188,"nodes":169,"searches":10,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":10,"totalMs":138.126,"maxMs":31.706,"nodes":31052,"searches":8,"deepSearches":8,"illegal":0}},{"id":"5:minimax-d3:greedy:14:a","n":5,"seed":859808517,"round":14,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"minimax-d3","moves":8,"totalMs":161.244,"maxMs":33.508,"nodes":42181,"searches":7,"deepSearches":7,"illegal":0},"blue":{"agent":"greedy","moves":8,"totalMs":0.726,"maxMs":0.137,"nodes":140,"searches":7,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d3:greedy:14:b","n":5,"seed":859808517,"round":14,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"greedy","moves":8,"totalMs":0.706,"maxMs":0.109,"nodes":139,"searches":7,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":7,"totalMs":133.773,"maxMs":34.941,"nodes":28542,"searches":6,"deepSearches":6,"illegal":0}},{"id":"5:minimax-d3:greedy:15:a","n":5,"seed":2266626337,"round":15,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"minimax-d3","moves":9,"totalMs":203.245,"maxMs":57.338,"nodes":42451,"searches":7,"deepSearches":7,"illegal":0},"blue":{"agent":"greedy","moves":8,"totalMs":0.889,"maxMs":0.19,"nodes":152,"searches":8,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d3:greedy:15:b","n":5,"seed":2266626337,"round":15,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"greedy","moves":8,"totalMs":0.984,"maxMs":0.257,"nodes":139,"searches":7,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":7,"totalMs":152.488,"maxMs":35.301,"nodes":28739,"searches":6,"deepSearches":6,"illegal":0}},{"id":"5:minimax-d3:greedy:16:a","n":5,"seed":3410380811,"round":16,"result":"win","winner":"red","drawReason":null,"turns":27,"red":{"agent":"minimax-d3","moves":14,"totalMs":251.726,"maxMs":50.619,"nodes":45913,"searches":12,"deepSearches":12,"illegal":0},"blue":{"agent":"greedy","moves":13,"totalMs":1.696,"maxMs":0.258,"nodes":204,"searches":13,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d3:greedy:16:b","n":5,"seed":3410380811,"round":16,"result":"win","winner":"red","drawReason":null,"turns":19,"red":{"agent":"greedy","moves":10,"totalMs":0.872,"maxMs":0.148,"nodes":161,"searches":9,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":9,"totalMs":125.719,"maxMs":29.601,"nodes":30209,"searches":8,"deepSearches":8,"illegal":0}},{"id":"5:minimax-d3:greedy:17:a","n":5,"seed":3239241338,"round":17,"result":"win","winner":"red","drawReason":null,"turns":21,"red":{"agent":"minimax-d3","moves":11,"totalMs":170.911,"maxMs":31.503,"nodes":44142,"searches":9,"deepSearches":9,"illegal":0},"blue":{"agent":"greedy","moves":10,"totalMs":0.985,"maxMs":0.114,"nodes":174,"searches":10,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d3:greedy:17:b","n":5,"seed":3239241338,"round":17,"result":"win","winner":"blue","drawReason":null,"turns":20,"red":{"agent":"greedy","moves":10,"totalMs":1.401,"maxMs":0.245,"nodes":171,"searches":10,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":10,"totalMs":172.665,"maxMs":38.973,"nodes":30954,"searches":8,"deepSearches":8,"illegal":0}},{"id":"5:minimax-d3:greedy:18:a","n":5,"seed":286974457,"round":18,"result":"win","winner":"red","drawReason":null,"turns":23,"red":{"agent":"minimax-d3","moves":12,"totalMs":320.852,"maxMs":73.093,"nodes":43838,"searches":10,"deepSearches":10,"illegal":0},"blue":{"agent":"greedy","moves":11,"totalMs":1.314,"maxMs":0.247,"nodes":176,"searches":11,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d3:greedy:18:b","n":5,"seed":286974457,"round":18,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"greedy","moves":8,"totalMs":1.311,"maxMs":0.485,"nodes":151,"searches":8,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":8,"totalMs":170.465,"maxMs":40.434,"nodes":29769,"searches":6,"deepSearches":6,"illegal":0}},{"id":"5:minimax-d3:greedy:19:a","n":5,"seed":296689867,"round":19,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"minimax-d3","moves":7,"totalMs":175.627,"maxMs":40.548,"nodes":40606,"searches":6,"deepSearches":6,"illegal":0},"blue":{"agent":"greedy","moves":7,"totalMs":0.676,"maxMs":0.165,"nodes":126,"searches":6,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d3:greedy:19:b","n":5,"seed":296689867,"round":19,"result":"win","winner":"blue","drawReason":null,"turns":18,"red":{"agent":"greedy","moves":9,"totalMs":0.909,"maxMs":0.203,"nodes":161,"searches":9,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":9,"totalMs":131.254,"maxMs":30.111,"nodes":30559,"searches":7,"deepSearches":7,"illegal":0}},{"id":"5:minimax-d3:random:0:a","n":5,"seed":20425136,"round":0,"result":"win","winner":"red","drawReason":null,"turns":21,"red":{"agent":"minimax-d3","moves":11,"totalMs":180.93,"maxMs":35.79,"nodes":41314,"searches":9,"deepSearches":9,"illegal":0},"blue":{"agent":"random","moves":10,"totalMs":0.108,"maxMs":0.017,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d3:random:0:b","n":5,"seed":20425136,"round":0,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"random","moves":8,"totalMs":0.065,"maxMs":0.012,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":7,"totalMs":125.182,"maxMs":33.491,"nodes":32060,"searches":6,"deepSearches":6,"illegal":0}},{"id":"5:minimax-d3:random:1:a","n":5,"seed":3911016521,"round":1,"result":"win","winner":"red","drawReason":null,"turns":25,"red":{"agent":"minimax-d3","moves":13,"totalMs":143.907,"maxMs":29.513,"nodes":38995,"searches":11,"deepSearches":11,"illegal":0},"blue":{"agent":"random","moves":12,"totalMs":0.102,"maxMs":0.012,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d3:random:1:b","n":5,"seed":3911016521,"round":1,"result":"win","winner":"blue","drawReason":null,"turns":22,"red":{"agent":"random","moves":11,"totalMs":0.096,"maxMs":0.019,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":11,"totalMs":195.456,"maxMs":60.723,"nodes":30043,"searches":9,"deepSearches":9,"illegal":0}},{"id":"5:minimax-d3:random:2:a","n":5,"seed":2614746446,"round":2,"result":"win","winner":"blue","drawReason":null,"turns":24,"red":{"agent":"minimax-d3","moves":12,"totalMs":161.194,"maxMs":30.018,"nodes":40231,"searches":11,"deepSearches":11,"illegal":0},"blue":{"agent":"random","moves":12,"totalMs":0.148,"maxMs":0.046,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d3:random:2:b","n":5,"seed":2614746446,"round":2,"result":"win","winner":"blue","drawReason":null,"turns":24,"red":{"agent":"random","moves":12,"totalMs":0.117,"maxMs":0.017,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":12,"totalMs":151.991,"maxMs":28.685,"nodes":36823,"searches":10,"deepSearches":10,"illegal":0}},{"id":"5:minimax-d3:random:3:a","n":5,"seed":312006548,"round":3,"result":"win","winner":"red","drawReason":null,"turns":21,"red":{"agent":"minimax-d3","moves":11,"totalMs":165.343,"maxMs":32.811,"nodes":38853,"searches":9,"deepSearches":9,"illegal":0},"blue":{"agent":"random","moves":10,"totalMs":0.113,"maxMs":0.016,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d3:random:3:b","n":5,"seed":312006548,"round":3,"result":"win","winner":"blue","drawReason":null,"turns":24,"red":{"agent":"random","moves":12,"totalMs":0.165,"maxMs":0.03,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":12,"totalMs":213.147,"maxMs":34.926,"nodes":35571,"searches":10,"deepSearches":10,"illegal":0}},{"id":"5:minimax-d3:random:4:a","n":5,"seed":3610653328,"round":4,"result":"win","winner":"red","drawReason":null,"turns":13,"red":{"agent":"minimax-d3","moves":7,"totalMs":177.652,"maxMs":53.734,"nodes":33162,"searches":5,"deepSearches":5,"illegal":0},"blue":{"agent":"random","moves":6,"totalMs":0.057,"maxMs":0.015,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d3:random:4:b","n":5,"seed":3610653328,"round":4,"result":"win","winner":"blue","drawReason":null,"turns":20,"red":{"agent":"random","moves":10,"totalMs":0.121,"maxMs":0.018,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":10,"totalMs":348.983,"maxMs":75.668,"nodes":34658,"searches":8,"deepSearches":8,"illegal":0}},{"id":"5:minimax-d3:random:5:a","n":5,"seed":3547502761,"round":5,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"minimax-d3","moves":9,"totalMs":187.922,"maxMs":46.16,"nodes":36228,"searches":7,"deepSearches":7,"illegal":0},"blue":{"agent":"random","moves":8,"totalMs":0.138,"maxMs":0.06,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d3:random:5:b","n":5,"seed":3547502761,"round":5,"result":"win","winner":"blue","drawReason":null,"turns":22,"red":{"agent":"random","moves":11,"totalMs":0.126,"maxMs":0.028,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":11,"totalMs":234.74,"maxMs":85.756,"nodes":31781,"searches":9,"deepSearches":9,"illegal":0}},{"id":"5:minimax-d3:random:6:a","n":5,"seed":3143705393,"round":6,"result":"win","winner":"red","drawReason":null,"turns":31,"red":{"agent":"minimax-d3","moves":16,"totalMs":241.851,"maxMs":53.021,"nodes":51838,"searches":14,"deepSearches":14,"illegal":0},"blue":{"agent":"random","moves":15,"totalMs":0.217,"maxMs":0.024,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d3:random:6:b","n":5,"seed":3143705393,"round":6,"result":"win","winner":"blue","drawReason":null,"turns":22,"red":{"agent":"random","moves":11,"totalMs":0.111,"maxMs":0.015,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":11,"totalMs":160.559,"maxMs":33.442,"nodes":36515,"searches":9,"deepSearches":9,"illegal":0}},{"id":"5:minimax-d3:random:7:a","n":5,"seed":3775448606,"round":7,"result":"win","winner":"red","drawReason":null,"turns":25,"red":{"agent":"minimax-d3","moves":13,"totalMs":177.275,"maxMs":33.721,"nodes":41186,"searches":11,"deepSearches":11,"illegal":0},"blue":{"agent":"random","moves":12,"totalMs":0.137,"maxMs":0.017,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d3:random:7:b","n":5,"seed":3775448606,"round":7,"result":"win","winner":"blue","drawReason":null,"turns":26,"red":{"agent":"random","moves":13,"totalMs":0.144,"maxMs":0.018,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":13,"totalMs":202.585,"maxMs":35.239,"nodes":44338,"searches":11,"deepSearches":11,"illegal":0}},{"id":"5:minimax-d3:random:8:a","n":5,"seed":3267483643,"round":8,"result":"win","winner":"red","drawReason":null,"turns":27,"red":{"agent":"minimax-d3","moves":14,"totalMs":200.835,"maxMs":33.336,"nodes":44775,"searches":12,"deepSearches":12,"illegal":0},"blue":{"agent":"random","moves":13,"totalMs":0.166,"maxMs":0.031,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d3:random:8:b","n":5,"seed":3267483643,"round":8,"result":"win","winner":"blue","drawReason":null,"turns":20,"red":{"agent":"random","moves":10,"totalMs":0.098,"maxMs":0.016,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":10,"totalMs":170.715,"maxMs":32.687,"nodes":36004,"searches":8,"deepSearches":8,"illegal":0}},{"id":"5:minimax-d3:random:9:a","n":5,"seed":4276935363,"round":9,"result":"win","winner":"red","drawReason":null,"turns":13,"red":{"agent":"minimax-d3","moves":7,"totalMs":135.956,"maxMs":33.094,"nodes":38813,"searches":5,"deepSearches":5,"illegal":0},"blue":{"agent":"random","moves":6,"totalMs":0.064,"maxMs":0.023,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d3:random:9:b","n":5,"seed":4276935363,"round":9,"result":"win","winner":"blue","drawReason":null,"turns":22,"red":{"agent":"random","moves":11,"totalMs":0.096,"maxMs":0.013,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":11,"totalMs":137.799,"maxMs":31.542,"nodes":31102,"searches":9,"deepSearches":9,"illegal":0}},{"id":"5:minimax-d3:random:10:a","n":5,"seed":1884031185,"round":10,"result":"win","winner":"red","drawReason":null,"turns":23,"red":{"agent":"minimax-d3","moves":12,"totalMs":194.95,"maxMs":40.421,"nodes":45198,"searches":10,"deepSearches":10,"illegal":0},"blue":{"agent":"random","moves":11,"totalMs":0.25,"maxMs":0.125,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d3:random:10:b","n":5,"seed":1884031185,"round":10,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"random","moves":7,"totalMs":0.061,"maxMs":0.015,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":7,"totalMs":129.934,"maxMs":32.181,"nodes":31178,"searches":5,"deepSearches":5,"illegal":0}},{"id":"5:minimax-d3:random:11:a","n":5,"seed":2474599747,"round":11,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"minimax-d3","moves":8,"totalMs":148.096,"maxMs":33.235,"nodes":39354,"searches":6,"deepSearches":6,"illegal":0},"blue":{"agent":"random","moves":7,"totalMs":0.057,"maxMs":0.012,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d3:random:11:b","n":5,"seed":2474599747,"round":11,"result":"win","winner":"red","drawReason":null,"turns":23,"red":{"agent":"random","moves":12,"totalMs":0.114,"maxMs":0.016,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":11,"totalMs":159.103,"maxMs":30.547,"nodes":37890,"searches":10,"deepSearches":10,"illegal":0}},{"id":"5:minimax-d3:random:12:a","n":5,"seed":2103208095,"round":12,"result":"win","winner":"red","drawReason":null,"turns":23,"red":{"agent":"minimax-d3","moves":12,"totalMs":163.802,"maxMs":30.754,"nodes":43852,"searches":10,"deepSearches":10,"illegal":0},"blue":{"agent":"random","moves":11,"totalMs":0.103,"maxMs":0.017,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d3:random:12:b","n":5,"seed":2103208095,"round":12,"result":"win","winner":"blue","drawReason":null,"turns":28,"red":{"agent":"random","moves":14,"totalMs":0.142,"maxMs":0.016,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":14,"totalMs":177.628,"maxMs":31.75,"nodes":41300,"searches":12,"deepSearches":12,"illegal":0}},{"id":"5:minimax-d3:random:13:a","n":5,"seed":728070758,"round":13,"result":"win","winner":"red","drawReason":null,"turns":27,"red":{"agent":"minimax-d3","moves":14,"totalMs":160.338,"maxMs":31.759,"nodes":38499,"searches":12,"deepSearches":12,"illegal":0},"blue":{"agent":"random","moves":13,"totalMs":0.15,"maxMs":0.022,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d3:random:13:b","n":5,"seed":728070758,"round":13,"result":"win","winner":"blue","drawReason":null,"turns":24,"red":{"agent":"random","moves":12,"totalMs":0.137,"maxMs":0.022,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":12,"totalMs":167.376,"maxMs":31.389,"nodes":37994,"searches":10,"deepSearches":10,"illegal":0}},{"id":"5:minimax-d3:random:14:a","n":5,"seed":2473442876,"round":14,"result":"win","winner":"red","drawReason":null,"turns":25,"red":{"agent":"minimax-d3","moves":13,"totalMs":159.963,"maxMs":30.997,"nodes":39279,"searches":11,"deepSearches":11,"illegal":0},"blue":{"agent":"random","moves":12,"totalMs":0.137,"maxMs":0.027,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d3:random:14:b","n":5,"seed":2473442876,"round":14,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"random","moves":7,"totalMs":0.056,"maxMs":0.015,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":7,"totalMs":91.591,"maxMs":41.331,"nodes":21382,"searches":5,"deepSearches":5,"illegal":0}},{"id":"5:minimax-d3:random:15:a","n":5,"seed":688168107,"round":15,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"minimax-d3","moves":9,"totalMs":151.649,"maxMs":31.65,"nodes":42107,"searches":7,"deepSearches":7,"illegal":0},"blue":{"agent":"random","moves":8,"totalMs":0.089,"maxMs":0.015,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d3:random:15:b","n":5,"seed":688168107,"round":15,"result":"win","winner":"blue","drawReason":null,"turns":12,"red":{"agent":"random","moves":6,"totalMs":0.041,"maxMs":0.011,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":6,"totalMs":102.21,"maxMs":30.257,"nodes":25872,"searches":4,"deepSearches":4,"illegal":0}},{"id":"5:minimax-d3:random:16:a","n":5,"seed":1766073184,"round":16,"result":"win","winner":"blue","drawReason":null,"turns":20,"red":{"agent":"minimax-d3","moves":10,"totalMs":157.768,"maxMs":31.996,"nodes":44617,"searches":9,"deepSearches":9,"illegal":0},"blue":{"agent":"random","moves":10,"totalMs":0.087,"maxMs":0.012,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d3:random:16:b","n":5,"seed":1766073184,"round":16,"result":"win","winner":"blue","drawReason":null,"turns":20,"red":{"agent":"random","moves":10,"totalMs":0.075,"maxMs":0.011,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":10,"totalMs":131.292,"maxMs":28.964,"nodes":32950,"searches":8,"deepSearches":8,"illegal":0}},{"id":"5:minimax-d3:random:17:a","n":5,"seed":2906873132,"round":17,"result":"win","winner":"red","drawReason":null,"turns":25,"red":{"agent":"minimax-d3","moves":13,"totalMs":222.099,"maxMs":39.865,"nodes":54981,"searches":11,"deepSearches":11,"illegal":0},"blue":{"agent":"random","moves":12,"totalMs":0.135,"maxMs":0.018,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d3:random:17:b","n":5,"seed":2906873132,"round":17,"result":"win","winner":"blue","drawReason":null,"turns":20,"red":{"agent":"random","moves":10,"totalMs":0.087,"maxMs":0.014,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":10,"totalMs":153.754,"maxMs":28.259,"nodes":40563,"searches":8,"deepSearches":8,"illegal":0}},{"id":"5:minimax-d3:random:18:a","n":5,"seed":2001874700,"round":18,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"minimax-d3","moves":9,"totalMs":128.12,"maxMs":28.931,"nodes":36192,"searches":7,"deepSearches":7,"illegal":0},"blue":{"agent":"random","moves":8,"totalMs":0.087,"maxMs":0.034,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d3:random:18:b","n":5,"seed":2001874700,"round":18,"result":"win","winner":"blue","drawReason":null,"turns":20,"red":{"agent":"random","moves":10,"totalMs":0.084,"maxMs":0.011,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":10,"totalMs":149.349,"maxMs":28.993,"nodes":39665,"searches":8,"deepSearches":8,"illegal":0}},{"id":"5:minimax-d3:random:19:a","n":5,"seed":3466055151,"round":19,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"minimax-d3","moves":9,"totalMs":139.699,"maxMs":31.821,"nodes":36194,"searches":7,"deepSearches":7,"illegal":0},"blue":{"agent":"random","moves":8,"totalMs":0.107,"maxMs":0.027,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:minimax-d3:random:19:b","n":5,"seed":3466055151,"round":19,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"random","moves":7,"totalMs":0.052,"maxMs":0.011,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":7,"totalMs":110.561,"maxMs":31.755,"nodes":28505,"searches":5,"deepSearches":5,"illegal":0}},{"id":"5:greedy:random:0:a","n":5,"seed":4284306191,"round":0,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"greedy","moves":9,"totalMs":0.746,"maxMs":0.205,"nodes":160,"searches":8,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":8,"totalMs":0.027,"maxMs":0.006,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:greedy:random:0:b","n":5,"seed":4284306191,"round":0,"result":"win","winner":"red","drawReason":null,"turns":21,"red":{"agent":"random","moves":11,"totalMs":0.041,"maxMs":0.006,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":10,"totalMs":0.93,"maxMs":0.176,"nodes":188,"searches":10,"deepSearches":0,"illegal":0}},{"id":"5:greedy:random:1:a","n":5,"seed":1867054296,"round":1,"result":"win","winner":"red","drawReason":null,"turns":19,"red":{"agent":"greedy","moves":10,"totalMs":0.69,"maxMs":0.088,"nodes":173,"searches":9,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":9,"totalMs":0.028,"maxMs":0.006,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:greedy:random:1:b","n":5,"seed":1867054296,"round":1,"result":"win","winner":"red","drawReason":null,"turns":31,"red":{"agent":"random","moves":16,"totalMs":0.079,"maxMs":0.01,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":15,"totalMs":1.241,"maxMs":0.097,"nodes":232,"searches":15,"deepSearches":0,"illegal":0}},{"id":"5:greedy:random:2:a","n":5,"seed":843646527,"round":2,"result":"win","winner":"red","drawReason":null,"turns":21,"red":{"agent":"greedy","moves":11,"totalMs":0.773,"maxMs":0.091,"nodes":190,"searches":10,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":10,"totalMs":0.035,"maxMs":0.006,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:greedy:random:2:b","n":5,"seed":843646527,"round":2,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"random","moves":8,"totalMs":0.02,"maxMs":0.004,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":8,"totalMs":0.603,"maxMs":0.118,"nodes":142,"searches":7,"deepSearches":0,"illegal":0}},{"id":"5:greedy:random:3:a","n":5,"seed":1875777075,"round":3,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"greedy","moves":9,"totalMs":0.628,"maxMs":0.098,"nodes":166,"searches":8,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":8,"totalMs":0.034,"maxMs":0.012,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:greedy:random:3:b","n":5,"seed":1875777075,"round":3,"result":"win","winner":"blue","drawReason":null,"turns":28,"red":{"agent":"random","moves":14,"totalMs":0.066,"maxMs":0.009,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":14,"totalMs":1.06,"maxMs":0.1,"nodes":204,"searches":13,"deepSearches":0,"illegal":0}},{"id":"5:greedy:random:4:a","n":5,"seed":4211304951,"round":4,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"greedy","moves":9,"totalMs":0.656,"maxMs":0.096,"nodes":161,"searches":8,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":8,"totalMs":0.028,"maxMs":0.008,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:greedy:random:4:b","n":5,"seed":4211304951,"round":4,"result":"win","winner":"blue","drawReason":null,"turns":22,"red":{"agent":"random","moves":11,"totalMs":0.037,"maxMs":0.007,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":11,"totalMs":0.875,"maxMs":0.141,"nodes":180,"searches":10,"deepSearches":0,"illegal":0}},{"id":"5:greedy:random:5:a","n":5,"seed":3984293353,"round":5,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"greedy","moves":8,"totalMs":0.516,"maxMs":0.088,"nodes":147,"searches":7,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":7,"totalMs":0.017,"maxMs":0.004,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:greedy:random:5:b","n":5,"seed":3984293353,"round":5,"result":"win","winner":"blue","drawReason":null,"turns":26,"red":{"agent":"random","moves":13,"totalMs":0.051,"maxMs":0.007,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":13,"totalMs":0.943,"maxMs":0.092,"nodes":196,"searches":12,"deepSearches":0,"illegal":0}},{"id":"5:greedy:random:6:a","n":5,"seed":1609711076,"round":6,"result":"win","winner":"red","drawReason":null,"turns":23,"red":{"agent":"greedy","moves":12,"totalMs":0.953,"maxMs":0.107,"nodes":193,"searches":11,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":11,"totalMs":0.044,"maxMs":0.007,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:greedy:random:6:b","n":5,"seed":1609711076,"round":6,"result":"win","winner":"blue","drawReason":null,"turns":28,"red":{"agent":"random","moves":14,"totalMs":0.066,"maxMs":0.011,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":14,"totalMs":1.191,"maxMs":0.196,"nodes":200,"searches":13,"deepSearches":0,"illegal":0}},{"id":"5:greedy:random:7:a","n":5,"seed":1131768598,"round":7,"result":"win","winner":"red","drawReason":null,"turns":21,"red":{"agent":"greedy","moves":11,"totalMs":0.8,"maxMs":0.089,"nodes":184,"searches":10,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":10,"totalMs":0.035,"maxMs":0.006,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:greedy:random:7:b","n":5,"seed":1131768598,"round":7,"result":"win","winner":"red","drawReason":null,"turns":23,"red":{"agent":"random","moves":12,"totalMs":0.045,"maxMs":0.007,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":11,"totalMs":0.879,"maxMs":0.09,"nodes":182,"searches":11,"deepSearches":0,"illegal":0}},{"id":"5:greedy:random:8:a","n":5,"seed":1062005759,"round":8,"result":"win","winner":"blue","drawReason":null,"turns":20,"red":{"agent":"greedy","moves":10,"totalMs":0.863,"maxMs":0.156,"nodes":179,"searches":10,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":10,"totalMs":0.036,"maxMs":0.006,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:greedy:random:8:b","n":5,"seed":1062005759,"round":8,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"random","moves":8,"totalMs":0.02,"maxMs":0.005,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":8,"totalMs":0.535,"maxMs":0.088,"nodes":140,"searches":7,"deepSearches":0,"illegal":0}},{"id":"5:greedy:random:9:a","n":5,"seed":2742123398,"round":9,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"greedy","moves":9,"totalMs":0.846,"maxMs":0.227,"nodes":164,"searches":8,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":8,"totalMs":0.034,"maxMs":0.01,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:greedy:random:9:b","n":5,"seed":2742123398,"round":9,"result":"win","winner":"blue","drawReason":null,"turns":26,"red":{"agent":"random","moves":13,"totalMs":0.054,"maxMs":0.008,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":13,"totalMs":1.091,"maxMs":0.1,"nodes":202,"searches":12,"deepSearches":0,"illegal":0}},{"id":"5:greedy:random:10:a","n":5,"seed":2155267654,"round":10,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"greedy","moves":9,"totalMs":0.685,"maxMs":0.165,"nodes":159,"searches":8,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":8,"totalMs":0.024,"maxMs":0.005,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:greedy:random:10:b","n":5,"seed":2155267654,"round":10,"result":"win","winner":"blue","drawReason":null,"turns":28,"red":{"agent":"random","moves":14,"totalMs":0.071,"maxMs":0.01,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":14,"totalMs":1.232,"maxMs":0.149,"nodes":226,"searches":13,"deepSearches":0,"illegal":0}},{"id":"5:greedy:random:11:a","n":5,"seed":985971464,"round":11,"result":"win","winner":"red","drawReason":null,"turns":25,"red":{"agent":"greedy","moves":13,"totalMs":0.921,"maxMs":0.087,"nodes":197,"searches":12,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":12,"totalMs":0.049,"maxMs":0.008,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:greedy:random:11:b","n":5,"seed":985971464,"round":11,"result":"win","winner":"blue","drawReason":null,"turns":20,"red":{"agent":"random","moves":10,"totalMs":0.031,"maxMs":0.006,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":10,"totalMs":0.727,"maxMs":0.091,"nodes":162,"searches":9,"deepSearches":0,"illegal":0}},{"id":"5:greedy:random:12:a","n":5,"seed":2469517482,"round":12,"result":"win","winner":"red","drawReason":null,"turns":23,"red":{"agent":"greedy","moves":12,"totalMs":0.927,"maxMs":0.142,"nodes":205,"searches":11,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":11,"totalMs":0.039,"maxMs":0.006,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:greedy:random:12:b","n":5,"seed":2469517482,"round":12,"result":"win","winner":"blue","drawReason":null,"turns":22,"red":{"agent":"random","moves":11,"totalMs":0.043,"maxMs":0.009,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":11,"totalMs":0.899,"maxMs":0.111,"nodes":180,"searches":10,"deepSearches":0,"illegal":0}},{"id":"5:greedy:random:13:a","n":5,"seed":247293504,"round":13,"result":"win","winner":"red","drawReason":null,"turns":19,"red":{"agent":"greedy","moves":10,"totalMs":0.732,"maxMs":0.09,"nodes":165,"searches":9,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":9,"totalMs":0.031,"maxMs":0.006,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:greedy:random:13:b","n":5,"seed":247293504,"round":13,"result":"win","winner":"blue","drawReason":null,"turns":20,"red":{"agent":"random","moves":10,"totalMs":0.032,"maxMs":0.006,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":10,"totalMs":0.777,"maxMs":0.1,"nodes":166,"searches":9,"deepSearches":0,"illegal":0}},{"id":"5:greedy:random:14:a","n":5,"seed":1655621585,"round":14,"result":"win","winner":"red","drawReason":null,"turns":23,"red":{"agent":"greedy","moves":12,"totalMs":0.95,"maxMs":0.146,"nodes":209,"searches":11,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":11,"totalMs":0.039,"maxMs":0.006,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:greedy:random:14:b","n":5,"seed":1655621585,"round":14,"result":"win","winner":"blue","drawReason":null,"turns":28,"red":{"agent":"random","moves":14,"totalMs":0.062,"maxMs":0.008,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":14,"totalMs":1.105,"maxMs":0.097,"nodes":212,"searches":13,"deepSearches":0,"illegal":0}},{"id":"5:greedy:random:15:a","n":5,"seed":4236179319,"round":15,"result":"win","winner":"red","drawReason":null,"turns":15,"red":{"agent":"greedy","moves":8,"totalMs":0.545,"maxMs":0.095,"nodes":147,"searches":7,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":7,"totalMs":0.02,"maxMs":0.005,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:greedy:random:15:b","n":5,"seed":4236179319,"round":15,"result":"win","winner":"blue","drawReason":null,"turns":14,"red":{"agent":"random","moves":7,"totalMs":0.016,"maxMs":0.004,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":7,"totalMs":0.478,"maxMs":0.094,"nodes":130,"searches":6,"deepSearches":0,"illegal":0}},{"id":"5:greedy:random:16:a","n":5,"seed":368218006,"round":16,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"greedy","moves":9,"totalMs":0.674,"maxMs":0.137,"nodes":157,"searches":8,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":8,"totalMs":0.023,"maxMs":0.005,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:greedy:random:16:b","n":5,"seed":368218006,"round":16,"result":"win","winner":"red","drawReason":null,"turns":25,"red":{"agent":"random","moves":13,"totalMs":0.05,"maxMs":0.007,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":12,"totalMs":0.924,"maxMs":0.089,"nodes":188,"searches":12,"deepSearches":0,"illegal":0}},{"id":"5:greedy:random:17:a","n":5,"seed":3676231428,"round":17,"result":"win","winner":"red","drawReason":null,"turns":25,"red":{"agent":"greedy","moves":13,"totalMs":1.161,"maxMs":0.17,"nodes":208,"searches":12,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":12,"totalMs":0.056,"maxMs":0.009,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:greedy:random:17:b","n":5,"seed":3676231428,"round":17,"result":"win","winner":"blue","drawReason":null,"turns":26,"red":{"agent":"random","moves":13,"totalMs":0.056,"maxMs":0.007,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":13,"totalMs":1.048,"maxMs":0.175,"nodes":200,"searches":12,"deepSearches":0,"illegal":0}},{"id":"5:greedy:random:18:a","n":5,"seed":1131273406,"round":18,"result":"win","winner":"red","drawReason":null,"turns":27,"red":{"agent":"greedy","moves":14,"totalMs":0.984,"maxMs":0.086,"nodes":199,"searches":13,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":13,"totalMs":0.057,"maxMs":0.008,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:greedy:random:18:b","n":5,"seed":1131273406,"round":18,"result":"win","winner":"blue","drawReason":null,"turns":26,"red":{"agent":"random","moves":13,"totalMs":0.052,"maxMs":0.007,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":13,"totalMs":1.014,"maxMs":0.097,"nodes":202,"searches":12,"deepSearches":0,"illegal":0}},{"id":"5:greedy:random:19:a","n":5,"seed":1706090125,"round":19,"result":"win","winner":"blue","drawReason":null,"turns":20,"red":{"agent":"greedy","moves":10,"totalMs":0.891,"maxMs":0.179,"nodes":177,"searches":10,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":10,"totalMs":0.038,"maxMs":0.006,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"5:greedy:random:19:b","n":5,"seed":1706090125,"round":19,"result":"win","winner":"blue","drawReason":null,"turns":30,"red":{"agent":"random","moves":15,"totalMs":0.067,"maxMs":0.009,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":15,"totalMs":1.172,"maxMs":0.117,"nodes":209,"searches":14,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d2:0:a","n":6,"seed":2264427037,"round":0,"result":"win","winner":"red","drawReason":null,"turns":33,"red":{"agent":"minimax-dynamic","moves":17,"totalMs":2.264,"maxMs":0.172,"nodes":346,"searches":15,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":16,"totalMs":39.083,"maxMs":3.734,"nodes":7587,"searches":15,"deepSearches":15,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d2:0:b","n":6,"seed":2264427037,"round":0,"result":"win","winner":"blue","drawReason":null,"turns":26,"red":{"agent":"minimax-d2","moves":13,"totalMs":37.85,"maxMs":4.115,"nodes":7496,"searches":12,"deepSearches":12,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":13,"totalMs":2.002,"maxMs":0.292,"nodes":275,"searches":11,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d2:1:a","n":6,"seed":2864164822,"round":1,"result":"win","winner":"blue","drawReason":null,"turns":36,"red":{"agent":"minimax-dynamic","moves":18,"totalMs":2.645,"maxMs":0.224,"nodes":362,"searches":17,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":18,"totalMs":40.278,"maxMs":4.034,"nodes":7626,"searches":16,"deepSearches":16,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d2:1:b","n":6,"seed":2864164822,"round":1,"result":"win","winner":"blue","drawReason":null,"turns":26,"red":{"agent":"minimax-d2","moves":13,"totalMs":37.268,"maxMs":3.838,"nodes":7618,"searches":12,"deepSearches":12,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":13,"totalMs":2.012,"maxMs":0.332,"nodes":277,"searches":11,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d2:2:a","n":6,"seed":1058628940,"round":2,"result":"win","winner":"blue","drawReason":null,"turns":28,"red":{"agent":"minimax-dynamic","moves":14,"totalMs":2.009,"maxMs":0.197,"nodes":312,"searches":13,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":14,"totalMs":35.221,"maxMs":3.815,"nodes":6932,"searches":12,"deepSearches":12,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d2:2:b","n":6,"seed":1058628940,"round":2,"result":"win","winner":"blue","drawReason":null,"turns":40,"red":{"agent":"minimax-d2","moves":20,"totalMs":44.134,"maxMs":4.235,"nodes":8170,"searches":19,"deepSearches":19,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":20,"totalMs":2.993,"maxMs":0.351,"nodes":352,"searches":18,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d2:3:a","n":6,"seed":1293994995,"round":3,"result":"win","winner":"blue","drawReason":null,"turns":30,"red":{"agent":"minimax-dynamic","moves":15,"totalMs":2.324,"maxMs":0.298,"nodes":330,"searches":14,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":15,"totalMs":37.98,"maxMs":3.771,"nodes":7191,"searches":13,"deepSearches":13,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d2:3:b","n":6,"seed":1293994995,"round":3,"result":"win","winner":"blue","drawReason":null,"turns":28,"red":{"agent":"minimax-d2","moves":14,"totalMs":39.354,"maxMs":4.08,"nodes":7618,"searches":13,"deepSearches":13,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":14,"totalMs":1.975,"maxMs":0.188,"nodes":288,"searches":12,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d2:4:a","n":6,"seed":418950961,"round":4,"result":"win","winner":"blue","drawReason":null,"turns":30,"red":{"agent":"minimax-dynamic","moves":15,"totalMs":2.345,"maxMs":0.222,"nodes":338,"searches":14,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":15,"totalMs":39.907,"maxMs":3.982,"nodes":7511,"searches":13,"deepSearches":13,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d2:4:b","n":6,"seed":418950961,"round":4,"result":"win","winner":"red","drawReason":null,"turns":25,"red":{"agent":"minimax-d2","moves":13,"totalMs":37.529,"maxMs":4.238,"nodes":7392,"searches":11,"deepSearches":11,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":12,"totalMs":1.93,"maxMs":0.285,"nodes":279,"searches":11,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d2:5:a","n":6,"seed":3925366516,"round":5,"result":"win","winner":"blue","drawReason":null,"turns":30,"red":{"agent":"minimax-dynamic","moves":15,"totalMs":2.323,"maxMs":0.215,"nodes":332,"searches":14,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":15,"totalMs":41.038,"maxMs":4.183,"nodes":7243,"searches":13,"deepSearches":13,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d2:5:b","n":6,"seed":3925366516,"round":5,"result":"win","winner":"blue","drawReason":null,"turns":18,"red":{"agent":"minimax-d2","moves":9,"totalMs":26.575,"maxMs":3.898,"nodes":6448,"searches":8,"deepSearches":8,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":9,"totalMs":1.23,"maxMs":0.274,"nodes":203,"searches":7,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d2:6:a","n":6,"seed":3844463854,"round":6,"result":"win","winner":"red","drawReason":null,"turns":27,"red":{"agent":"minimax-dynamic","moves":14,"totalMs":2.138,"maxMs":0.278,"nodes":300,"searches":12,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":13,"totalMs":36.111,"maxMs":3.723,"nodes":6932,"searches":12,"deepSearches":12,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d2:6:b","n":6,"seed":3844463854,"round":6,"result":"win","winner":"blue","drawReason":null,"turns":44,"red":{"agent":"minimax-d2","moves":22,"totalMs":43.609,"maxMs":4.092,"nodes":7960,"searches":21,"deepSearches":21,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":22,"totalMs":3.261,"maxMs":0.336,"nodes":372,"searches":20,"deepSearches":2,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d2:7:a","n":6,"seed":1907435595,"round":7,"result":"win","winner":"blue","drawReason":null,"turns":30,"red":{"agent":"minimax-dynamic","moves":15,"totalMs":2.311,"maxMs":0.225,"nodes":324,"searches":14,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":15,"totalMs":36.944,"maxMs":3.71,"nodes":7035,"searches":13,"deepSearches":13,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d2:7:b","n":6,"seed":1907435595,"round":7,"result":"win","winner":"red","drawReason":null,"turns":35,"red":{"agent":"minimax-d2","moves":18,"totalMs":41.937,"maxMs":3.961,"nodes":8098,"searches":16,"deepSearches":16,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":17,"totalMs":2.576,"maxMs":0.223,"nodes":338,"searches":16,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d2:8:a","n":6,"seed":113862939,"round":8,"result":"win","winner":"red","drawReason":null,"turns":23,"red":{"agent":"minimax-dynamic","moves":12,"totalMs":1.732,"maxMs":0.277,"nodes":270,"searches":10,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":11,"totalMs":33.291,"maxMs":3.891,"nodes":6590,"searches":10,"deepSearches":10,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d2:8:b","n":6,"seed":113862939,"round":8,"result":"win","winner":"red","drawReason":null,"turns":33,"red":{"agent":"minimax-d2","moves":17,"totalMs":38.533,"maxMs":3.734,"nodes":7752,"searches":15,"deepSearches":15,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":16,"totalMs":2.53,"maxMs":0.346,"nodes":317,"searches":15,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d2:9:a","n":6,"seed":34079558,"round":9,"result":"win","winner":"blue","drawReason":null,"turns":26,"red":{"agent":"minimax-dynamic","moves":13,"totalMs":2.052,"maxMs":0.34,"nodes":306,"searches":12,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":13,"totalMs":35.129,"maxMs":4.361,"nodes":6919,"searches":11,"deepSearches":11,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d2:9:b","n":6,"seed":34079558,"round":9,"result":"win","winner":"blue","drawReason":null,"turns":30,"red":{"agent":"minimax-d2","moves":15,"totalMs":40.986,"maxMs":4.047,"nodes":7960,"searches":14,"deepSearches":14,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":15,"totalMs":2.177,"maxMs":0.215,"nodes":307,"searches":13,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d2:10:a","n":6,"seed":371068814,"round":10,"result":"win","winner":"blue","drawReason":null,"turns":20,"red":{"agent":"minimax-dynamic","moves":10,"totalMs":1.53,"maxMs":0.211,"nodes":252,"searches":9,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":10,"totalMs":28.498,"maxMs":4.048,"nodes":6008,"searches":8,"deepSearches":8,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d2:10:b","n":6,"seed":371068814,"round":10,"result":"win","winner":"red","drawReason":null,"turns":21,"red":{"agent":"minimax-d2","moves":11,"totalMs":30.573,"maxMs":3.916,"nodes":6980,"searches":9,"deepSearches":9,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":10,"totalMs":1.353,"maxMs":0.179,"nodes":249,"searches":9,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d2:11:a","n":6,"seed":1235586954,"round":11,"result":"win","winner":"blue","drawReason":null,"turns":42,"red":{"agent":"minimax-dynamic","moves":21,"totalMs":3.408,"maxMs":0.264,"nodes":386,"searches":20,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":21,"totalMs":45.069,"maxMs":4.326,"nodes":7635,"searches":19,"deepSearches":19,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d2:11:b","n":6,"seed":1235586954,"round":11,"result":"win","winner":"blue","drawReason":null,"turns":32,"red":{"agent":"minimax-d2","moves":16,"totalMs":55.723,"maxMs":5.577,"nodes":7864,"searches":15,"deepSearches":15,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":16,"totalMs":3.457,"maxMs":0.401,"nodes":312,"searches":14,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d2:12:a","n":6,"seed":3630931622,"round":12,"result":"win","winner":"blue","drawReason":null,"turns":24,"red":{"agent":"minimax-dynamic","moves":12,"totalMs":2.633,"maxMs":0.293,"nodes":286,"searches":11,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":12,"totalMs":52.722,"maxMs":6.9,"nodes":6590,"searches":10,"deepSearches":10,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d2:12:b","n":6,"seed":3630931622,"round":12,"result":"win","winner":"blue","drawReason":null,"turns":22,"red":{"agent":"minimax-d2","moves":11,"totalMs":54.198,"maxMs":7.631,"nodes":7100,"searches":10,"deepSearches":10,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":11,"totalMs":3.245,"maxMs":0.59,"nodes":243,"searches":9,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d2:13:a","n":6,"seed":2421968397,"round":13,"result":"win","winner":"blue","drawReason":null,"turns":30,"red":{"agent":"minimax-dynamic","moves":15,"totalMs":2.619,"maxMs":0.368,"nodes":324,"searches":14,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":15,"totalMs":41.648,"maxMs":6.035,"nodes":7035,"searches":13,"deepSearches":13,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d2:13:b","n":6,"seed":2421968397,"round":13,"result":"win","winner":"red","drawReason":null,"turns":31,"red":{"agent":"minimax-d2","moves":16,"totalMs":39.197,"maxMs":3.797,"nodes":7700,"searches":14,"deepSearches":14,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":15,"totalMs":2.231,"maxMs":0.194,"nodes":308,"searches":14,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d2:14:a","n":6,"seed":2429611183,"round":14,"result":"win","winner":"red","drawReason":null,"turns":33,"red":{"agent":"minimax-dynamic","moves":17,"totalMs":3.158,"maxMs":0.439,"nodes":332,"searches":15,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":16,"totalMs":43.773,"maxMs":4.434,"nodes":7201,"searches":15,"deepSearches":15,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d2:14:b","n":6,"seed":2429611183,"round":14,"result":"win","winner":"blue","drawReason":null,"turns":24,"red":{"agent":"minimax-d2","moves":12,"totalMs":50.817,"maxMs":7.627,"nodes":7326,"searches":11,"deepSearches":11,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":12,"totalMs":2.642,"maxMs":0.509,"nodes":260,"searches":10,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d2:15:a","n":6,"seed":3145476703,"round":15,"result":"win","winner":"red","drawReason":null,"turns":25,"red":{"agent":"minimax-dynamic","moves":13,"totalMs":1.889,"maxMs":0.255,"nodes":294,"searches":11,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":12,"totalMs":39.635,"maxMs":5.605,"nodes":7077,"searches":11,"deepSearches":11,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d2:15:b","n":6,"seed":3145476703,"round":15,"result":"win","winner":"red","drawReason":null,"turns":31,"red":{"agent":"minimax-d2","moves":16,"totalMs":53.102,"maxMs":8.057,"nodes":7702,"searches":14,"deepSearches":14,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":15,"totalMs":3.61,"maxMs":0.456,"nodes":310,"searches":14,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d2:16:a","n":6,"seed":1912903639,"round":16,"result":"win","winner":"red","drawReason":null,"turns":25,"red":{"agent":"minimax-dynamic","moves":13,"totalMs":2.806,"maxMs":0.354,"nodes":286,"searches":11,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":12,"totalMs":48.348,"maxMs":6.696,"nodes":6787,"searches":11,"deepSearches":11,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d2:16:b","n":6,"seed":1912903639,"round":16,"result":"win","winner":"blue","drawReason":null,"turns":44,"red":{"agent":"minimax-d2","moves":22,"totalMs":55.51,"maxMs":5.321,"nodes":8962,"searches":21,"deepSearches":21,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":22,"totalMs":3.446,"maxMs":0.263,"nodes":394,"searches":20,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d2:17:a","n":6,"seed":2962343262,"round":17,"result":"win","winner":"blue","drawReason":null,"turns":28,"red":{"agent":"minimax-dynamic","moves":14,"totalMs":2.571,"maxMs":0.464,"nodes":316,"searches":13,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":14,"totalMs":43.208,"maxMs":6.104,"nodes":6988,"searches":12,"deepSearches":12,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d2:17:b","n":6,"seed":2962343262,"round":17,"result":"win","winner":"red","drawReason":null,"turns":45,"red":{"agent":"minimax-d2","moves":23,"totalMs":49.583,"maxMs":4.467,"nodes":8500,"searches":21,"deepSearches":21,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":22,"totalMs":3.628,"maxMs":0.35,"nodes":385,"searches":21,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d2:18:a","n":6,"seed":317039434,"round":18,"result":"win","winner":"blue","drawReason":null,"turns":30,"red":{"agent":"minimax-dynamic","moves":15,"totalMs":2.097,"maxMs":0.182,"nodes":322,"searches":14,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":15,"totalMs":35.707,"maxMs":3.55,"nodes":7033,"searches":13,"deepSearches":13,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d2:18:b","n":6,"seed":317039434,"round":18,"result":"win","winner":"blue","drawReason":null,"turns":26,"red":{"agent":"minimax-d2","moves":13,"totalMs":34.582,"maxMs":3.608,"nodes":7496,"searches":12,"deepSearches":12,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":13,"totalMs":1.768,"maxMs":0.208,"nodes":275,"searches":11,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d2:19:a","n":6,"seed":3051017648,"round":19,"result":"win","winner":"blue","drawReason":null,"turns":30,"red":{"agent":"minimax-dynamic","moves":15,"totalMs":2.197,"maxMs":0.226,"nodes":324,"searches":14,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":15,"totalMs":35.801,"maxMs":3.639,"nodes":7035,"searches":13,"deepSearches":13,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d2:19:b","n":6,"seed":3051017648,"round":19,"result":"win","winner":"red","drawReason":null,"turns":25,"red":{"agent":"minimax-d2","moves":13,"totalMs":32.836,"maxMs":3.542,"nodes":7326,"searches":11,"deepSearches":11,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":12,"totalMs":1.719,"maxMs":0.203,"nodes":275,"searches":11,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d3:0:a","n":6,"seed":3646807393,"round":0,"result":"win","winner":"red","drawReason":null,"turns":25,"red":{"agent":"minimax-dynamic","moves":13,"totalMs":2.064,"maxMs":0.374,"nodes":286,"searches":11,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":12,"totalMs":817.212,"maxMs":109.096,"nodes":167977,"searches":11,"deepSearches":11,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d3:0:b","n":6,"seed":3646807393,"round":0,"result":"win","winner":"red","drawReason":null,"turns":37,"red":{"agent":"minimax-d3","moves":19,"totalMs":1242.662,"maxMs":116.172,"nodes":198817,"searches":17,"deepSearches":17,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":18,"totalMs":4.596,"maxMs":0.627,"nodes":345,"searches":17,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d3:1:a","n":6,"seed":3337799031,"round":1,"result":"win","winner":"blue","drawReason":null,"turns":22,"red":{"agent":"minimax-dynamic","moves":11,"totalMs":6.793,"maxMs":4.79,"nodes":270,"searches":10,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":11,"totalMs":1586.584,"maxMs":453.939,"nodes":164869,"searches":9,"deepSearches":9,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d3:1:b","n":6,"seed":3337799031,"round":1,"result":"win","winner":"blue","drawReason":null,"turns":50,"red":{"agent":"minimax-d3","moves":25,"totalMs":1350.498,"maxMs":115.467,"nodes":224167,"searches":24,"deepSearches":24,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":25,"totalMs":4.48,"maxMs":0.303,"nodes":455,"searches":23,"deepSearches":1,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d3:2:a","n":6,"seed":2093274386,"round":2,"result":"win","winner":"blue","drawReason":null,"turns":24,"red":{"agent":"minimax-dynamic","moves":12,"totalMs":2.187,"maxMs":0.37,"nodes":286,"searches":11,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":12,"totalMs":835.07,"maxMs":107.681,"nodes":168448,"searches":10,"deepSearches":10,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d3:2:b","n":6,"seed":2093274386,"round":2,"result":"win","winner":"blue","drawReason":null,"turns":26,"red":{"agent":"minimax-d3","moves":13,"totalMs":990.93,"maxMs":122.354,"nodes":192558,"searches":12,"deepSearches":12,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":13,"totalMs":2.231,"maxMs":0.415,"nodes":275,"searches":11,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d3:3:a","n":6,"seed":2208646296,"round":3,"result":"win","winner":"blue","drawReason":null,"turns":36,"red":{"agent":"minimax-dynamic","moves":18,"totalMs":3.186,"maxMs":0.355,"nodes":382,"searches":17,"deepSearches":2,"illegal":0},"blue":{"agent":"minimax-d3","moves":18,"totalMs":895.519,"maxMs":117.9,"nodes":173784,"searches":16,"deepSearches":16,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d3:3:b","n":6,"seed":2208646296,"round":3,"result":"win","winner":"blue","drawReason":null,"turns":36,"red":{"agent":"minimax-d3","moves":18,"totalMs":1001.779,"maxMs":109.669,"nodes":206232,"searches":17,"deepSearches":17,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":18,"totalMs":2.85,"maxMs":0.262,"nodes":340,"searches":16,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d3:4:a","n":6,"seed":2391108771,"round":4,"result":"win","winner":"red","drawReason":null,"turns":35,"red":{"agent":"minimax-dynamic","moves":18,"totalMs":2.927,"maxMs":0.278,"nodes":358,"searches":16,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":17,"totalMs":926.368,"maxMs":110.752,"nodes":182504,"searches":16,"deepSearches":16,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d3:4:b","n":6,"seed":2391108771,"round":4,"result":"win","winner":"blue","drawReason":null,"turns":28,"red":{"agent":"minimax-d3","moves":14,"totalMs":903.583,"maxMs":113.123,"nodes":193819,"searches":13,"deepSearches":13,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":14,"totalMs":2.197,"maxMs":0.225,"nodes":288,"searches":12,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d3:5:a","n":6,"seed":45953651,"round":5,"result":"win","winner":"blue","drawReason":null,"turns":40,"red":{"agent":"minimax-dynamic","moves":20,"totalMs":4.263,"maxMs":0.569,"nodes":402,"searches":19,"deepSearches":3,"illegal":0},"blue":{"agent":"minimax-d3","moves":20,"totalMs":1054.163,"maxMs":137.32,"nodes":177606,"searches":18,"deepSearches":18,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d3:5:b","n":6,"seed":45953651,"round":5,"result":"win","winner":"red","drawReason":null,"turns":27,"red":{"agent":"minimax-d3","moves":14,"totalMs":1229.227,"maxMs":203.937,"nodes":192824,"searches":12,"deepSearches":12,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":13,"totalMs":2.935,"maxMs":0.519,"nodes":288,"searches":12,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d3:6:a","n":6,"seed":1781663992,"round":6,"result":"win","winner":"red","drawReason":null,"turns":37,"red":{"agent":"minimax-dynamic","moves":19,"totalMs":4.091,"maxMs":0.814,"nodes":395,"searches":17,"deepSearches":2,"illegal":0},"blue":{"agent":"minimax-d3","moves":18,"totalMs":866.393,"maxMs":105.357,"nodes":173753,"searches":17,"deepSearches":17,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d3:6:b","n":6,"seed":1781663992,"round":6,"result":"win","winner":"red","drawReason":null,"turns":25,"red":{"agent":"minimax-d3","moves":13,"totalMs":930.121,"maxMs":119.023,"nodes":190748,"searches":11,"deepSearches":11,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":12,"totalMs":2.073,"maxMs":0.232,"nodes":275,"searches":11,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d3:7:a","n":6,"seed":2004731760,"round":7,"result":"win","winner":"blue","drawReason":null,"turns":18,"red":{"agent":"minimax-dynamic","moves":9,"totalMs":1.469,"maxMs":0.258,"nodes":232,"searches":8,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":9,"totalMs":757.24,"maxMs":124.286,"nodes":152349,"searches":7,"deepSearches":7,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d3:7:b","n":6,"seed":2004731760,"round":7,"result":"win","winner":"blue","drawReason":null,"turns":32,"red":{"agent":"minimax-d3","moves":16,"totalMs":1107.868,"maxMs":138.394,"nodes":209547,"searches":15,"deepSearches":15,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":16,"totalMs":2.701,"maxMs":0.283,"nodes":334,"searches":14,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d3:8:a","n":6,"seed":4281792080,"round":8,"result":"win","winner":"red","drawReason":null,"turns":23,"red":{"agent":"minimax-dynamic","moves":12,"totalMs":2.023,"maxMs":0.389,"nodes":270,"searches":10,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":11,"totalMs":924.767,"maxMs":160.209,"nodes":163628,"searches":10,"deepSearches":10,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d3:8:b","n":6,"seed":4281792080,"round":8,"result":"win","winner":"red","drawReason":null,"turns":35,"red":{"agent":"minimax-d3","moves":18,"totalMs":924.977,"maxMs":114.421,"nodes":195009,"searches":16,"deepSearches":16,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":17,"totalMs":2.75,"maxMs":0.242,"nodes":332,"searches":16,"deepSearches":1,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d3:9:a","n":6,"seed":3067140833,"round":9,"result":"win","winner":"red","drawReason":null,"turns":39,"red":{"agent":"minimax-dynamic","moves":20,"totalMs":3.041,"maxMs":0.245,"nodes":374,"searches":18,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":19,"totalMs":954.81,"maxMs":117.724,"nodes":181233,"searches":18,"deepSearches":18,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d3:9:b","n":6,"seed":3067140833,"round":9,"result":"win","winner":"blue","drawReason":null,"turns":36,"red":{"agent":"minimax-d3","moves":18,"totalMs":1025.586,"maxMs":121.895,"nodes":206375,"searches":17,"deepSearches":17,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":18,"totalMs":3.023,"maxMs":0.444,"nodes":352,"searches":16,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d3:10:a","n":6,"seed":3178892231,"round":10,"result":"win","winner":"red","drawReason":null,"turns":33,"red":{"agent":"minimax-dynamic","moves":17,"totalMs":3.641,"maxMs":0.569,"nodes":330,"searches":15,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":16,"totalMs":1336.041,"maxMs":191.141,"nodes":173650,"searches":15,"deepSearches":15,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d3:10:b","n":6,"seed":3178892231,"round":10,"result":"win","winner":"red","drawReason":null,"turns":31,"red":{"agent":"minimax-d3","moves":16,"totalMs":961.85,"maxMs":114.217,"nodes":194617,"searches":14,"deepSearches":14,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":15,"totalMs":2.616,"maxMs":0.36,"nodes":308,"searches":14,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d3:11:a","n":6,"seed":3309851016,"round":11,"result":"win","winner":"red","drawReason":null,"turns":35,"red":{"agent":"minimax-dynamic","moves":18,"totalMs":3.479,"maxMs":0.404,"nodes":358,"searches":16,"deepSearches":1,"illegal":0},"blue":{"agent":"minimax-d3","moves":17,"totalMs":1191.356,"maxMs":190.856,"nodes":173728,"searches":16,"deepSearches":16,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d3:11:b","n":6,"seed":3309851016,"round":11,"result":"win","winner":"red","drawReason":null,"turns":43,"red":{"agent":"minimax-d3","moves":22,"totalMs":1247.911,"maxMs":138.607,"nodes":216476,"searches":20,"deepSearches":20,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":21,"totalMs":4.197,"maxMs":0.334,"nodes":408,"searches":20,"deepSearches":1,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d3:12:a","n":6,"seed":4269078529,"round":12,"result":"win","winner":"blue","drawReason":null,"turns":46,"red":{"agent":"minimax-dynamic","moves":23,"totalMs":3.654,"maxMs":0.196,"nodes":430,"searches":22,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":23,"totalMs":1017.046,"maxMs":129.011,"nodes":188449,"searches":21,"deepSearches":21,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d3:12:b","n":6,"seed":4269078529,"round":12,"result":"win","winner":"red","drawReason":null,"turns":21,"red":{"agent":"minimax-d3","moves":11,"totalMs":891.097,"maxMs":114.114,"nodes":195780,"searches":9,"deepSearches":9,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":10,"totalMs":1.577,"maxMs":0.21,"nodes":253,"searches":9,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d3:13:a","n":6,"seed":1005671370,"round":13,"result":"win","winner":"blue","drawReason":null,"turns":36,"red":{"agent":"minimax-dynamic","moves":18,"totalMs":3.411,"maxMs":0.532,"nodes":382,"searches":17,"deepSearches":2,"illegal":0},"blue":{"agent":"minimax-d3","moves":18,"totalMs":858.451,"maxMs":110.314,"nodes":173790,"searches":16,"deepSearches":16,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d3:13:b","n":6,"seed":1005671370,"round":13,"result":"win","winner":"blue","drawReason":null,"turns":30,"red":{"agent":"minimax-d3","moves":15,"totalMs":906.189,"maxMs":109.514,"nodes":194502,"searches":14,"deepSearches":14,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":15,"totalMs":2.313,"maxMs":0.272,"nodes":299,"searches":13,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d3:14:a","n":6,"seed":3160942313,"round":14,"result":"win","winner":"blue","drawReason":null,"turns":26,"red":{"agent":"minimax-dynamic","moves":13,"totalMs":2.23,"maxMs":0.257,"nodes":306,"searches":12,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":13,"totalMs":864.488,"maxMs":111.32,"nodes":173945,"searches":11,"deepSearches":11,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d3:14:b","n":6,"seed":3160942313,"round":14,"result":"win","winner":"blue","drawReason":null,"turns":48,"red":{"agent":"minimax-d3","moves":24,"totalMs":1084.657,"maxMs":116.362,"nodes":214665,"searches":23,"deepSearches":23,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":24,"totalMs":3.875,"maxMs":0.236,"nodes":428,"searches":22,"deepSearches":1,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d3:15:a","n":6,"seed":3168645076,"round":15,"result":"win","winner":"blue","drawReason":null,"turns":34,"red":{"agent":"minimax-dynamic","moves":17,"totalMs":3.112,"maxMs":0.545,"nodes":342,"searches":16,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":17,"totalMs":990.685,"maxMs":146.043,"nodes":174385,"searches":15,"deepSearches":15,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d3:15:b","n":6,"seed":3168645076,"round":15,"result":"win","winner":"blue","drawReason":null,"turns":20,"red":{"agent":"minimax-d3","moves":10,"totalMs":776.233,"maxMs":107.657,"nodes":182922,"searches":9,"deepSearches":9,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":10,"totalMs":1.278,"maxMs":0.194,"nodes":224,"searches":8,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d3:16:a","n":6,"seed":2959752968,"round":16,"result":"win","winner":"blue","drawReason":null,"turns":42,"red":{"agent":"minimax-dynamic","moves":21,"totalMs":3.207,"maxMs":0.2,"nodes":387,"searches":20,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":21,"totalMs":984.176,"maxMs":125.745,"nodes":184868,"searches":19,"deepSearches":19,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d3:16:b","n":6,"seed":2959752968,"round":16,"result":"win","winner":"red","drawReason":null,"turns":25,"red":{"agent":"minimax-d3","moves":13,"totalMs":897.79,"maxMs":120.65,"nodes":191000,"searches":11,"deepSearches":11,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":12,"totalMs":2.095,"maxMs":0.363,"nodes":275,"searches":11,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d3:17:a","n":6,"seed":528596009,"round":17,"result":"win","winner":"blue","drawReason":null,"turns":40,"red":{"agent":"minimax-dynamic","moves":20,"totalMs":3.935,"maxMs":0.664,"nodes":377,"searches":19,"deepSearches":1,"illegal":0},"blue":{"agent":"minimax-d3","moves":20,"totalMs":892.48,"maxMs":109.263,"nodes":174268,"searches":18,"deepSearches":18,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d3:17:b","n":6,"seed":528596009,"round":17,"result":"win","winner":"blue","drawReason":null,"turns":32,"red":{"agent":"minimax-d3","moves":16,"totalMs":900.934,"maxMs":113.046,"nodes":195035,"searches":15,"deepSearches":15,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":16,"totalMs":2.355,"maxMs":0.278,"nodes":308,"searches":14,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d3:18:a","n":6,"seed":1337290896,"round":18,"result":"win","winner":"blue","drawReason":null,"turns":26,"red":{"agent":"minimax-dynamic","moves":13,"totalMs":2.485,"maxMs":0.571,"nodes":300,"searches":12,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":13,"totalMs":844.005,"maxMs":111.632,"nodes":171049,"searches":11,"deepSearches":11,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d3:18:b","n":6,"seed":1337290896,"round":18,"result":"win","winner":"red","drawReason":null,"turns":29,"red":{"agent":"minimax-d3","moves":15,"totalMs":1085.405,"maxMs":151.251,"nodes":208274,"searches":13,"deepSearches":13,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":14,"totalMs":2.592,"maxMs":0.264,"nodes":319,"searches":13,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d3:19:a","n":6,"seed":3516328502,"round":19,"result":"win","winner":"blue","drawReason":null,"turns":36,"red":{"agent":"minimax-dynamic","moves":18,"totalMs":3.245,"maxMs":0.444,"nodes":378,"searches":17,"deepSearches":1,"illegal":0},"blue":{"agent":"minimax-d3","moves":18,"totalMs":939.062,"maxMs":109.804,"nodes":181120,"searches":16,"deepSearches":16,"illegal":0}},{"id":"6:minimax-dynamic:minimax-d3:19:b","n":6,"seed":3516328502,"round":19,"result":"win","winner":"red","drawReason":null,"turns":37,"red":{"agent":"minimax-d3","moves":19,"totalMs":1056.965,"maxMs":123.576,"nodes":205516,"searches":17,"deepSearches":17,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":18,"totalMs":2.866,"maxMs":0.194,"nodes":355,"searches":17,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:greedy:0:a","n":6,"seed":4287374889,"round":0,"result":"win","winner":"blue","drawReason":null,"turns":30,"red":{"agent":"minimax-dynamic","moves":15,"totalMs":2.902,"maxMs":0.656,"nodes":324,"searches":14,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":15,"totalMs":2.515,"maxMs":0.453,"nodes":336,"searches":14,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:greedy:0:b","n":6,"seed":4287374889,"round":0,"result":"win","winner":"blue","drawReason":null,"turns":32,"red":{"agent":"greedy","moves":16,"totalMs":2.587,"maxMs":0.218,"nodes":370,"searches":16,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":16,"totalMs":2.526,"maxMs":0.292,"nodes":310,"searches":14,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:greedy:1:a","n":6,"seed":2619727467,"round":1,"result":"win","winner":"blue","drawReason":null,"turns":28,"red":{"agent":"minimax-dynamic","moves":14,"totalMs":2.025,"maxMs":0.2,"nodes":312,"searches":13,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":14,"totalMs":2.126,"maxMs":0.258,"nodes":325,"searches":13,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:greedy:1:b","n":6,"seed":2619727467,"round":1,"result":"win","winner":"blue","drawReason":null,"turns":30,"red":{"agent":"greedy","moves":15,"totalMs":2.404,"maxMs":0.204,"nodes":365,"searches":15,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":15,"totalMs":2.363,"maxMs":0.266,"nodes":302,"searches":13,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:greedy:2:a","n":6,"seed":3683841281,"round":2,"result":"win","winner":"blue","drawReason":null,"turns":24,"red":{"agent":"minimax-dynamic","moves":12,"totalMs":2.137,"maxMs":0.3,"nodes":290,"searches":11,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":12,"totalMs":1.912,"maxMs":0.292,"nodes":299,"searches":11,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:greedy:2:b","n":6,"seed":3683841281,"round":2,"result":"win","winner":"blue","drawReason":null,"turns":36,"red":{"agent":"greedy","moves":18,"totalMs":2.806,"maxMs":0.184,"nodes":404,"searches":18,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":18,"totalMs":2.928,"maxMs":0.293,"nodes":344,"searches":16,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:greedy:3:a","n":6,"seed":3245917411,"round":3,"result":"win","winner":"blue","drawReason":null,"turns":28,"red":{"agent":"minimax-dynamic","moves":14,"totalMs":2.134,"maxMs":0.273,"nodes":324,"searches":13,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":14,"totalMs":2.062,"maxMs":0.197,"nodes":337,"searches":13,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:greedy:3:b","n":6,"seed":3245917411,"round":3,"result":"win","winner":"red","drawReason":null,"turns":29,"red":{"agent":"greedy","moves":15,"totalMs":2.495,"maxMs":0.513,"nodes":340,"searches":14,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":14,"totalMs":2.316,"maxMs":0.267,"nodes":290,"searches":13,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:greedy:4:a","n":6,"seed":2702345588,"round":4,"result":"win","winner":"blue","drawReason":null,"turns":28,"red":{"agent":"minimax-dynamic","moves":14,"totalMs":2.402,"maxMs":0.346,"nodes":312,"searches":13,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":14,"totalMs":2.498,"maxMs":0.332,"nodes":325,"searches":13,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:greedy:4:b","n":6,"seed":2702345588,"round":4,"result":"win","winner":"blue","drawReason":null,"turns":22,"red":{"agent":"greedy","moves":11,"totalMs":1.65,"maxMs":0.193,"nodes":297,"searches":11,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":11,"totalMs":1.533,"maxMs":0.192,"nodes":234,"searches":9,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:greedy:5:a","n":6,"seed":3972817056,"round":5,"result":"win","winner":"red","drawReason":null,"turns":31,"red":{"agent":"minimax-dynamic","moves":16,"totalMs":2.368,"maxMs":0.276,"nodes":328,"searches":14,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":15,"totalMs":2.35,"maxMs":0.22,"nodes":353,"searches":15,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:greedy:5:b","n":6,"seed":3972817056,"round":5,"result":"win","winner":"blue","drawReason":null,"turns":26,"red":{"agent":"greedy","moves":13,"totalMs":2.396,"maxMs":0.396,"nodes":325,"searches":13,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":13,"totalMs":2.105,"maxMs":0.447,"nodes":264,"searches":11,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:greedy:6:a","n":6,"seed":3735160888,"round":6,"result":"win","winner":"red","drawReason":null,"turns":25,"red":{"agent":"minimax-dynamic","moves":13,"totalMs":1.864,"maxMs":0.277,"nodes":286,"searches":11,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":12,"totalMs":1.93,"maxMs":0.192,"nodes":312,"searches":12,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:greedy:6:b","n":6,"seed":3735160888,"round":6,"result":"win","winner":"blue","drawReason":null,"turns":24,"red":{"agent":"greedy","moves":12,"totalMs":1.949,"maxMs":0.332,"nodes":318,"searches":12,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":12,"totalMs":1.691,"maxMs":0.239,"nodes":254,"searches":10,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:greedy:7:a","n":6,"seed":181478679,"round":7,"result":"win","winner":"red","drawReason":null,"turns":41,"red":{"agent":"minimax-dynamic","moves":21,"totalMs":3.23,"maxMs":0.301,"nodes":394,"searches":19,"deepSearches":1,"illegal":0},"blue":{"agent":"greedy","moves":20,"totalMs":2.892,"maxMs":0.178,"nodes":396,"searches":20,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:greedy:7:b","n":6,"seed":181478679,"round":7,"result":"win","winner":"red","drawReason":null,"turns":29,"red":{"agent":"greedy","moves":15,"totalMs":2.718,"maxMs":0.329,"nodes":336,"searches":14,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":14,"totalMs":2.365,"maxMs":0.284,"nodes":286,"searches":13,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:greedy:8:a","n":6,"seed":4020415645,"round":8,"result":"win","winner":"red","drawReason":null,"turns":41,"red":{"agent":"minimax-dynamic","moves":21,"totalMs":3.251,"maxMs":0.315,"nodes":412,"searches":19,"deepSearches":1,"illegal":0},"blue":{"agent":"greedy","moves":20,"totalMs":3.136,"maxMs":0.228,"nodes":414,"searches":20,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:greedy:8:b","n":6,"seed":4020415645,"round":8,"result":"win","winner":"blue","drawReason":null,"turns":56,"red":{"agent":"greedy","moves":28,"totalMs":4.558,"maxMs":0.271,"nodes":514,"searches":28,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":28,"totalMs":5.137,"maxMs":0.378,"nodes":498,"searches":26,"deepSearches":2,"illegal":0}},{"id":"6:minimax-dynamic:greedy:9:a","n":6,"seed":2297961512,"round":9,"result":"win","winner":"blue","drawReason":null,"turns":44,"red":{"agent":"minimax-dynamic","moves":22,"totalMs":3.35,"maxMs":0.302,"nodes":408,"searches":21,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":22,"totalMs":3.221,"maxMs":0.22,"nodes":421,"searches":21,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:greedy:9:b","n":6,"seed":2297961512,"round":9,"result":"win","winner":"red","drawReason":null,"turns":37,"red":{"agent":"greedy","moves":19,"totalMs":3.058,"maxMs":0.283,"nodes":386,"searches":18,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":18,"totalMs":2.978,"maxMs":0.349,"nodes":336,"searches":17,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:greedy:10:a","n":6,"seed":4142282423,"round":10,"result":"win","winner":"blue","drawReason":null,"turns":34,"red":{"agent":"minimax-dynamic","moves":17,"totalMs":2.41,"maxMs":0.181,"nodes":338,"searches":16,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":17,"totalMs":2.545,"maxMs":0.295,"nodes":352,"searches":16,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:greedy:10:b","n":6,"seed":4142282423,"round":10,"result":"win","winner":"red","drawReason":null,"turns":37,"red":{"agent":"greedy","moves":19,"totalMs":2.78,"maxMs":0.247,"nodes":370,"searches":18,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":18,"totalMs":2.9,"maxMs":0.305,"nodes":345,"searches":17,"deepSearches":2,"illegal":0}},{"id":"6:minimax-dynamic:greedy:11:a","n":6,"seed":3670576550,"round":11,"result":"win","winner":"blue","drawReason":null,"turns":42,"red":{"agent":"minimax-dynamic","moves":21,"totalMs":3.429,"maxMs":0.426,"nodes":380,"searches":20,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":21,"totalMs":3.576,"maxMs":0.461,"nodes":396,"searches":20,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:greedy:11:b","n":6,"seed":3670576550,"round":11,"result":"win","winner":"blue","drawReason":null,"turns":26,"red":{"agent":"greedy","moves":13,"totalMs":2.095,"maxMs":0.274,"nodes":327,"searches":13,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":13,"totalMs":1.801,"maxMs":0.186,"nodes":264,"searches":11,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:greedy:12:a","n":6,"seed":2509999809,"round":12,"result":"win","winner":"red","drawReason":null,"turns":21,"red":{"agent":"minimax-dynamic","moves":11,"totalMs":1.397,"maxMs":0.188,"nodes":252,"searches":9,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":10,"totalMs":1.581,"maxMs":0.22,"nodes":280,"searches":10,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:greedy:12:b","n":6,"seed":2509999809,"round":12,"result":"win","winner":"blue","drawReason":null,"turns":26,"red":{"agent":"greedy","moves":13,"totalMs":2.403,"maxMs":0.512,"nodes":331,"searches":13,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":13,"totalMs":2.335,"maxMs":0.479,"nodes":268,"searches":11,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:greedy:13:a","n":6,"seed":2645802735,"round":13,"result":"win","winner":"blue","drawReason":null,"turns":38,"red":{"agent":"minimax-dynamic","moves":19,"totalMs":2.884,"maxMs":0.221,"nodes":372,"searches":18,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":19,"totalMs":3.118,"maxMs":0.299,"nodes":386,"searches":18,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:greedy:13:b","n":6,"seed":2645802735,"round":13,"result":"win","winner":"red","drawReason":null,"turns":21,"red":{"agent":"greedy","moves":11,"totalMs":1.611,"maxMs":0.265,"nodes":280,"searches":10,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":10,"totalMs":1.487,"maxMs":0.2,"nodes":234,"searches":9,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:greedy:14:a","n":6,"seed":2559126845,"round":14,"result":"win","winner":"red","drawReason":null,"turns":35,"red":{"agent":"minimax-dynamic","moves":18,"totalMs":3.195,"maxMs":0.573,"nodes":356,"searches":16,"deepSearches":1,"illegal":0},"blue":{"agent":"greedy","moves":17,"totalMs":2.809,"maxMs":0.472,"nodes":357,"searches":17,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:greedy:14:b","n":6,"seed":2559126845,"round":14,"result":"win","winner":"blue","drawReason":null,"turns":34,"red":{"agent":"greedy","moves":17,"totalMs":2.882,"maxMs":0.405,"nodes":369,"searches":17,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":17,"totalMs":2.549,"maxMs":0.297,"nodes":310,"searches":15,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:greedy:15:a","n":6,"seed":2025112360,"round":15,"result":"win","winner":"red","drawReason":null,"turns":43,"red":{"agent":"minimax-dynamic","moves":22,"totalMs":3.378,"maxMs":0.378,"nodes":422,"searches":20,"deepSearches":1,"illegal":0},"blue":{"agent":"greedy","moves":21,"totalMs":3.214,"maxMs":0.275,"nodes":421,"searches":21,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:greedy:15:b","n":6,"seed":2025112360,"round":15,"result":"win","winner":"red","drawReason":null,"turns":21,"red":{"agent":"greedy","moves":11,"totalMs":1.62,"maxMs":0.305,"nodes":280,"searches":10,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":10,"totalMs":1.449,"maxMs":0.197,"nodes":234,"searches":9,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:greedy:16:a","n":6,"seed":3035276770,"round":16,"result":"win","winner":"blue","drawReason":null,"turns":48,"red":{"agent":"minimax-dynamic","moves":24,"totalMs":4.065,"maxMs":0.352,"nodes":454,"searches":23,"deepSearches":1,"illegal":0},"blue":{"agent":"greedy","moves":24,"totalMs":3.874,"maxMs":0.454,"nodes":449,"searches":23,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:greedy:16:b","n":6,"seed":3035276770,"round":16,"result":"win","winner":"blue","drawReason":null,"turns":28,"red":{"agent":"greedy","moves":14,"totalMs":2.178,"maxMs":0.189,"nodes":336,"searches":14,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":14,"totalMs":2.109,"maxMs":0.268,"nodes":276,"searches":12,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:greedy:17:a","n":6,"seed":3889077454,"round":17,"result":"win","winner":"red","drawReason":null,"turns":35,"red":{"agent":"minimax-dynamic","moves":18,"totalMs":2.808,"maxMs":0.301,"nodes":346,"searches":16,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":17,"totalMs":2.643,"maxMs":0.227,"nodes":369,"searches":17,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:greedy:17:b","n":6,"seed":3889077454,"round":17,"result":"win","winner":"red","drawReason":null,"turns":23,"red":{"agent":"greedy","moves":12,"totalMs":1.703,"maxMs":0.275,"nodes":297,"searches":11,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":11,"totalMs":1.534,"maxMs":0.17,"nodes":250,"searches":10,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:greedy:18:a","n":6,"seed":2737218408,"round":18,"result":"win","winner":"red","drawReason":null,"turns":31,"red":{"agent":"minimax-dynamic","moves":16,"totalMs":2.614,"maxMs":0.402,"nodes":324,"searches":14,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":15,"totalMs":2.453,"maxMs":0.262,"nodes":349,"searches":15,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:greedy:18:b","n":6,"seed":2737218408,"round":18,"result":"win","winner":"red","drawReason":null,"turns":25,"red":{"agent":"greedy","moves":13,"totalMs":2.234,"maxMs":0.405,"nodes":314,"searches":12,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":12,"totalMs":2.202,"maxMs":0.321,"nodes":268,"searches":11,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:greedy:19:a","n":6,"seed":4271464139,"round":19,"result":"win","winner":"red","drawReason":null,"turns":29,"red":{"agent":"minimax-dynamic","moves":15,"totalMs":2.074,"maxMs":0.192,"nodes":312,"searches":13,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":14,"totalMs":2.289,"maxMs":0.269,"nodes":336,"searches":14,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:greedy:19:b","n":6,"seed":4271464139,"round":19,"result":"win","winner":"blue","drawReason":null,"turns":40,"red":{"agent":"greedy","moves":20,"totalMs":3.158,"maxMs":0.47,"nodes":418,"searches":20,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":20,"totalMs":3.179,"maxMs":0.383,"nodes":358,"searches":18,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:random:0:a","n":6,"seed":3546205765,"round":0,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"minimax-dynamic","moves":9,"totalMs":0.957,"maxMs":0.159,"nodes":209,"searches":7,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":8,"totalMs":0.028,"maxMs":0.005,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:random:0:b","n":6,"seed":3546205765,"round":0,"result":"win","winner":"blue","drawReason":null,"turns":34,"red":{"agent":"random","moves":17,"totalMs":0.103,"maxMs":0.011,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":17,"totalMs":2.555,"maxMs":0.262,"nodes":368,"searches":15,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:random:1:a","n":6,"seed":409356218,"round":1,"result":"win","winner":"red","drawReason":null,"turns":33,"red":{"agent":"minimax-dynamic","moves":17,"totalMs":2.471,"maxMs":0.251,"nodes":358,"searches":15,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":16,"totalMs":0.091,"maxMs":0.011,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:random:1:b","n":6,"seed":409356218,"round":1,"result":"win","winner":"blue","drawReason":null,"turns":30,"red":{"agent":"random","moves":15,"totalMs":0.076,"maxMs":0.009,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":15,"totalMs":2.206,"maxMs":0.188,"nodes":315,"searches":13,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:random:2:a","n":6,"seed":1611649398,"round":2,"result":"win","winner":"red","drawReason":null,"turns":27,"red":{"agent":"minimax-dynamic","moves":14,"totalMs":2.15,"maxMs":0.288,"nodes":322,"searches":12,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":13,"totalMs":0.069,"maxMs":0.009,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:random:2:b","n":6,"seed":1611649398,"round":2,"result":"win","winner":"blue","drawReason":null,"turns":30,"red":{"agent":"random","moves":15,"totalMs":0.115,"maxMs":0.019,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":15,"totalMs":2.862,"maxMs":0.467,"nodes":326,"searches":13,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:random:3:a","n":6,"seed":3318807833,"round":3,"result":"win","winner":"red","drawReason":null,"turns":41,"red":{"agent":"minimax-dynamic","moves":21,"totalMs":3.116,"maxMs":0.274,"nodes":444,"searches":19,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":20,"totalMs":0.143,"maxMs":0.013,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:random:3:b","n":6,"seed":3318807833,"round":3,"result":"win","winner":"blue","drawReason":null,"turns":36,"red":{"agent":"random","moves":18,"totalMs":0.114,"maxMs":0.012,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":18,"totalMs":2.703,"maxMs":0.179,"nodes":384,"searches":16,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:random:4:a","n":6,"seed":907041536,"round":4,"result":"win","winner":"red","drawReason":null,"turns":29,"red":{"agent":"minimax-dynamic","moves":15,"totalMs":2.246,"maxMs":0.302,"nodes":336,"searches":13,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":14,"totalMs":0.075,"maxMs":0.009,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:random:4:b","n":6,"seed":907041536,"round":4,"result":"win","winner":"blue","drawReason":null,"turns":34,"red":{"agent":"random","moves":17,"totalMs":0.098,"maxMs":0.011,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":17,"totalMs":2.551,"maxMs":0.279,"nodes":336,"searches":15,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:random:5:a","n":6,"seed":2188711791,"round":5,"result":"win","winner":"red","drawReason":null,"turns":27,"red":{"agent":"minimax-dynamic","moves":14,"totalMs":1.785,"maxMs":0.217,"nodes":310,"searches":12,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":13,"totalMs":0.059,"maxMs":0.008,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:random:5:b","n":6,"seed":2188711791,"round":5,"result":"win","winner":"blue","drawReason":null,"turns":36,"red":{"agent":"random","moves":18,"totalMs":0.107,"maxMs":0.011,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":18,"totalMs":2.511,"maxMs":0.178,"nodes":358,"searches":16,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:random:6:a","n":6,"seed":3850575767,"round":6,"result":"win","winner":"red","drawReason":null,"turns":35,"red":{"agent":"minimax-dynamic","moves":18,"totalMs":4.042,"maxMs":0.492,"nodes":418,"searches":16,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":17,"totalMs":0.18,"maxMs":0.028,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:random:6:b","n":6,"seed":3850575767,"round":6,"result":"win","winner":"blue","drawReason":null,"turns":22,"red":{"agent":"random","moves":11,"totalMs":0.043,"maxMs":0.007,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":11,"totalMs":1.587,"maxMs":0.298,"nodes":258,"searches":9,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:random:7:a","n":6,"seed":315499486,"round":7,"result":"win","winner":"red","drawReason":null,"turns":29,"red":{"agent":"minimax-dynamic","moves":15,"totalMs":2.129,"maxMs":0.184,"nodes":321,"searches":13,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":14,"totalMs":0.069,"maxMs":0.009,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:random:7:b","n":6,"seed":315499486,"round":7,"result":"win","winner":"blue","drawReason":null,"turns":26,"red":{"agent":"random","moves":13,"totalMs":0.061,"maxMs":0.008,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":13,"totalMs":1.876,"maxMs":0.249,"nodes":294,"searches":11,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:random:8:a","n":6,"seed":2562876113,"round":8,"result":"win","winner":"red","drawReason":null,"turns":39,"red":{"agent":"minimax-dynamic","moves":20,"totalMs":2.942,"maxMs":0.245,"nodes":416,"searches":18,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":19,"totalMs":0.123,"maxMs":0.012,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:random:8:b","n":6,"seed":2562876113,"round":8,"result":"win","winner":"blue","drawReason":null,"turns":30,"red":{"agent":"random","moves":15,"totalMs":0.083,"maxMs":0.011,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":15,"totalMs":2.218,"maxMs":0.299,"nodes":320,"searches":13,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:random:9:a","n":6,"seed":3849213620,"round":9,"result":"win","winner":"red","drawReason":null,"turns":33,"red":{"agent":"minimax-dynamic","moves":17,"totalMs":3.354,"maxMs":0.45,"nodes":365,"searches":15,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":16,"totalMs":0.159,"maxMs":0.056,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:random:9:b","n":6,"seed":3849213620,"round":9,"result":"win","winner":"blue","drawReason":null,"turns":22,"red":{"agent":"random","moves":11,"totalMs":0.052,"maxMs":0.009,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":11,"totalMs":1.966,"maxMs":0.316,"nodes":244,"searches":9,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:random:10:a","n":6,"seed":3697979226,"round":10,"result":"win","winner":"red","drawReason":null,"turns":31,"red":{"agent":"minimax-dynamic","moves":16,"totalMs":2.144,"maxMs":0.185,"nodes":340,"searches":14,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":15,"totalMs":0.079,"maxMs":0.01,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:random:10:b","n":6,"seed":3697979226,"round":10,"result":"win","winner":"red","drawReason":null,"turns":33,"red":{"agent":"random","moves":17,"totalMs":0.1,"maxMs":0.013,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":16,"totalMs":2.431,"maxMs":0.219,"nodes":328,"searches":15,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:random:11:a","n":6,"seed":216891610,"round":11,"result":"win","winner":"red","drawReason":null,"turns":27,"red":{"agent":"minimax-dynamic","moves":14,"totalMs":2.018,"maxMs":0.275,"nodes":302,"searches":12,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":13,"totalMs":0.061,"maxMs":0.008,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:random:11:b","n":6,"seed":216891610,"round":11,"result":"win","winner":"blue","drawReason":null,"turns":22,"red":{"agent":"random","moves":11,"totalMs":0.04,"maxMs":0.007,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":11,"totalMs":1.412,"maxMs":0.182,"nodes":248,"searches":9,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:random:12:a","n":6,"seed":2806626638,"round":12,"result":"win","winner":"red","drawReason":null,"turns":37,"red":{"agent":"minimax-dynamic","moves":19,"totalMs":2.741,"maxMs":0.249,"nodes":359,"searches":17,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":18,"totalMs":0.111,"maxMs":0.012,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:random:12:b","n":6,"seed":2806626638,"round":12,"result":"win","winner":"blue","drawReason":null,"turns":22,"red":{"agent":"random","moves":11,"totalMs":0.064,"maxMs":0.028,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":11,"totalMs":1.593,"maxMs":0.315,"nodes":242,"searches":9,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:random:13:a","n":6,"seed":2312227692,"round":13,"result":"win","winner":"red","drawReason":null,"turns":43,"red":{"agent":"minimax-dynamic","moves":22,"totalMs":3.533,"maxMs":0.24,"nodes":430,"searches":20,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":21,"totalMs":0.166,"maxMs":0.017,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:random:13:b","n":6,"seed":2312227692,"round":13,"result":"win","winner":"blue","drawReason":null,"turns":20,"red":{"agent":"random","moves":10,"totalMs":0.036,"maxMs":0.006,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":10,"totalMs":1.26,"maxMs":0.176,"nodes":224,"searches":8,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:random:14:a","n":6,"seed":3002411558,"round":14,"result":"win","winner":"blue","drawReason":null,"turns":42,"red":{"agent":"minimax-dynamic","moves":21,"totalMs":3.739,"maxMs":0.363,"nodes":436,"searches":20,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":21,"totalMs":0.206,"maxMs":0.045,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:random:14:b","n":6,"seed":3002411558,"round":14,"result":"win","winner":"blue","drawReason":null,"turns":20,"red":{"agent":"random","moves":10,"totalMs":0.037,"maxMs":0.007,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":10,"totalMs":1.43,"maxMs":0.284,"nodes":226,"searches":8,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:random:15:a","n":6,"seed":2724246570,"round":15,"result":"win","winner":"red","drawReason":null,"turns":31,"red":{"agent":"minimax-dynamic","moves":16,"totalMs":2.228,"maxMs":0.181,"nodes":352,"searches":14,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":15,"totalMs":0.08,"maxMs":0.01,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:random:15:b","n":6,"seed":2724246570,"round":15,"result":"win","winner":"blue","drawReason":null,"turns":36,"red":{"agent":"random","moves":18,"totalMs":0.146,"maxMs":0.032,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":18,"totalMs":3.148,"maxMs":0.47,"nodes":360,"searches":16,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:random:16:a","n":6,"seed":3301743379,"round":16,"result":"win","winner":"red","drawReason":null,"turns":37,"red":{"agent":"minimax-dynamic","moves":19,"totalMs":2.73,"maxMs":0.284,"nodes":361,"searches":17,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":18,"totalMs":0.111,"maxMs":0.012,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:random:16:b","n":6,"seed":3301743379,"round":16,"result":"win","winner":"blue","drawReason":null,"turns":28,"red":{"agent":"random","moves":14,"totalMs":0.068,"maxMs":0.009,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":14,"totalMs":1.901,"maxMs":0.24,"nodes":320,"searches":12,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:random:17:a","n":6,"seed":665789155,"round":17,"result":"win","winner":"red","drawReason":null,"turns":49,"red":{"agent":"minimax-dynamic","moves":25,"totalMs":4.1,"maxMs":0.412,"nodes":461,"searches":23,"deepSearches":1,"illegal":0},"blue":{"agent":"random","moves":24,"totalMs":0.204,"maxMs":0.019,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:random:17:b","n":6,"seed":665789155,"round":17,"result":"win","winner":"blue","drawReason":null,"turns":28,"red":{"agent":"random","moves":14,"totalMs":0.081,"maxMs":0.011,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":14,"totalMs":2.291,"maxMs":0.301,"nodes":300,"searches":12,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:random:18:a","n":6,"seed":1031211080,"round":18,"result":"win","winner":"red","drawReason":null,"turns":33,"red":{"agent":"minimax-dynamic","moves":17,"totalMs":2.379,"maxMs":0.211,"nodes":376,"searches":15,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":16,"totalMs":0.087,"maxMs":0.01,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:random:18:b","n":6,"seed":1031211080,"round":18,"result":"win","winner":"blue","drawReason":null,"turns":40,"red":{"agent":"random","moves":20,"totalMs":0.15,"maxMs":0.015,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":20,"totalMs":3.275,"maxMs":0.361,"nodes":400,"searches":18,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:random:19:a","n":6,"seed":1997309922,"round":19,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"minimax-dynamic","moves":9,"totalMs":1.02,"maxMs":0.164,"nodes":215,"searches":7,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":8,"totalMs":0.027,"maxMs":0.006,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-dynamic:random:19:b","n":6,"seed":1997309922,"round":19,"result":"win","winner":"blue","drawReason":null,"turns":30,"red":{"agent":"random","moves":15,"totalMs":0.078,"maxMs":0.012,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-dynamic","moves":15,"totalMs":2.278,"maxMs":0.238,"nodes":304,"searches":13,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d2:minimax-d3:0:a","n":6,"seed":2042429757,"round":0,"result":"win","winner":"red","drawReason":null,"turns":47,"red":{"agent":"minimax-d2","moves":24,"totalMs":51.111,"maxMs":4.388,"nodes":8520,"searches":22,"deepSearches":22,"illegal":0},"blue":{"agent":"minimax-d3","moves":23,"totalMs":1048.088,"maxMs":154.212,"nodes":180572,"searches":22,"deepSearches":22,"illegal":0}},{"id":"6:minimax-d2:minimax-d3:0:b","n":6,"seed":2042429757,"round":0,"result":"win","winner":"blue","drawReason":null,"turns":36,"red":{"agent":"minimax-d3","moves":18,"totalMs":953.924,"maxMs":119.636,"nodes":194751,"searches":17,"deepSearches":17,"illegal":0},"blue":{"agent":"minimax-d2","moves":18,"totalMs":40.33,"maxMs":3.979,"nodes":7206,"searches":16,"deepSearches":16,"illegal":0}},{"id":"6:minimax-d2:minimax-d3:1:a","n":6,"seed":985035898,"round":1,"result":"win","winner":"red","drawReason":null,"turns":33,"red":{"agent":"minimax-d2","moves":17,"totalMs":57.446,"maxMs":7.418,"nodes":8066,"searches":15,"deepSearches":15,"illegal":0},"blue":{"agent":"minimax-d3","moves":16,"totalMs":1152.306,"maxMs":156.929,"nodes":176737,"searches":15,"deepSearches":15,"illegal":0}},{"id":"6:minimax-d2:minimax-d3:1:b","n":6,"seed":985035898,"round":1,"result":"win","winner":"blue","drawReason":null,"turns":36,"red":{"agent":"minimax-d3","moves":18,"totalMs":913.079,"maxMs":111.142,"nodes":195197,"searches":17,"deepSearches":17,"illegal":0},"blue":{"agent":"minimax-d2","moves":18,"totalMs":38.371,"maxMs":3.757,"nodes":7202,"searches":16,"deepSearches":16,"illegal":0}},{"id":"6:minimax-d2:minimax-d3:2:a","n":6,"seed":2752894269,"round":2,"result":"win","winner":"red","drawReason":null,"turns":37,"red":{"agent":"minimax-d2","moves":19,"totalMs":42.782,"maxMs":3.844,"nodes":8347,"searches":17,"deepSearches":17,"illegal":0},"blue":{"agent":"minimax-d3","moves":18,"totalMs":909.165,"maxMs":113.122,"nodes":180992,"searches":17,"deepSearches":17,"illegal":0}},{"id":"6:minimax-d2:minimax-d3:2:b","n":6,"seed":2752894269,"round":2,"result":"win","winner":"red","drawReason":null,"turns":35,"red":{"agent":"minimax-d3","moves":18,"totalMs":943.223,"maxMs":112.833,"nodes":194892,"searches":16,"deepSearches":16,"illegal":0},"blue":{"agent":"minimax-d2","moves":17,"totalMs":42.59,"maxMs":4.394,"nodes":7172,"searches":16,"deepSearches":16,"illegal":0}},{"id":"6:minimax-d2:minimax-d3:3:a","n":6,"seed":4175761494,"round":3,"result":"win","winner":"red","drawReason":null,"turns":35,"red":{"agent":"minimax-d2","moves":18,"totalMs":39.927,"maxMs":3.742,"nodes":7778,"searches":16,"deepSearches":16,"illegal":0},"blue":{"agent":"minimax-d3","moves":17,"totalMs":859.169,"maxMs":111.292,"nodes":173751,"searches":16,"deepSearches":16,"illegal":0}},{"id":"6:minimax-d2:minimax-d3:3:b","n":6,"seed":4175761494,"round":3,"result":"win","winner":"red","drawReason":null,"turns":39,"red":{"agent":"minimax-d3","moves":20,"totalMs":1163.913,"maxMs":180.168,"nodes":195231,"searches":18,"deepSearches":18,"illegal":0},"blue":{"agent":"minimax-d2","moves":19,"totalMs":49.661,"maxMs":6.883,"nodes":7234,"searches":18,"deepSearches":18,"illegal":0}},{"id":"6:minimax-d2:minimax-d3:4:a","n":6,"seed":1550466921,"round":4,"result":"win","winner":"blue","drawReason":null,"turns":32,"red":{"agent":"minimax-d2","moves":16,"totalMs":40.631,"maxMs":3.949,"nodes":7870,"searches":15,"deepSearches":15,"illegal":0},"blue":{"agent":"minimax-d3","moves":16,"totalMs":874.526,"maxMs":111.693,"nodes":174299,"searches":14,"deepSearches":14,"illegal":0}},{"id":"6:minimax-d2:minimax-d3:4:b","n":6,"seed":1550466921,"round":4,"result":"win","winner":"red","drawReason":null,"turns":33,"red":{"agent":"minimax-d3","moves":17,"totalMs":988.477,"maxMs":137.959,"nodes":194758,"searches":15,"deepSearches":15,"illegal":0},"blue":{"agent":"minimax-d2","moves":16,"totalMs":43.028,"maxMs":6.14,"nodes":7146,"searches":15,"deepSearches":15,"illegal":0}},{"id":"6:minimax-d2:minimax-d3:5:a","n":6,"seed":2927094322,"round":5,"result":"win","winner":"red","drawReason":null,"turns":35,"red":{"agent":"minimax-d2","moves":18,"totalMs":42.853,"maxMs":5.067,"nodes":7834,"searches":16,"deepSearches":16,"illegal":0},"blue":{"agent":"minimax-d3","moves":17,"totalMs":936.741,"maxMs":119.188,"nodes":173893,"searches":16,"deepSearches":16,"illegal":0}},{"id":"6:minimax-d2:minimax-d3:5:b","n":6,"seed":2927094322,"round":5,"result":"win","winner":"blue","drawReason":null,"turns":32,"red":{"agent":"minimax-d3","moves":16,"totalMs":1173.335,"maxMs":163.602,"nodes":194798,"searches":15,"deepSearches":15,"illegal":0},"blue":{"agent":"minimax-d2","moves":16,"totalMs":45.138,"maxMs":8.994,"nodes":7098,"searches":14,"deepSearches":14,"illegal":0}},{"id":"6:minimax-d2:minimax-d3:6:a","n":6,"seed":752035648,"round":6,"result":"win","winner":"blue","drawReason":null,"turns":36,"red":{"agent":"minimax-d2","moves":18,"totalMs":40.197,"maxMs":3.999,"nodes":7802,"searches":17,"deepSearches":17,"illegal":0},"blue":{"agent":"minimax-d3","moves":18,"totalMs":875.178,"maxMs":114.56,"nodes":173787,"searches":16,"deepSearches":16,"illegal":0}},{"id":"6:minimax-d2:minimax-d3:6:b","n":6,"seed":752035648,"round":6,"result":"win","winner":"red","drawReason":null,"turns":27,"red":{"agent":"minimax-d3","moves":14,"totalMs":987.499,"maxMs":138.14,"nodes":192696,"searches":12,"deepSearches":12,"illegal":0},"blue":{"agent":"minimax-d2","moves":13,"totalMs":39.843,"maxMs":4.686,"nodes":6932,"searches":12,"deepSearches":12,"illegal":0}},{"id":"6:minimax-d2:minimax-d3:7:a","n":6,"seed":4058305060,"round":7,"result":"win","winner":"blue","drawReason":null,"turns":36,"red":{"agent":"minimax-d2","moves":18,"totalMs":46.067,"maxMs":4.043,"nodes":8268,"searches":17,"deepSearches":17,"illegal":0},"blue":{"agent":"minimax-d3","moves":18,"totalMs":986.644,"maxMs":121.932,"nodes":180816,"searches":16,"deepSearches":16,"illegal":0}},{"id":"6:minimax-d2:minimax-d3:7:b","n":6,"seed":4058305060,"round":7,"result":"win","winner":"blue","drawReason":null,"turns":34,"red":{"agent":"minimax-d3","moves":17,"totalMs":1048.389,"maxMs":118.74,"nodes":208076,"searches":16,"deepSearches":16,"illegal":0},"blue":{"agent":"minimax-d2","moves":17,"totalMs":44.318,"maxMs":3.945,"nodes":7831,"searches":15,"deepSearches":15,"illegal":0}},{"id":"6:minimax-d2:minimax-d3:8:a","n":6,"seed":395449729,"round":8,"result":"win","winner":"red","drawReason":null,"turns":39,"red":{"agent":"minimax-d2","moves":20,"totalMs":51.881,"maxMs":5.231,"nodes":8192,"searches":18,"deepSearches":18,"illegal":0},"blue":{"agent":"minimax-d3","moves":19,"totalMs":1042.664,"maxMs":114.746,"nodes":179239,"searches":18,"deepSearches":18,"illegal":0}},{"id":"6:minimax-d2:minimax-d3:8:b","n":6,"seed":395449729,"round":8,"result":"win","winner":"blue","drawReason":null,"turns":28,"red":{"agent":"minimax-d3","moves":14,"totalMs":1061.411,"maxMs":143.938,"nodes":196224,"searches":13,"deepSearches":13,"illegal":0},"blue":{"agent":"minimax-d2","moves":14,"totalMs":42.597,"maxMs":6.987,"nodes":7046,"searches":12,"deepSearches":12,"illegal":0}},{"id":"6:minimax-d2:minimax-d3:9:a","n":6,"seed":1179329160,"round":9,"result":"win","winner":"red","drawReason":null,"turns":29,"red":{"agent":"minimax-d2","moves":15,"totalMs":40.158,"maxMs":3.803,"nodes":7620,"searches":13,"deepSearches":13,"illegal":0},"blue":{"agent":"minimax-d3","moves":14,"totalMs":876.797,"maxMs":117.814,"nodes":172087,"searches":13,"deepSearches":13,"illegal":0}},{"id":"6:minimax-d2:minimax-d3:9:b","n":6,"seed":1179329160,"round":9,"result":"win","winner":"red","drawReason":null,"turns":39,"red":{"agent":"minimax-d3","moves":20,"totalMs":968.483,"maxMs":130.397,"nodes":197961,"searches":18,"deepSearches":18,"illegal":0},"blue":{"agent":"minimax-d2","moves":19,"totalMs":42.425,"maxMs":4.145,"nodes":7444,"searches":18,"deepSearches":18,"illegal":0}},{"id":"6:minimax-d2:minimax-d3:10:a","n":6,"seed":4059031224,"round":10,"result":"win","winner":"blue","drawReason":null,"turns":36,"red":{"agent":"minimax-d2","moves":18,"totalMs":39.372,"maxMs":3.669,"nodes":7804,"searches":17,"deepSearches":17,"illegal":0},"blue":{"agent":"minimax-d3","moves":18,"totalMs":850.681,"maxMs":108.303,"nodes":173586,"searches":16,"deepSearches":16,"illegal":0}},{"id":"6:minimax-d2:minimax-d3:10:b","n":6,"seed":4059031224,"round":10,"result":"win","winner":"blue","drawReason":null,"turns":26,"red":{"agent":"minimax-d3","moves":13,"totalMs":887.94,"maxMs":113.52,"nodes":193312,"searches":12,"deepSearches":12,"illegal":0},"blue":{"agent":"minimax-d2","moves":13,"totalMs":34.973,"maxMs":3.638,"nodes":6789,"searches":11,"deepSearches":11,"illegal":0}},{"id":"6:minimax-d2:minimax-d3:11:a","n":6,"seed":4193382781,"round":11,"result":"win","winner":"blue","drawReason":null,"turns":34,"red":{"agent":"minimax-d2","moves":17,"totalMs":40.982,"maxMs":3.646,"nodes":8034,"searches":16,"deepSearches":16,"illegal":0},"blue":{"agent":"minimax-d3","moves":17,"totalMs":893.687,"maxMs":110.87,"nodes":176256,"searches":15,"deepSearches":15,"illegal":0}},{"id":"6:minimax-d2:minimax-d3:11:b","n":6,"seed":4193382781,"round":11,"result":"win","winner":"blue","drawReason":null,"turns":28,"red":{"agent":"minimax-d3","moves":14,"totalMs":911.13,"maxMs":114.341,"nodes":194195,"searches":13,"deepSearches":13,"illegal":0},"blue":{"agent":"minimax-d2","moves":14,"totalMs":36.534,"maxMs":4,"nodes":6936,"searches":12,"deepSearches":12,"illegal":0}},{"id":"6:minimax-d2:minimax-d3:12:a","n":6,"seed":518028062,"round":12,"result":"win","winner":"blue","drawReason":null,"turns":22,"red":{"agent":"minimax-d2","moves":11,"totalMs":44.506,"maxMs":11.769,"nodes":7100,"searches":10,"deepSearches":10,"illegal":0},"blue":{"agent":"minimax-d3","moves":11,"totalMs":861.667,"maxMs":131.192,"nodes":164967,"searches":9,"deepSearches":9,"illegal":0}},{"id":"6:minimax-d2:minimax-d3:12:b","n":6,"seed":518028062,"round":12,"result":"win","winner":"red","drawReason":null,"turns":27,"red":{"agent":"minimax-d3","moves":14,"totalMs":874.84,"maxMs":108.898,"nodes":192758,"searches":12,"deepSearches":12,"illegal":0},"blue":{"agent":"minimax-d2","moves":13,"totalMs":36.101,"maxMs":3.94,"nodes":6932,"searches":12,"deepSearches":12,"illegal":0}},{"id":"6:minimax-d2:minimax-d3:13:a","n":6,"seed":1719680921,"round":13,"result":"win","winner":"red","drawReason":null,"turns":21,"red":{"agent":"minimax-d2","moves":11,"totalMs":29.29,"maxMs":3.708,"nodes":6812,"searches":9,"deepSearches":9,"illegal":0},"blue":{"agent":"minimax-d3","moves":10,"totalMs":701.795,"maxMs":113.229,"nodes":158908,"searches":9,"deepSearches":9,"illegal":0}},{"id":"6:minimax-d2:minimax-d3:13:b","n":6,"seed":1719680921,"round":13,"result":"win","winner":"red","drawReason":null,"turns":21,"red":{"agent":"minimax-d3","moves":11,"totalMs":790.196,"maxMs":110.518,"nodes":183620,"searches":9,"deepSearches":9,"illegal":0},"blue":{"agent":"minimax-d2","moves":10,"totalMs":31.014,"maxMs":3.93,"nodes":6333,"searches":9,"deepSearches":9,"illegal":0}},{"id":"6:minimax-d2:minimax-d3:14:a","n":6,"seed":2108812626,"round":14,"result":"win","winner":"red","drawReason":null,"turns":45,"red":{"agent":"minimax-d2","moves":23,"totalMs":45.179,"maxMs":3.815,"nodes":8352,"searches":21,"deepSearches":21,"illegal":0},"blue":{"agent":"minimax-d3","moves":22,"totalMs":916.013,"maxMs":111.019,"nodes":178866,"searches":21,"deepSearches":21,"illegal":0}},{"id":"6:minimax-d2:minimax-d3:14:b","n":6,"seed":2108812626,"round":14,"result":"win","winner":"blue","drawReason":null,"turns":20,"red":{"agent":"minimax-d3","moves":10,"totalMs":799.684,"maxMs":110.913,"nodes":182938,"searches":9,"deepSearches":9,"illegal":0},"blue":{"agent":"minimax-d2","moves":10,"totalMs":27.469,"maxMs":3.686,"nodes":6008,"searches":8,"deepSearches":8,"illegal":0}},{"id":"6:minimax-d2:minimax-d3:15:a","n":6,"seed":1019111476,"round":15,"result":"win","winner":"blue","drawReason":null,"turns":48,"red":{"agent":"minimax-d2","moves":24,"totalMs":49.689,"maxMs":4.332,"nodes":8892,"searches":23,"deepSearches":23,"illegal":0},"blue":{"agent":"minimax-d3","moves":24,"totalMs":1049.276,"maxMs":154.942,"nodes":187365,"searches":22,"deepSearches":22,"illegal":0}},{"id":"6:minimax-d2:minimax-d3:15:b","n":6,"seed":1019111476,"round":15,"result":"win","winner":"red","drawReason":null,"turns":37,"red":{"agent":"minimax-d3","moves":19,"totalMs":948.265,"maxMs":111.352,"nodes":194922,"searches":17,"deepSearches":17,"illegal":0},"blue":{"agent":"minimax-d2","moves":18,"totalMs":41.363,"maxMs":3.827,"nodes":7191,"searches":17,"deepSearches":17,"illegal":0}},{"id":"6:minimax-d2:minimax-d3:16:a","n":6,"seed":3703520225,"round":16,"result":"win","winner":"blue","drawReason":null,"turns":20,"red":{"agent":"minimax-d2","moves":10,"totalMs":32.062,"maxMs":4.688,"nodes":6810,"searches":9,"deepSearches":9,"illegal":0},"blue":{"agent":"minimax-d3","moves":10,"totalMs":843.089,"maxMs":160.811,"nodes":159560,"searches":8,"deepSearches":8,"illegal":0}},{"id":"6:minimax-d2:minimax-d3:16:b","n":6,"seed":3703520225,"round":16,"result":"draw","winner":null,"drawReason":"repetition","turns":89,"red":{"agent":"minimax-d3","moves":45,"totalMs":1202.26,"maxMs":114.062,"nodes":224678,"searches":44,"deepSearches":44,"illegal":0},"blue":{"agent":"minimax-d2","moves":44,"totalMs":70.787,"maxMs":4.073,"nodes":10257,"searches":43,"deepSearches":43,"illegal":0}},{"id":"6:minimax-d2:minimax-d3:17:a","n":6,"seed":2692575944,"round":17,"result":"win","winner":"blue","drawReason":null,"turns":34,"red":{"agent":"minimax-d2","moves":17,"totalMs":42.222,"maxMs":4.042,"nodes":7906,"searches":16,"deepSearches":16,"illegal":0},"blue":{"agent":"minimax-d3","moves":17,"totalMs":904.272,"maxMs":123.33,"nodes":175004,"searches":15,"deepSearches":15,"illegal":0}},{"id":"6:minimax-d2:minimax-d3:17:b","n":6,"seed":2692575944,"round":17,"result":"win","winner":"blue","drawReason":null,"turns":30,"red":{"agent":"minimax-d3","moves":15,"totalMs":1004.578,"maxMs":141.693,"nodes":195000,"searches":14,"deepSearches":14,"illegal":0},"blue":{"agent":"minimax-d2","moves":15,"totalMs":38.643,"maxMs":4.192,"nodes":7077,"searches":13,"deepSearches":13,"illegal":0}},{"id":"6:minimax-d2:minimax-d3:18:a","n":6,"seed":3170102352,"round":18,"result":"win","winner":"red","drawReason":null,"turns":35,"red":{"agent":"minimax-d2","moves":18,"totalMs":45.995,"maxMs":5.592,"nodes":7834,"searches":16,"deepSearches":16,"illegal":0},"blue":{"agent":"minimax-d3","moves":17,"totalMs":1035.664,"maxMs":145.887,"nodes":173892,"searches":16,"deepSearches":16,"illegal":0}},{"id":"6:minimax-d2:minimax-d3:18:b","n":6,"seed":3170102352,"round":18,"result":"win","winner":"red","drawReason":null,"turns":39,"red":{"agent":"minimax-d3","moves":20,"totalMs":1131.825,"maxMs":122.481,"nodes":201767,"searches":18,"deepSearches":18,"illegal":0},"blue":{"agent":"minimax-d2","moves":19,"totalMs":47.105,"maxMs":4.177,"nodes":7804,"searches":18,"deepSearches":18,"illegal":0}},{"id":"6:minimax-d2:minimax-d3:19:a","n":6,"seed":3805178362,"round":19,"result":"win","winner":"red","drawReason":null,"turns":37,"red":{"agent":"minimax-d2","moves":19,"totalMs":43.164,"maxMs":5.161,"nodes":7788,"searches":17,"deepSearches":17,"illegal":0},"blue":{"agent":"minimax-d3","moves":18,"totalMs":912.053,"maxMs":147.336,"nodes":173697,"searches":17,"deepSearches":17,"illegal":0}},{"id":"6:minimax-d2:minimax-d3:19:b","n":6,"seed":3805178362,"round":19,"result":"win","winner":"red","drawReason":null,"turns":33,"red":{"agent":"minimax-d3","moves":17,"totalMs":976.665,"maxMs":149.145,"nodes":194518,"searches":15,"deepSearches":15,"illegal":0},"blue":{"agent":"minimax-d2","moves":16,"totalMs":39.332,"maxMs":4.407,"nodes":7163,"searches":15,"deepSearches":15,"illegal":0}},{"id":"6:minimax-d2:greedy:0:a","n":6,"seed":3006343707,"round":0,"result":"win","winner":"blue","drawReason":null,"turns":22,"red":{"agent":"minimax-d2","moves":11,"totalMs":32.527,"maxMs":3.776,"nodes":7100,"searches":10,"deepSearches":10,"illegal":0},"blue":{"agent":"greedy","moves":11,"totalMs":1.653,"maxMs":0.192,"nodes":280,"searches":10,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d2:greedy:0:b","n":6,"seed":3006343707,"round":0,"result":"win","winner":"blue","drawReason":null,"turns":20,"red":{"agent":"greedy","moves":10,"totalMs":1.487,"maxMs":0.219,"nodes":280,"searches":10,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":10,"totalMs":27.16,"maxMs":3.912,"nodes":5584,"searches":8,"deepSearches":8,"illegal":0}},{"id":"6:minimax-d2:greedy:1:a","n":6,"seed":4231641555,"round":1,"result":"win","winner":"red","drawReason":null,"turns":27,"red":{"agent":"minimax-d2","moves":14,"totalMs":35.265,"maxMs":3.885,"nodes":7496,"searches":12,"deepSearches":12,"illegal":0},"blue":{"agent":"greedy","moves":13,"totalMs":1.937,"maxMs":0.178,"nodes":325,"searches":13,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d2:greedy:1:b","n":6,"seed":4231641555,"round":1,"result":"win","winner":"blue","drawReason":null,"turns":36,"red":{"agent":"greedy","moves":18,"totalMs":2.808,"maxMs":0.183,"nodes":414,"searches":18,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":18,"totalMs":43.936,"maxMs":3.824,"nodes":7670,"searches":16,"deepSearches":16,"illegal":0}},{"id":"6:minimax-d2:greedy:2:a","n":6,"seed":3967186249,"round":2,"result":"win","winner":"blue","drawReason":null,"turns":28,"red":{"agent":"minimax-d2","moves":14,"totalMs":36.892,"maxMs":4.192,"nodes":7618,"searches":13,"deepSearches":13,"illegal":0},"blue":{"agent":"greedy","moves":14,"totalMs":1.956,"maxMs":0.181,"nodes":325,"searches":13,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d2:greedy:2:b","n":6,"seed":3967186249,"round":2,"result":"win","winner":"blue","drawReason":null,"turns":24,"red":{"agent":"greedy","moves":12,"totalMs":1.852,"maxMs":0.204,"nodes":324,"searches":12,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":12,"totalMs":33.637,"maxMs":4.035,"nodes":6502,"searches":10,"deepSearches":10,"illegal":0}},{"id":"6:minimax-d2:greedy:3:a","n":6,"seed":1687727740,"round":3,"result":"win","winner":"blue","drawReason":null,"turns":20,"red":{"agent":"minimax-d2","moves":10,"totalMs":29.629,"maxMs":3.921,"nodes":6810,"searches":9,"deepSearches":9,"illegal":0},"blue":{"agent":"greedy","moves":10,"totalMs":1.313,"maxMs":0.217,"nodes":261,"searches":9,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d2:greedy:3:b","n":6,"seed":1687727740,"round":3,"result":"win","winner":"red","drawReason":null,"turns":23,"red":{"agent":"greedy","moves":12,"totalMs":1.754,"maxMs":0.23,"nodes":297,"searches":11,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":11,"totalMs":33.234,"maxMs":4.834,"nodes":6100,"searches":10,"deepSearches":10,"illegal":0}},{"id":"6:minimax-d2:greedy:4:a","n":6,"seed":2692315026,"round":4,"result":"win","winner":"blue","drawReason":null,"turns":28,"red":{"agent":"minimax-d2","moves":14,"totalMs":41.883,"maxMs":3.851,"nodes":8212,"searches":13,"deepSearches":13,"illegal":0},"blue":{"agent":"greedy","moves":14,"totalMs":2.106,"maxMs":0.211,"nodes":341,"searches":13,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d2:greedy:4:b","n":6,"seed":2692315026,"round":4,"result":"win","winner":"blue","drawReason":null,"turns":38,"red":{"agent":"greedy","moves":19,"totalMs":2.974,"maxMs":0.217,"nodes":421,"searches":19,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":19,"totalMs":44.321,"maxMs":3.857,"nodes":7654,"searches":17,"deepSearches":17,"illegal":0}},{"id":"6:minimax-d2:greedy:5:a","n":6,"seed":756102637,"round":5,"result":"win","winner":"blue","drawReason":null,"turns":30,"red":{"agent":"minimax-d2","moves":15,"totalMs":39.331,"maxMs":4.152,"nodes":7700,"searches":14,"deepSearches":14,"illegal":0},"blue":{"agent":"greedy","moves":15,"totalMs":2.25,"maxMs":0.221,"nodes":336,"searches":14,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d2:greedy:5:b","n":6,"seed":756102637,"round":5,"result":"win","winner":"red","drawReason":null,"turns":39,"red":{"agent":"greedy","moves":20,"totalMs":2.889,"maxMs":0.254,"nodes":389,"searches":19,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":19,"totalMs":39.534,"maxMs":3.839,"nodes":7006,"searches":18,"deepSearches":18,"illegal":0}},{"id":"6:minimax-d2:greedy:6:a","n":6,"seed":2212936879,"round":6,"result":"win","winner":"red","drawReason":null,"turns":41,"red":{"agent":"minimax-d2","moves":21,"totalMs":44.796,"maxMs":4.023,"nodes":8448,"searches":19,"deepSearches":19,"illegal":0},"blue":{"agent":"greedy","moves":20,"totalMs":3.008,"maxMs":0.186,"nodes":414,"searches":20,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d2:greedy:6:b","n":6,"seed":2212936879,"round":6,"result":"win","winner":"red","drawReason":null,"turns":39,"red":{"agent":"greedy","moves":20,"totalMs":3.379,"maxMs":0.399,"nodes":379,"searches":19,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":19,"totalMs":42.644,"maxMs":4.487,"nodes":6780,"searches":18,"deepSearches":18,"illegal":0}},{"id":"6:minimax-d2:greedy:7:a","n":6,"seed":290126535,"round":7,"result":"win","winner":"blue","drawReason":null,"turns":22,"red":{"agent":"minimax-d2","moves":11,"totalMs":39.26,"maxMs":4.632,"nodes":7100,"searches":10,"deepSearches":10,"illegal":0},"blue":{"agent":"greedy","moves":11,"totalMs":1.703,"maxMs":0.27,"nodes":280,"searches":10,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d2:greedy:7:b","n":6,"seed":290126535,"round":7,"result":"win","winner":"blue","drawReason":null,"turns":24,"red":{"agent":"greedy","moves":12,"totalMs":2.856,"maxMs":0.487,"nodes":314,"searches":12,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":12,"totalMs":50.371,"maxMs":8.08,"nodes":6102,"searches":10,"deepSearches":10,"illegal":0}},{"id":"6:minimax-d2:greedy:8:a","n":6,"seed":3447816334,"round":8,"result":"win","winner":"red","drawReason":null,"turns":29,"red":{"agent":"minimax-d2","moves":15,"totalMs":48.29,"maxMs":6.748,"nodes":7620,"searches":13,"deepSearches":13,"illegal":0},"blue":{"agent":"greedy","moves":14,"totalMs":2.677,"maxMs":0.331,"nodes":338,"searches":14,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d2:greedy:8:b","n":6,"seed":3447816334,"round":8,"result":"win","winner":"red","drawReason":null,"turns":29,"red":{"agent":"greedy","moves":15,"totalMs":2.475,"maxMs":0.355,"nodes":336,"searches":14,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":14,"totalMs":37.115,"maxMs":3.672,"nodes":6474,"searches":13,"deepSearches":13,"illegal":0}},{"id":"6:minimax-d2:greedy:9:a","n":6,"seed":298600514,"round":9,"result":"win","winner":"blue","drawReason":null,"turns":28,"red":{"agent":"minimax-d2","moves":14,"totalMs":48.216,"maxMs":6.668,"nodes":7618,"searches":13,"deepSearches":13,"illegal":0},"blue":{"agent":"greedy","moves":14,"totalMs":2.801,"maxMs":0.388,"nodes":325,"searches":13,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d2:greedy:9:b","n":6,"seed":298600514,"round":9,"result":"win","winner":"blue","drawReason":null,"turns":36,"red":{"agent":"greedy","moves":18,"totalMs":2.912,"maxMs":0.311,"nodes":386,"searches":18,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":18,"totalMs":42.215,"maxMs":5.013,"nodes":6888,"searches":16,"deepSearches":16,"illegal":0}},{"id":"6:minimax-d2:greedy:10:a","n":6,"seed":2958173623,"round":10,"result":"win","winner":"blue","drawReason":null,"turns":22,"red":{"agent":"minimax-d2","moves":11,"totalMs":35.184,"maxMs":4.231,"nodes":7100,"searches":10,"deepSearches":10,"illegal":0},"blue":{"agent":"greedy","moves":11,"totalMs":1.615,"maxMs":0.203,"nodes":280,"searches":10,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d2:greedy:10:b","n":6,"seed":2958173623,"round":10,"result":"win","winner":"red","drawReason":null,"turns":19,"red":{"agent":"greedy","moves":10,"totalMs":1.497,"maxMs":0.269,"nodes":261,"searches":9,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":9,"totalMs":29.488,"maxMs":4.003,"nodes":5584,"searches":8,"deepSearches":8,"illegal":0}},{"id":"6:minimax-d2:greedy:11:a","n":6,"seed":1400265672,"round":11,"result":"win","winner":"blue","drawReason":null,"turns":34,"red":{"agent":"minimax-d2","moves":17,"totalMs":44.854,"maxMs":4.068,"nodes":8154,"searches":16,"deepSearches":16,"illegal":0},"blue":{"agent":"greedy","moves":17,"totalMs":2.745,"maxMs":0.295,"nodes":368,"searches":16,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d2:greedy:11:b","n":6,"seed":1400265672,"round":11,"result":"win","winner":"red","drawReason":null,"turns":25,"red":{"agent":"greedy","moves":13,"totalMs":2.355,"maxMs":0.362,"nodes":312,"searches":12,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":12,"totalMs":36.965,"maxMs":4.528,"nodes":6270,"searches":11,"deepSearches":11,"illegal":0}},{"id":"6:minimax-d2:greedy:12:a","n":6,"seed":1329203820,"round":12,"result":"win","winner":"red","drawReason":null,"turns":33,"red":{"agent":"minimax-d2","moves":17,"totalMs":49.823,"maxMs":4.452,"nodes":8064,"searches":15,"deepSearches":15,"illegal":0},"blue":{"agent":"greedy","moves":16,"totalMs":3.389,"maxMs":0.454,"nodes":366,"searches":16,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d2:greedy:12:b","n":6,"seed":1329203820,"round":12,"result":"win","winner":"blue","drawReason":null,"turns":34,"red":{"agent":"greedy","moves":17,"totalMs":3.8,"maxMs":0.599,"nodes":373,"searches":17,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":17,"totalMs":51.702,"maxMs":6.021,"nodes":6816,"searches":15,"deepSearches":15,"illegal":0}},{"id":"6:minimax-d2:greedy:13:a","n":6,"seed":4104491700,"round":13,"result":"win","winner":"red","drawReason":null,"turns":47,"red":{"agent":"minimax-d2","moves":24,"totalMs":69.685,"maxMs":7.768,"nodes":8264,"searches":22,"deepSearches":22,"illegal":0},"blue":{"agent":"greedy","moves":23,"totalMs":6.006,"maxMs":0.677,"nodes":417,"searches":23,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d2:greedy:13:b","n":6,"seed":4104491700,"round":13,"result":"win","winner":"blue","drawReason":null,"turns":28,"red":{"agent":"greedy","moves":14,"totalMs":2.73,"maxMs":0.53,"nodes":336,"searches":14,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":14,"totalMs":54.426,"maxMs":8.812,"nodes":6392,"searches":12,"deepSearches":12,"illegal":0}},{"id":"6:minimax-d2:greedy:14:a","n":6,"seed":3313527373,"round":14,"result":"win","winner":"red","drawReason":null,"turns":25,"red":{"agent":"minimax-d2","moves":13,"totalMs":42.64,"maxMs":5.144,"nodes":7326,"searches":11,"deepSearches":11,"illegal":0},"blue":{"agent":"greedy","moves":12,"totalMs":2.422,"maxMs":0.468,"nodes":312,"searches":12,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d2:greedy:14:b","n":6,"seed":3313527373,"round":14,"result":"win","winner":"red","drawReason":null,"turns":39,"red":{"agent":"greedy","moves":20,"totalMs":6.137,"maxMs":0.544,"nodes":403,"searches":19,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":19,"totalMs":80.353,"maxMs":9.67,"nodes":7308,"searches":18,"deepSearches":18,"illegal":0}},{"id":"6:minimax-d2:greedy:15:a","n":6,"seed":1252132880,"round":15,"result":"win","winner":"blue","drawReason":null,"turns":36,"red":{"agent":"minimax-d2","moves":18,"totalMs":118.093,"maxMs":11.927,"nodes":8236,"searches":17,"deepSearches":17,"illegal":0},"blue":{"agent":"greedy","moves":18,"totalMs":6.08,"maxMs":0.668,"nodes":377,"searches":17,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d2:greedy:15:b","n":6,"seed":1252132880,"round":15,"result":"win","winner":"red","drawReason":null,"turns":41,"red":{"agent":"greedy","moves":21,"totalMs":4.129,"maxMs":0.516,"nodes":398,"searches":20,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":20,"totalMs":53.818,"maxMs":5.79,"nodes":7050,"searches":19,"deepSearches":19,"illegal":0}},{"id":"6:minimax-d2:greedy:16:a","n":6,"seed":487941701,"round":16,"result":"win","winner":"red","drawReason":null,"turns":41,"red":{"agent":"minimax-d2","moves":21,"totalMs":90.622,"maxMs":12.109,"nodes":8274,"searches":19,"deepSearches":19,"illegal":0},"blue":{"agent":"greedy","moves":20,"totalMs":7.724,"maxMs":1.749,"nodes":404,"searches":20,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d2:greedy:16:b","n":6,"seed":487941701,"round":16,"result":"win","winner":"blue","drawReason":null,"turns":18,"red":{"agent":"greedy","moves":9,"totalMs":1.636,"maxMs":0.408,"nodes":267,"searches":9,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":9,"totalMs":26.493,"maxMs":4.432,"nodes":5408,"searches":7,"deepSearches":7,"illegal":0}},{"id":"6:minimax-d2:greedy:17:a","n":6,"seed":169132342,"round":17,"result":"win","winner":"blue","drawReason":null,"turns":20,"red":{"agent":"minimax-d2","moves":10,"totalMs":42.758,"maxMs":6.609,"nodes":6810,"searches":9,"deepSearches":9,"illegal":0},"blue":{"agent":"greedy","moves":10,"totalMs":1.831,"maxMs":0.342,"nodes":261,"searches":9,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d2:greedy:17:b","n":6,"seed":169132342,"round":17,"result":"win","winner":"blue","drawReason":null,"turns":28,"red":{"agent":"greedy","moves":14,"totalMs":2.826,"maxMs":0.348,"nodes":336,"searches":14,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":14,"totalMs":37.652,"maxMs":4.571,"nodes":6392,"searches":12,"deepSearches":12,"illegal":0}},{"id":"6:minimax-d2:greedy:18:a","n":6,"seed":3103033745,"round":18,"result":"win","winner":"blue","drawReason":null,"turns":32,"red":{"agent":"minimax-d2","moves":16,"totalMs":40.714,"maxMs":4.087,"nodes":7864,"searches":15,"deepSearches":15,"illegal":0},"blue":{"agent":"greedy","moves":16,"totalMs":2.702,"maxMs":0.418,"nodes":349,"searches":15,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d2:greedy:18:b","n":6,"seed":3103033745,"round":18,"result":"win","winner":"blue","drawReason":null,"turns":26,"red":{"agent":"greedy","moves":13,"totalMs":2.418,"maxMs":0.3,"nodes":325,"searches":13,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":13,"totalMs":38.038,"maxMs":5.421,"nodes":6270,"searches":11,"deepSearches":11,"illegal":0}},{"id":"6:minimax-d2:greedy:19:a","n":6,"seed":2288861074,"round":19,"result":"win","winner":"red","drawReason":null,"turns":51,"red":{"agent":"minimax-d2","moves":26,"totalMs":50.358,"maxMs":5.624,"nodes":8572,"searches":24,"deepSearches":24,"illegal":0},"blue":{"agent":"greedy","moves":25,"totalMs":3.782,"maxMs":0.23,"nodes":439,"searches":25,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d2:greedy:19:b","n":6,"seed":2288861074,"round":19,"result":"win","winner":"red","drawReason":null,"turns":21,"red":{"agent":"greedy","moves":11,"totalMs":1.576,"maxMs":0.216,"nodes":280,"searches":10,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":10,"totalMs":31.215,"maxMs":3.945,"nodes":5874,"searches":9,"deepSearches":9,"illegal":0}},{"id":"6:minimax-d2:random:0:a","n":6,"seed":1316931862,"round":0,"result":"win","winner":"red","drawReason":null,"turns":25,"red":{"agent":"minimax-d2","moves":13,"totalMs":37.303,"maxMs":4.123,"nodes":7975,"searches":11,"deepSearches":11,"illegal":0},"blue":{"agent":"random","moves":12,"totalMs":0.085,"maxMs":0.013,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d2:random:0:b","n":6,"seed":1316931862,"round":0,"result":"win","winner":"blue","drawReason":null,"turns":34,"red":{"agent":"random","moves":17,"totalMs":0.21,"maxMs":0.071,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":17,"totalMs":45.496,"maxMs":3.866,"nodes":8186,"searches":15,"deepSearches":15,"illegal":0}},{"id":"6:minimax-d2:random:1:a","n":6,"seed":2744780603,"round":1,"result":"win","winner":"red","drawReason":null,"turns":29,"red":{"agent":"minimax-d2","moves":15,"totalMs":48.381,"maxMs":6.223,"nodes":8560,"searches":13,"deepSearches":13,"illegal":0},"blue":{"agent":"random","moves":14,"totalMs":0.114,"maxMs":0.012,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d2:random:1:b","n":6,"seed":2744780603,"round":1,"result":"win","winner":"blue","drawReason":null,"turns":34,"red":{"agent":"random","moves":17,"totalMs":0.223,"maxMs":0.068,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":17,"totalMs":45.549,"maxMs":4.433,"nodes":7810,"searches":15,"deepSearches":15,"illegal":0}},{"id":"6:minimax-d2:random:2:a","n":6,"seed":2006942235,"round":2,"result":"win","winner":"blue","drawReason":null,"turns":32,"red":{"agent":"minimax-d2","moves":16,"totalMs":46.244,"maxMs":4.553,"nodes":8968,"searches":15,"deepSearches":15,"illegal":0},"blue":{"agent":"random","moves":16,"totalMs":0.124,"maxMs":0.015,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d2:random:2:b","n":6,"seed":2006942235,"round":2,"result":"win","winner":"blue","drawReason":null,"turns":40,"red":{"agent":"random","moves":20,"totalMs":0.229,"maxMs":0.041,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":20,"totalMs":53.66,"maxMs":4.389,"nodes":8834,"searches":18,"deepSearches":18,"illegal":0}},{"id":"6:minimax-d2:random:3:a","n":6,"seed":1220243347,"round":3,"result":"win","winner":"red","drawReason":null,"turns":33,"red":{"agent":"minimax-d2","moves":17,"totalMs":48.293,"maxMs":5.005,"nodes":8976,"searches":15,"deepSearches":15,"illegal":0},"blue":{"agent":"random","moves":16,"totalMs":0.15,"maxMs":0.027,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d2:random:3:b","n":6,"seed":1220243347,"round":3,"result":"win","winner":"blue","drawReason":null,"turns":38,"red":{"agent":"random","moves":19,"totalMs":0.182,"maxMs":0.032,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":19,"totalMs":47.584,"maxMs":4.299,"nodes":8212,"searches":17,"deepSearches":17,"illegal":0}},{"id":"6:minimax-d2:random:4:a","n":6,"seed":4205934393,"round":4,"result":"win","winner":"red","drawReason":null,"turns":23,"red":{"agent":"minimax-d2","moves":12,"totalMs":34.221,"maxMs":4.596,"nodes":7359,"searches":10,"deepSearches":10,"illegal":0},"blue":{"agent":"random","moves":11,"totalMs":0.156,"maxMs":0.076,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d2:random:4:b","n":6,"seed":4205934393,"round":4,"result":"win","winner":"blue","drawReason":null,"turns":30,"red":{"agent":"random","moves":15,"totalMs":0.119,"maxMs":0.024,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":15,"totalMs":40.111,"maxMs":4.324,"nodes":7254,"searches":13,"deepSearches":13,"illegal":0}},{"id":"6:minimax-d2:random:5:a","n":6,"seed":2766119108,"round":5,"result":"win","winner":"red","drawReason":null,"turns":23,"red":{"agent":"minimax-d2","moves":12,"totalMs":38.161,"maxMs":4.825,"nodes":7126,"searches":10,"deepSearches":10,"illegal":0},"blue":{"agent":"random","moves":11,"totalMs":0.087,"maxMs":0.017,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d2:random:5:b","n":6,"seed":2766119108,"round":5,"result":"win","winner":"blue","drawReason":null,"turns":38,"red":{"agent":"random","moves":19,"totalMs":0.152,"maxMs":0.013,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":19,"totalMs":44.212,"maxMs":3.999,"nodes":7706,"searches":17,"deepSearches":17,"illegal":0}},{"id":"6:minimax-d2:random:6:a","n":6,"seed":2300963238,"round":6,"result":"win","winner":"red","drawReason":null,"turns":33,"red":{"agent":"minimax-d2","moves":17,"totalMs":45.954,"maxMs":4.655,"nodes":8189,"searches":15,"deepSearches":15,"illegal":0},"blue":{"agent":"random","moves":16,"totalMs":0.127,"maxMs":0.013,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d2:random:6:b","n":6,"seed":2300963238,"round":6,"result":"win","winner":"blue","drawReason":null,"turns":20,"red":{"agent":"random","moves":10,"totalMs":0.056,"maxMs":0.013,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":10,"totalMs":27.937,"maxMs":4.005,"nodes":6040,"searches":8,"deepSearches":8,"illegal":0}},{"id":"6:minimax-d2:random:7:a","n":6,"seed":65938959,"round":7,"result":"win","winner":"red","drawReason":null,"turns":37,"red":{"agent":"minimax-d2","moves":19,"totalMs":52.505,"maxMs":4.228,"nodes":9830,"searches":17,"deepSearches":17,"illegal":0},"blue":{"agent":"random","moves":18,"totalMs":0.168,"maxMs":0.018,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d2:random:7:b","n":6,"seed":65938959,"round":7,"result":"win","winner":"blue","drawReason":null,"turns":20,"red":{"agent":"random","moves":10,"totalMs":0.074,"maxMs":0.012,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":10,"totalMs":31.943,"maxMs":4.449,"nodes":5666,"searches":8,"deepSearches":8,"illegal":0}},{"id":"6:minimax-d2:random:8:a","n":6,"seed":4081452901,"round":8,"result":"win","winner":"red","drawReason":null,"turns":33,"red":{"agent":"minimax-d2","moves":17,"totalMs":62.403,"maxMs":7.195,"nodes":9530,"searches":15,"deepSearches":15,"illegal":0},"blue":{"agent":"random","moves":16,"totalMs":0.198,"maxMs":0.028,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d2:random:8:b","n":6,"seed":4081452901,"round":8,"result":"win","winner":"blue","drawReason":null,"turns":32,"red":{"agent":"random","moves":16,"totalMs":0.163,"maxMs":0.042,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":16,"totalMs":44.658,"maxMs":4.068,"nodes":8261,"searches":14,"deepSearches":14,"illegal":0}},{"id":"6:minimax-d2:random:9:a","n":6,"seed":2202858139,"round":9,"result":"win","winner":"red","drawReason":null,"turns":23,"red":{"agent":"minimax-d2","moves":12,"totalMs":39.951,"maxMs":4.839,"nodes":7344,"searches":10,"deepSearches":10,"illegal":0},"blue":{"agent":"random","moves":11,"totalMs":0.105,"maxMs":0.016,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d2:random:9:b","n":6,"seed":2202858139,"round":9,"result":"win","winner":"blue","drawReason":null,"turns":38,"red":{"agent":"random","moves":19,"totalMs":0.209,"maxMs":0.02,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":19,"totalMs":49.548,"maxMs":4.516,"nodes":8355,"searches":17,"deepSearches":17,"illegal":0}},{"id":"6:minimax-d2:random:10:a","n":6,"seed":539556585,"round":10,"result":"win","winner":"red","drawReason":null,"turns":33,"red":{"agent":"minimax-d2","moves":17,"totalMs":48.119,"maxMs":4.238,"nodes":9388,"searches":15,"deepSearches":15,"illegal":0},"blue":{"agent":"random","moves":16,"totalMs":0.129,"maxMs":0.016,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d2:random:10:b","n":6,"seed":539556585,"round":10,"result":"win","winner":"blue","drawReason":null,"turns":28,"red":{"agent":"random","moves":14,"totalMs":0.103,"maxMs":0.021,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":14,"totalMs":34.861,"maxMs":3.405,"nodes":6708,"searches":12,"deepSearches":12,"illegal":0}},{"id":"6:minimax-d2:random:11:a","n":6,"seed":3803567490,"round":11,"result":"win","winner":"red","drawReason":null,"turns":39,"red":{"agent":"minimax-d2","moves":20,"totalMs":48.502,"maxMs":3.865,"nodes":8956,"searches":18,"deepSearches":18,"illegal":0},"blue":{"agent":"random","moves":19,"totalMs":0.257,"maxMs":0.057,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d2:random:11:b","n":6,"seed":3803567490,"round":11,"result":"win","winner":"blue","drawReason":null,"turns":22,"red":{"agent":"random","moves":11,"totalMs":0.075,"maxMs":0.014,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":11,"totalMs":33.981,"maxMs":4.27,"nodes":6320,"searches":9,"deepSearches":9,"illegal":0}},{"id":"6:minimax-d2:random:12:a","n":6,"seed":2843685656,"round":12,"result":"win","winner":"red","drawReason":null,"turns":31,"red":{"agent":"minimax-d2","moves":16,"totalMs":44.207,"maxMs":5.14,"nodes":8170,"searches":14,"deepSearches":14,"illegal":0},"blue":{"agent":"random","moves":15,"totalMs":0.143,"maxMs":0.021,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d2:random:12:b","n":6,"seed":2843685656,"round":12,"result":"win","winner":"blue","drawReason":null,"turns":34,"red":{"agent":"random","moves":17,"totalMs":0.19,"maxMs":0.038,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":17,"totalMs":53.936,"maxMs":4.435,"nodes":7999,"searches":15,"deepSearches":15,"illegal":0}},{"id":"6:minimax-d2:random:13:a","n":6,"seed":555208411,"round":13,"result":"win","winner":"red","drawReason":null,"turns":31,"red":{"agent":"minimax-d2","moves":16,"totalMs":59.129,"maxMs":6.787,"nodes":8518,"searches":14,"deepSearches":14,"illegal":0},"blue":{"agent":"random","moves":15,"totalMs":0.176,"maxMs":0.028,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d2:random:13:b","n":6,"seed":555208411,"round":13,"result":"win","winner":"blue","drawReason":null,"turns":30,"red":{"agent":"random","moves":15,"totalMs":0.138,"maxMs":0.022,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":15,"totalMs":43.098,"maxMs":4.578,"nodes":7904,"searches":13,"deepSearches":13,"illegal":0}},{"id":"6:minimax-d2:random:14:a","n":6,"seed":2613150986,"round":14,"result":"win","winner":"red","drawReason":null,"turns":35,"red":{"agent":"minimax-d2","moves":18,"totalMs":50.708,"maxMs":5.404,"nodes":8798,"searches":16,"deepSearches":16,"illegal":0},"blue":{"agent":"random","moves":17,"totalMs":0.142,"maxMs":0.013,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d2:random:14:b","n":6,"seed":2613150986,"round":14,"result":"win","winner":"blue","drawReason":null,"turns":30,"red":{"agent":"random","moves":15,"totalMs":0.092,"maxMs":0.01,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":15,"totalMs":40.644,"maxMs":3.833,"nodes":7987,"searches":13,"deepSearches":13,"illegal":0}},{"id":"6:minimax-d2:random:15:a","n":6,"seed":2096098838,"round":15,"result":"win","winner":"red","drawReason":null,"turns":39,"red":{"agent":"minimax-d2","moves":20,"totalMs":43.595,"maxMs":3.57,"nodes":8214,"searches":18,"deepSearches":18,"illegal":0},"blue":{"agent":"random","moves":19,"totalMs":0.158,"maxMs":0.018,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d2:random:15:b","n":6,"seed":2096098838,"round":15,"result":"win","winner":"blue","drawReason":null,"turns":30,"red":{"agent":"random","moves":15,"totalMs":0.125,"maxMs":0.015,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":15,"totalMs":38.978,"maxMs":4.379,"nodes":6864,"searches":13,"deepSearches":13,"illegal":0}},{"id":"6:minimax-d2:random:16:a","n":6,"seed":2429613257,"round":16,"result":"win","winner":"red","drawReason":null,"turns":31,"red":{"agent":"minimax-d2","moves":16,"totalMs":45.799,"maxMs":4.165,"nodes":9350,"searches":14,"deepSearches":14,"illegal":0},"blue":{"agent":"random","moves":15,"totalMs":0.126,"maxMs":0.022,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d2:random:16:b","n":6,"seed":2429613257,"round":16,"result":"win","winner":"blue","drawReason":null,"turns":36,"red":{"agent":"random","moves":18,"totalMs":0.193,"maxMs":0.031,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":18,"totalMs":55.475,"maxMs":5.789,"nodes":8182,"searches":16,"deepSearches":16,"illegal":0}},{"id":"6:minimax-d2:random:17:a","n":6,"seed":3314675227,"round":17,"result":"win","winner":"red","drawReason":null,"turns":29,"red":{"agent":"minimax-d2","moves":15,"totalMs":51.047,"maxMs":6.546,"nodes":8558,"searches":13,"deepSearches":13,"illegal":0},"blue":{"agent":"random","moves":14,"totalMs":0.163,"maxMs":0.022,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d2:random:17:b","n":6,"seed":3314675227,"round":17,"result":"win","winner":"blue","drawReason":null,"turns":34,"red":{"agent":"random","moves":17,"totalMs":0.279,"maxMs":0.094,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":17,"totalMs":45.867,"maxMs":5.216,"nodes":6903,"searches":15,"deepSearches":15,"illegal":0}},{"id":"6:minimax-d2:random:18:a","n":6,"seed":740912087,"round":18,"result":"win","winner":"red","drawReason":null,"turns":33,"red":{"agent":"minimax-d2","moves":17,"totalMs":82.282,"maxMs":12.361,"nodes":8724,"searches":15,"deepSearches":15,"illegal":0},"blue":{"agent":"random","moves":16,"totalMs":0.247,"maxMs":0.029,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d2:random:18:b","n":6,"seed":740912087,"round":18,"result":"win","winner":"blue","drawReason":null,"turns":34,"red":{"agent":"random","moves":17,"totalMs":0.216,"maxMs":0.038,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":17,"totalMs":48.926,"maxMs":5.289,"nodes":7482,"searches":15,"deepSearches":15,"illegal":0}},{"id":"6:minimax-d2:random:19:a","n":6,"seed":3711049178,"round":19,"result":"win","winner":"red","drawReason":null,"turns":43,"red":{"agent":"minimax-d2","moves":22,"totalMs":61.886,"maxMs":5.692,"nodes":8766,"searches":20,"deepSearches":20,"illegal":0},"blue":{"agent":"random","moves":21,"totalMs":0.275,"maxMs":0.029,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d2:random:19:b","n":6,"seed":3711049178,"round":19,"result":"win","winner":"red","drawReason":null,"turns":49,"red":{"agent":"random","moves":25,"totalMs":0.245,"maxMs":0.016,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d2","moves":24,"totalMs":54.128,"maxMs":3.887,"nodes":8787,"searches":23,"deepSearches":23,"illegal":0}},{"id":"6:minimax-d3:greedy:0:a","n":6,"seed":4064720225,"round":0,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"minimax-d3","moves":9,"totalMs":725.12,"maxMs":134.424,"nodes":168968,"searches":7,"deepSearches":7,"illegal":0},"blue":{"agent":"greedy","moves":8,"totalMs":1.202,"maxMs":0.197,"nodes":240,"searches":8,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d3:greedy:0:b","n":6,"seed":4064720225,"round":0,"result":"win","winner":"blue","drawReason":null,"turns":34,"red":{"agent":"greedy","moves":17,"totalMs":2.646,"maxMs":0.209,"nodes":359,"searches":17,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":17,"totalMs":802.803,"maxMs":109.913,"nodes":154470,"searches":15,"deepSearches":15,"illegal":0}},{"id":"6:minimax-d3:greedy:1:a","n":6,"seed":2412564136,"round":1,"result":"win","winner":"red","drawReason":null,"turns":33,"red":{"agent":"minimax-d3","moves":17,"totalMs":936.685,"maxMs":114.048,"nodes":196205,"searches":15,"deepSearches":15,"illegal":0},"blue":{"agent":"greedy","moves":16,"totalMs":3.079,"maxMs":0.383,"nodes":360,"searches":16,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d3:greedy:1:b","n":6,"seed":2412564136,"round":1,"result":"win","winner":"blue","drawReason":null,"turns":28,"red":{"agent":"greedy","moves":14,"totalMs":2.246,"maxMs":0.182,"nodes":348,"searches":14,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":14,"totalMs":827.07,"maxMs":110.872,"nodes":157913,"searches":12,"deepSearches":12,"illegal":0}},{"id":"6:minimax-d3:greedy:2:a","n":6,"seed":3095825230,"round":2,"result":"win","winner":"blue","drawReason":null,"turns":40,"red":{"agent":"minimax-d3","moves":20,"totalMs":938.59,"maxMs":110.815,"nodes":197632,"searches":19,"deepSearches":19,"illegal":0},"blue":{"agent":"greedy","moves":20,"totalMs":2.944,"maxMs":0.204,"nodes":383,"searches":19,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d3:greedy:2:b","n":6,"seed":3095825230,"round":2,"result":"win","winner":"blue","drawReason":null,"turns":40,"red":{"agent":"greedy","moves":20,"totalMs":3.225,"maxMs":0.218,"nodes":410,"searches":20,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":20,"totalMs":845.233,"maxMs":112.032,"nodes":163081,"searches":18,"deepSearches":18,"illegal":0}},{"id":"6:minimax-d3:greedy:3:a","n":6,"seed":273901396,"round":3,"result":"win","winner":"red","drawReason":null,"turns":19,"red":{"agent":"minimax-d3","moves":10,"totalMs":763.253,"maxMs":111.163,"nodes":177441,"searches":8,"deepSearches":8,"illegal":0},"blue":{"agent":"greedy","moves":9,"totalMs":1.819,"maxMs":0.504,"nodes":261,"searches":9,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d3:greedy:3:b","n":6,"seed":273901396,"round":3,"result":"win","winner":"red","drawReason":null,"turns":31,"red":{"agent":"greedy","moves":16,"totalMs":3.176,"maxMs":0.376,"nodes":349,"searches":15,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":15,"totalMs":1116.978,"maxMs":219.911,"nodes":155101,"searches":14,"deepSearches":14,"illegal":0}},{"id":"6:minimax-d3:greedy:4:a","n":6,"seed":1352979736,"round":4,"result":"win","winner":"red","drawReason":null,"turns":33,"red":{"agent":"minimax-d3","moves":17,"totalMs":1113.801,"maxMs":139.401,"nodes":194742,"searches":15,"deepSearches":15,"illegal":0},"blue":{"agent":"greedy","moves":16,"totalMs":3.601,"maxMs":0.51,"nodes":354,"searches":16,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d3:greedy:4:b","n":6,"seed":1352979736,"round":4,"result":"win","winner":"blue","drawReason":null,"turns":36,"red":{"agent":"greedy","moves":18,"totalMs":2.913,"maxMs":0.193,"nodes":372,"searches":18,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":18,"totalMs":944.787,"maxMs":174.23,"nodes":156408,"searches":16,"deepSearches":16,"illegal":0}},{"id":"6:minimax-d3:greedy:5:a","n":6,"seed":4229530513,"round":5,"result":"win","winner":"red","drawReason":null,"turns":17,"red":{"agent":"minimax-d3","moves":9,"totalMs":772.592,"maxMs":131.035,"nodes":169164,"searches":7,"deepSearches":7,"illegal":0},"blue":{"agent":"greedy","moves":8,"totalMs":1.195,"maxMs":0.202,"nodes":242,"searches":8,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d3:greedy:5:b","n":6,"seed":4229530513,"round":5,"result":"win","winner":"red","drawReason":null,"turns":31,"red":{"agent":"greedy","moves":16,"totalMs":2.782,"maxMs":0.43,"nodes":345,"searches":15,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":15,"totalMs":1083.998,"maxMs":179.308,"nodes":154076,"searches":14,"deepSearches":14,"illegal":0}},{"id":"6:minimax-d3:greedy:6:a","n":6,"seed":3694232451,"round":6,"result":"win","winner":"red","drawReason":null,"turns":35,"red":{"agent":"minimax-d3","moves":18,"totalMs":983.227,"maxMs":122.088,"nodes":195078,"searches":16,"deepSearches":16,"illegal":0},"blue":{"agent":"greedy","moves":17,"totalMs":2.961,"maxMs":0.279,"nodes":359,"searches":17,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d3:greedy:6:b","n":6,"seed":3694232451,"round":6,"result":"win","winner":"blue","drawReason":null,"turns":42,"red":{"agent":"greedy","moves":21,"totalMs":3.371,"maxMs":0.314,"nodes":399,"searches":21,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":21,"totalMs":948.331,"maxMs":158.513,"nodes":155150,"searches":19,"deepSearches":19,"illegal":0}},{"id":"6:minimax-d3:greedy:7:a","n":6,"seed":3163981398,"round":7,"result":"win","winner":"red","drawReason":null,"turns":33,"red":{"agent":"minimax-d3","moves":17,"totalMs":967.006,"maxMs":112.048,"nodes":194820,"searches":15,"deepSearches":15,"illegal":0},"blue":{"agent":"greedy","moves":16,"totalMs":2.897,"maxMs":0.303,"nodes":354,"searches":16,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d3:greedy:7:b","n":6,"seed":3163981398,"round":7,"result":"win","winner":"blue","drawReason":null,"turns":34,"red":{"agent":"greedy","moves":17,"totalMs":2.587,"maxMs":0.19,"nodes":375,"searches":17,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":17,"totalMs":842.384,"maxMs":115.505,"nodes":160678,"searches":15,"deepSearches":15,"illegal":0}},{"id":"6:minimax-d3:greedy:8:a","n":6,"seed":2182082952,"round":8,"result":"win","winner":"red","drawReason":null,"turns":23,"red":{"agent":"minimax-d3","moves":12,"totalMs":841.382,"maxMs":109.251,"nodes":187908,"searches":10,"deepSearches":10,"illegal":0},"blue":{"agent":"greedy","moves":11,"totalMs":1.782,"maxMs":0.192,"nodes":297,"searches":11,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d3:greedy:8:b","n":6,"seed":2182082952,"round":8,"result":"win","winner":"blue","drawReason":null,"turns":26,"red":{"agent":"greedy","moves":13,"totalMs":2.103,"maxMs":0.263,"nodes":325,"searches":13,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":13,"totalMs":802.664,"maxMs":112.818,"nodes":152296,"searches":11,"deepSearches":11,"illegal":0}},{"id":"6:minimax-d3:greedy:9:a","n":6,"seed":3755257513,"round":9,"result":"win","winner":"blue","drawReason":null,"turns":22,"red":{"agent":"minimax-d3","moves":11,"totalMs":845.784,"maxMs":113.785,"nodes":187536,"searches":10,"deepSearches":10,"illegal":0},"blue":{"agent":"greedy","moves":11,"totalMs":1.625,"maxMs":0.215,"nodes":280,"searches":10,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d3:greedy:9:b","n":6,"seed":3755257513,"round":9,"result":"win","winner":"blue","drawReason":null,"turns":38,"red":{"agent":"greedy","moves":19,"totalMs":3.506,"maxMs":0.395,"nodes":407,"searches":19,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":19,"totalMs":1037.516,"maxMs":176.614,"nodes":169582,"searches":17,"deepSearches":17,"illegal":0}},{"id":"6:minimax-d3:greedy:10:a","n":6,"seed":3366619702,"round":10,"result":"win","winner":"red","drawReason":null,"turns":41,"red":{"agent":"minimax-d3","moves":21,"totalMs":1038.685,"maxMs":118.805,"nodes":204672,"searches":19,"deepSearches":19,"illegal":0},"blue":{"agent":"greedy","moves":20,"totalMs":3.232,"maxMs":0.212,"nodes":406,"searches":20,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d3:greedy:10:b","n":6,"seed":3366619702,"round":10,"result":"win","winner":"blue","drawReason":null,"turns":30,"red":{"agent":"greedy","moves":15,"totalMs":2.352,"maxMs":0.195,"nodes":361,"searches":15,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":15,"totalMs":873.315,"maxMs":113.416,"nodes":172792,"searches":13,"deepSearches":13,"illegal":0}},{"id":"6:minimax-d3:greedy:11:a","n":6,"seed":4221210584,"round":11,"result":"win","winner":"red","drawReason":null,"turns":35,"red":{"agent":"minimax-d3","moves":18,"totalMs":994.885,"maxMs":122.218,"nodes":201160,"searches":16,"deepSearches":16,"illegal":0},"blue":{"agent":"greedy","moves":17,"totalMs":2.952,"maxMs":0.271,"nodes":373,"searches":17,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d3:greedy:11:b","n":6,"seed":4221210584,"round":11,"result":"win","winner":"blue","drawReason":null,"turns":32,"red":{"agent":"greedy","moves":16,"totalMs":2.93,"maxMs":0.321,"nodes":384,"searches":16,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":16,"totalMs":1043.657,"maxMs":129.986,"nodes":169399,"searches":14,"deepSearches":14,"illegal":0}},{"id":"6:minimax-d3:greedy:12:a","n":6,"seed":3845616595,"round":12,"result":"win","winner":"red","drawReason":null,"turns":39,"red":{"agent":"minimax-d3","moves":20,"totalMs":1089.686,"maxMs":171.816,"nodes":195039,"searches":18,"deepSearches":18,"illegal":0},"blue":{"agent":"greedy","moves":19,"totalMs":3.67,"maxMs":0.395,"nodes":369,"searches":19,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d3:greedy:12:b","n":6,"seed":3845616595,"round":12,"result":"win","winner":"blue","drawReason":null,"turns":36,"red":{"agent":"greedy","moves":18,"totalMs":2.88,"maxMs":0.27,"nodes":376,"searches":18,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":18,"totalMs":841.044,"maxMs":129.782,"nodes":156700,"searches":16,"deepSearches":16,"illegal":0}},{"id":"6:minimax-d3:greedy:13:a","n":6,"seed":2323275090,"round":13,"result":"win","winner":"red","drawReason":null,"turns":27,"red":{"agent":"minimax-d3","moves":14,"totalMs":881.582,"maxMs":106.226,"nodes":192645,"searches":12,"deepSearches":12,"illegal":0},"blue":{"agent":"greedy","moves":13,"totalMs":2.149,"maxMs":0.218,"nodes":325,"searches":13,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d3:greedy:13:b","n":6,"seed":2323275090,"round":13,"result":"win","winner":"red","drawReason":null,"turns":29,"red":{"agent":"greedy","moves":15,"totalMs":2.212,"maxMs":0.229,"nodes":336,"searches":14,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":14,"totalMs":778.789,"maxMs":107.159,"nodes":153042,"searches":13,"deepSearches":13,"illegal":0}},{"id":"6:minimax-d3:greedy:14:a","n":6,"seed":677004524,"round":14,"result":"win","winner":"blue","drawReason":null,"turns":26,"red":{"agent":"minimax-d3","moves":13,"totalMs":933.102,"maxMs":111.086,"nodes":192558,"searches":12,"deepSearches":12,"illegal":0},"blue":{"agent":"greedy","moves":13,"totalMs":2.377,"maxMs":0.516,"nodes":312,"searches":12,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d3:greedy:14:b","n":6,"seed":677004524,"round":14,"result":"win","winner":"blue","drawReason":null,"turns":30,"red":{"agent":"greedy","moves":15,"totalMs":2.587,"maxMs":0.31,"nodes":361,"searches":15,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":15,"totalMs":897.859,"maxMs":112.763,"nodes":164712,"searches":13,"deepSearches":13,"illegal":0}},{"id":"6:minimax-d3:greedy:15:a","n":6,"seed":603189921,"round":15,"result":"win","winner":"red","drawReason":null,"turns":25,"red":{"agent":"minimax-d3","moves":13,"totalMs":917.707,"maxMs":126.035,"nodes":190634,"searches":11,"deepSearches":11,"illegal":0},"blue":{"agent":"greedy","moves":12,"totalMs":2.02,"maxMs":0.238,"nodes":314,"searches":12,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d3:greedy:15:b","n":6,"seed":603189921,"round":15,"result":"win","winner":"red","drawReason":null,"turns":35,"red":{"agent":"greedy","moves":18,"totalMs":2.859,"maxMs":0.215,"nodes":375,"searches":17,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":17,"totalMs":884.401,"maxMs":108.89,"nodes":159110,"searches":16,"deepSearches":16,"illegal":0}},{"id":"6:minimax-d3:greedy:16:a","n":6,"seed":295286150,"round":16,"result":"win","winner":"red","drawReason":null,"turns":41,"red":{"agent":"minimax-d3","moves":21,"totalMs":1115.79,"maxMs":202.527,"nodes":196440,"searches":19,"deepSearches":19,"illegal":0},"blue":{"agent":"greedy","moves":20,"totalMs":3.668,"maxMs":0.435,"nodes":386,"searches":20,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d3:greedy:16:b","n":6,"seed":295286150,"round":16,"result":"win","winner":"red","drawReason":null,"turns":31,"red":{"agent":"greedy","moves":16,"totalMs":2.507,"maxMs":0.253,"nodes":345,"searches":15,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":15,"totalMs":860.736,"maxMs":121.713,"nodes":153844,"searches":14,"deepSearches":14,"illegal":0}},{"id":"6:minimax-d3:greedy:17:a","n":6,"seed":531458014,"round":17,"result":"win","winner":"red","drawReason":null,"turns":29,"red":{"agent":"minimax-d3","moves":15,"totalMs":966.429,"maxMs":114.525,"nodes":203358,"searches":13,"deepSearches":13,"illegal":0},"blue":{"agent":"greedy","moves":14,"totalMs":2.352,"maxMs":0.279,"nodes":352,"searches":14,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d3:greedy:17:b","n":6,"seed":531458014,"round":17,"result":"win","winner":"blue","drawReason":null,"turns":34,"red":{"agent":"greedy","moves":17,"totalMs":2.751,"maxMs":0.242,"nodes":373,"searches":17,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":17,"totalMs":876.921,"maxMs":107.473,"nodes":160678,"searches":15,"deepSearches":15,"illegal":0}},{"id":"6:minimax-d3:greedy:18:a","n":6,"seed":672884720,"round":18,"result":"win","winner":"red","drawReason":null,"turns":31,"red":{"agent":"minimax-d3","moves":16,"totalMs":1037.834,"maxMs":112.163,"nodes":214254,"searches":14,"deepSearches":14,"illegal":0},"blue":{"agent":"greedy","moves":15,"totalMs":2.471,"maxMs":0.19,"nodes":379,"searches":15,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d3:greedy:18:b","n":6,"seed":672884720,"round":18,"result":"win","winner":"blue","drawReason":null,"turns":24,"red":{"agent":"greedy","moves":12,"totalMs":1.854,"maxMs":0.198,"nodes":314,"searches":12,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":12,"totalMs":754.993,"maxMs":109.866,"nodes":150595,"searches":10,"deepSearches":10,"illegal":0}},{"id":"6:minimax-d3:greedy:19:a","n":6,"seed":1628057979,"round":19,"result":"win","winner":"red","drawReason":null,"turns":27,"red":{"agent":"minimax-d3","moves":14,"totalMs":964.015,"maxMs":143.778,"nodes":192944,"searches":12,"deepSearches":12,"illegal":0},"blue":{"agent":"greedy","moves":13,"totalMs":2.231,"maxMs":0.278,"nodes":325,"searches":13,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d3:greedy:19:b","n":6,"seed":1628057979,"round":19,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"greedy","moves":8,"totalMs":1.125,"maxMs":0.179,"nodes":247,"searches":8,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":8,"totalMs":661.656,"maxMs":124.095,"nodes":142695,"searches":6,"deepSearches":6,"illegal":0}},{"id":"6:minimax-d3:random:0:a","n":6,"seed":2577681578,"round":0,"result":"win","winner":"red","drawReason":null,"turns":31,"red":{"agent":"minimax-d3","moves":16,"totalMs":1026.73,"maxMs":116.007,"nodes":197153,"searches":14,"deepSearches":14,"illegal":0},"blue":{"agent":"random","moves":15,"totalMs":0.195,"maxMs":0.02,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d3:random:0:b","n":6,"seed":2577681578,"round":0,"result":"win","winner":"blue","drawReason":null,"turns":26,"red":{"agent":"random","moves":13,"totalMs":0.14,"maxMs":0.016,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":13,"totalMs":842.057,"maxMs":109.103,"nodes":174233,"searches":11,"deepSearches":11,"illegal":0}},{"id":"6:minimax-d3:random:1:a","n":6,"seed":4004995844,"round":1,"result":"win","winner":"red","drawReason":null,"turns":29,"red":{"agent":"minimax-d3","moves":15,"totalMs":915.414,"maxMs":107.737,"nodes":205484,"searches":13,"deepSearches":13,"illegal":0},"blue":{"agent":"random","moves":14,"totalMs":0.169,"maxMs":0.018,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d3:random:1:b","n":6,"seed":4004995844,"round":1,"result":"win","winner":"blue","drawReason":null,"turns":24,"red":{"agent":"random","moves":12,"totalMs":0.164,"maxMs":0.03,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":12,"totalMs":1139.257,"maxMs":158.119,"nodes":167782,"searches":10,"deepSearches":10,"illegal":0}},{"id":"6:minimax-d3:random:2:a","n":6,"seed":3452618656,"round":2,"result":"win","winner":"red","drawReason":null,"turns":21,"red":{"agent":"minimax-d3","moves":11,"totalMs":833.661,"maxMs":119.168,"nodes":185852,"searches":9,"deepSearches":9,"illegal":0},"blue":{"agent":"random","moves":10,"totalMs":0.101,"maxMs":0.015,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d3:random:2:b","n":6,"seed":3452618656,"round":2,"result":"win","winner":"blue","drawReason":null,"turns":28,"red":{"agent":"random","moves":14,"totalMs":0.211,"maxMs":0.049,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":14,"totalMs":1011.342,"maxMs":125.469,"nodes":190771,"searches":12,"deepSearches":12,"illegal":0}},{"id":"6:minimax-d3:random:3:a","n":6,"seed":3058814981,"round":3,"result":"win","winner":"red","drawReason":null,"turns":33,"red":{"agent":"minimax-d3","moves":17,"totalMs":1075.753,"maxMs":113.019,"nodes":234264,"searches":15,"deepSearches":15,"illegal":0},"blue":{"agent":"random","moves":16,"totalMs":0.213,"maxMs":0.02,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d3:random:3:b","n":6,"seed":3058814981,"round":3,"result":"win","winner":"blue","drawReason":null,"turns":28,"red":{"agent":"random","moves":14,"totalMs":0.194,"maxMs":0.03,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":14,"totalMs":1376.302,"maxMs":188.423,"nodes":178393,"searches":12,"deepSearches":12,"illegal":0}},{"id":"6:minimax-d3:random:4:a","n":6,"seed":828562478,"round":4,"result":"win","winner":"red","drawReason":null,"turns":33,"red":{"agent":"minimax-d3","moves":17,"totalMs":1028.328,"maxMs":128.573,"nodes":192273,"searches":15,"deepSearches":15,"illegal":0},"blue":{"agent":"random","moves":16,"totalMs":0.226,"maxMs":0.028,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d3:random:4:b","n":6,"seed":828562478,"round":4,"result":"win","winner":"blue","drawReason":null,"turns":28,"red":{"agent":"random","moves":14,"totalMs":0.176,"maxMs":0.021,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":14,"totalMs":1067.2,"maxMs":174.218,"nodes":191558,"searches":12,"deepSearches":12,"illegal":0}},{"id":"6:minimax-d3:random:5:a","n":6,"seed":2998898852,"round":5,"result":"win","winner":"red","drawReason":null,"turns":33,"red":{"agent":"minimax-d3","moves":17,"totalMs":1171.523,"maxMs":130.895,"nodes":225647,"searches":15,"deepSearches":15,"illegal":0},"blue":{"agent":"random","moves":16,"totalMs":0.233,"maxMs":0.021,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d3:random:5:b","n":6,"seed":2998898852,"round":5,"result":"win","winner":"blue","drawReason":null,"turns":44,"red":{"agent":"random","moves":22,"totalMs":0.845,"maxMs":0.448,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":22,"totalMs":1257.603,"maxMs":139.414,"nodes":185202,"searches":20,"deepSearches":20,"illegal":0}},{"id":"6:minimax-d3:random:6:a","n":6,"seed":1737120948,"round":6,"result":"win","winner":"red","drawReason":null,"turns":33,"red":{"agent":"minimax-d3","moves":17,"totalMs":1440.327,"maxMs":148.92,"nodes":215862,"searches":15,"deepSearches":15,"illegal":0},"blue":{"agent":"random","moves":16,"totalMs":0.248,"maxMs":0.023,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d3:random:6:b","n":6,"seed":1737120948,"round":6,"result":"win","winner":"blue","drawReason":null,"turns":26,"red":{"agent":"random","moves":13,"totalMs":0.147,"maxMs":0.02,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":13,"totalMs":920.406,"maxMs":123.989,"nodes":174621,"searches":11,"deepSearches":11,"illegal":0}},{"id":"6:minimax-d3:random:7:a","n":6,"seed":1774284330,"round":7,"result":"win","winner":"red","drawReason":null,"turns":31,"red":{"agent":"minimax-d3","moves":16,"totalMs":1187.885,"maxMs":127.88,"nodes":222985,"searches":14,"deepSearches":14,"illegal":0},"blue":{"agent":"random","moves":15,"totalMs":0.218,"maxMs":0.022,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d3:random:7:b","n":6,"seed":1774284330,"round":7,"result":"win","winner":"blue","drawReason":null,"turns":40,"red":{"agent":"random","moves":20,"totalMs":0.318,"maxMs":0.027,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":20,"totalMs":1102.376,"maxMs":149.016,"nodes":190166,"searches":18,"deepSearches":18,"illegal":0}},{"id":"6:minimax-d3:random:8:a","n":6,"seed":1157145199,"round":8,"result":"win","winner":"red","drawReason":null,"turns":37,"red":{"agent":"minimax-d3","moves":19,"totalMs":1430.697,"maxMs":123.755,"nodes":227825,"searches":17,"deepSearches":17,"illegal":0},"blue":{"agent":"random","moves":18,"totalMs":0.371,"maxMs":0.083,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d3:random:8:b","n":6,"seed":1157145199,"round":8,"result":"win","winner":"blue","drawReason":null,"turns":36,"red":{"agent":"random","moves":18,"totalMs":0.24,"maxMs":0.025,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":18,"totalMs":873.603,"maxMs":114.02,"nodes":161754,"searches":16,"deepSearches":16,"illegal":0}},{"id":"6:minimax-d3:random:9:a","n":6,"seed":2604851162,"round":9,"result":"win","winner":"red","drawReason":null,"turns":35,"red":{"agent":"minimax-d3","moves":18,"totalMs":1109.709,"maxMs":150.218,"nodes":201589,"searches":16,"deepSearches":16,"illegal":0},"blue":{"agent":"random","moves":17,"totalMs":0.283,"maxMs":0.073,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d3:random:9:b","n":6,"seed":2604851162,"round":9,"result":"win","winner":"blue","drawReason":null,"turns":34,"red":{"agent":"random","moves":17,"totalMs":0.24,"maxMs":0.028,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":17,"totalMs":1061.17,"maxMs":163.792,"nodes":180356,"searches":15,"deepSearches":15,"illegal":0}},{"id":"6:minimax-d3:random:10:a","n":6,"seed":2057013741,"round":10,"result":"win","winner":"red","drawReason":null,"turns":33,"red":{"agent":"minimax-d3","moves":17,"totalMs":1402.017,"maxMs":182.27,"nodes":259002,"searches":15,"deepSearches":15,"illegal":0},"blue":{"agent":"random","moves":16,"totalMs":0.219,"maxMs":0.022,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d3:random:10:b","n":6,"seed":2057013741,"round":10,"result":"win","winner":"blue","drawReason":null,"turns":24,"red":{"agent":"random","moves":12,"totalMs":0.15,"maxMs":0.026,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":12,"totalMs":878.568,"maxMs":157.228,"nodes":169588,"searches":10,"deepSearches":10,"illegal":0}},{"id":"6:minimax-d3:random:11:a","n":6,"seed":2008278560,"round":11,"result":"win","winner":"red","drawReason":null,"turns":31,"red":{"agent":"minimax-d3","moves":16,"totalMs":1174.087,"maxMs":116.814,"nodes":199489,"searches":14,"deepSearches":14,"illegal":0},"blue":{"agent":"random","moves":15,"totalMs":0.201,"maxMs":0.021,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d3:random:11:b","n":6,"seed":2008278560,"round":11,"result":"win","winner":"blue","drawReason":null,"turns":22,"red":{"agent":"random","moves":11,"totalMs":0.108,"maxMs":0.015,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":11,"totalMs":896.412,"maxMs":161.817,"nodes":175287,"searches":9,"deepSearches":9,"illegal":0}},{"id":"6:minimax-d3:random:12:a","n":6,"seed":1187471904,"round":12,"result":"win","winner":"red","drawReason":null,"turns":27,"red":{"agent":"minimax-d3","moves":14,"totalMs":1138.311,"maxMs":184.015,"nodes":205045,"searches":12,"deepSearches":12,"illegal":0},"blue":{"agent":"random","moves":13,"totalMs":0.162,"maxMs":0.019,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d3:random:12:b","n":6,"seed":1187471904,"round":12,"result":"win","winner":"blue","drawReason":null,"turns":24,"red":{"agent":"random","moves":12,"totalMs":0.186,"maxMs":0.057,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":12,"totalMs":795.841,"maxMs":116.754,"nodes":150191,"searches":10,"deepSearches":10,"illegal":0}},{"id":"6:minimax-d3:random:13:a","n":6,"seed":2249069895,"round":13,"result":"win","winner":"red","drawReason":null,"turns":33,"red":{"agent":"minimax-d3","moves":17,"totalMs":1066.51,"maxMs":135.549,"nodes":194614,"searches":15,"deepSearches":15,"illegal":0},"blue":{"agent":"random","moves":16,"totalMs":0.32,"maxMs":0.098,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d3:random:13:b","n":6,"seed":2249069895,"round":13,"result":"win","winner":"blue","drawReason":null,"turns":26,"red":{"agent":"random","moves":13,"totalMs":0.149,"maxMs":0.019,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":13,"totalMs":984.495,"maxMs":128.209,"nodes":177478,"searches":11,"deepSearches":11,"illegal":0}},{"id":"6:minimax-d3:random:14:a","n":6,"seed":3901433970,"round":14,"result":"win","winner":"red","drawReason":null,"turns":25,"red":{"agent":"minimax-d3","moves":13,"totalMs":1007.546,"maxMs":118.084,"nodes":203159,"searches":11,"deepSearches":11,"illegal":0},"blue":{"agent":"random","moves":12,"totalMs":0.148,"maxMs":0.019,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d3:random:14:b","n":6,"seed":3901433970,"round":14,"result":"win","winner":"blue","drawReason":null,"turns":28,"red":{"agent":"random","moves":14,"totalMs":0.175,"maxMs":0.024,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":14,"totalMs":922.773,"maxMs":115.045,"nodes":171376,"searches":12,"deepSearches":12,"illegal":0}},{"id":"6:minimax-d3:random:15:a","n":6,"seed":776329080,"round":15,"result":"win","winner":"red","drawReason":null,"turns":41,"red":{"agent":"minimax-d3","moves":21,"totalMs":1065.244,"maxMs":119.073,"nodes":204799,"searches":19,"deepSearches":19,"illegal":0},"blue":{"agent":"random","moves":20,"totalMs":0.319,"maxMs":0.024,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d3:random:15:b","n":6,"seed":776329080,"round":15,"result":"win","winner":"blue","drawReason":null,"turns":28,"red":{"agent":"random","moves":14,"totalMs":0.207,"maxMs":0.045,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":14,"totalMs":920.521,"maxMs":132.475,"nodes":165040,"searches":12,"deepSearches":12,"illegal":0}},{"id":"6:minimax-d3:random:16:a","n":6,"seed":1396609737,"round":16,"result":"win","winner":"red","drawReason":null,"turns":29,"red":{"agent":"minimax-d3","moves":15,"totalMs":1142.525,"maxMs":165.324,"nodes":214669,"searches":13,"deepSearches":13,"illegal":0},"blue":{"agent":"random","moves":14,"totalMs":0.21,"maxMs":0.035,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d3:random:16:b","n":6,"seed":1396609737,"round":16,"result":"win","winner":"blue","drawReason":null,"turns":30,"red":{"agent":"random","moves":15,"totalMs":0.154,"maxMs":0.019,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":15,"totalMs":1146.374,"maxMs":153.266,"nodes":191645,"searches":13,"deepSearches":13,"illegal":0}},{"id":"6:minimax-d3:random:17:a","n":6,"seed":3554728446,"round":17,"result":"win","winner":"red","drawReason":null,"turns":27,"red":{"agent":"minimax-d3","moves":14,"totalMs":1091.153,"maxMs":202.121,"nodes":205614,"searches":12,"deepSearches":12,"illegal":0},"blue":{"agent":"random","moves":13,"totalMs":0.139,"maxMs":0.017,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d3:random:17:b","n":6,"seed":3554728446,"round":17,"result":"win","winner":"blue","drawReason":null,"turns":16,"red":{"agent":"random","moves":8,"totalMs":0.05,"maxMs":0.01,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":8,"totalMs":603.847,"maxMs":112.056,"nodes":136558,"searches":6,"deepSearches":6,"illegal":0}},{"id":"6:minimax-d3:random:18:a","n":6,"seed":1842363847,"round":18,"result":"win","winner":"red","drawReason":null,"turns":39,"red":{"agent":"minimax-d3","moves":20,"totalMs":1144.202,"maxMs":126.333,"nodes":214283,"searches":18,"deepSearches":18,"illegal":0},"blue":{"agent":"random","moves":19,"totalMs":0.254,"maxMs":0.022,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d3:random:18:b","n":6,"seed":1842363847,"round":18,"result":"win","winner":"red","drawReason":null,"turns":33,"red":{"agent":"random","moves":17,"totalMs":0.232,"maxMs":0.034,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":16,"totalMs":988.798,"maxMs":124.419,"nodes":166912,"searches":15,"deepSearches":15,"illegal":0}},{"id":"6:minimax-d3:random:19:a","n":6,"seed":4121670614,"round":19,"result":"win","winner":"red","drawReason":null,"turns":41,"red":{"agent":"minimax-d3","moves":21,"totalMs":1388.16,"maxMs":195.607,"nodes":253065,"searches":19,"deepSearches":19,"illegal":0},"blue":{"agent":"random","moves":20,"totalMs":0.263,"maxMs":0.022,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:minimax-d3:random:19:b","n":6,"seed":4121670614,"round":19,"result":"win","winner":"blue","drawReason":null,"turns":26,"red":{"agent":"random","moves":13,"totalMs":0.152,"maxMs":0.045,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"minimax-d3","moves":13,"totalMs":831.698,"maxMs":108.31,"nodes":169326,"searches":11,"deepSearches":11,"illegal":0}},{"id":"6:greedy:random:0:a","n":6,"seed":1761573063,"round":0,"result":"win","winner":"red","drawReason":null,"turns":41,"red":{"agent":"greedy","moves":21,"totalMs":3.005,"maxMs":0.252,"nodes":404,"searches":20,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":20,"totalMs":0.139,"maxMs":0.014,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:greedy:random:0:b","n":6,"seed":1761573063,"round":0,"result":"win","winner":"blue","drawReason":null,"turns":34,"red":{"agent":"random","moves":17,"totalMs":0.089,"maxMs":0.01,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":17,"totalMs":2.543,"maxMs":0.254,"nodes":388,"searches":16,"deepSearches":0,"illegal":0}},{"id":"6:greedy:random:1:a","n":6,"seed":608856871,"round":1,"result":"win","winner":"blue","drawReason":null,"turns":40,"red":{"agent":"greedy","moves":20,"totalMs":4.108,"maxMs":0.554,"nodes":460,"searches":20,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":20,"totalMs":0.169,"maxMs":0.04,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:greedy:random:1:b","n":6,"seed":608856871,"round":1,"result":"win","winner":"blue","drawReason":null,"turns":32,"red":{"agent":"random","moves":16,"totalMs":0.086,"maxMs":0.01,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":16,"totalMs":2.718,"maxMs":0.331,"nodes":392,"searches":15,"deepSearches":0,"illegal":0}},{"id":"6:greedy:random:2:a","n":6,"seed":1445307772,"round":2,"result":"win","winner":"red","drawReason":null,"turns":25,"red":{"agent":"greedy","moves":13,"totalMs":1.875,"maxMs":0.27,"nodes":345,"searches":12,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":12,"totalMs":0.051,"maxMs":0.008,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:greedy:random:2:b","n":6,"seed":1445307772,"round":2,"result":"win","winner":"blue","drawReason":null,"turns":40,"red":{"agent":"random","moves":20,"totalMs":0.132,"maxMs":0.013,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":20,"totalMs":2.858,"maxMs":0.231,"nodes":415,"searches":19,"deepSearches":0,"illegal":0}},{"id":"6:greedy:random:3:a","n":6,"seed":4288608777,"round":3,"result":"win","winner":"red","drawReason":null,"turns":37,"red":{"agent":"greedy","moves":19,"totalMs":2.659,"maxMs":0.26,"nodes":420,"searches":18,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":18,"totalMs":0.108,"maxMs":0.011,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:greedy:random:3:b","n":6,"seed":4288608777,"round":3,"result":"win","winner":"blue","drawReason":null,"turns":36,"red":{"agent":"random","moves":18,"totalMs":0.097,"maxMs":0.01,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":18,"totalMs":2.623,"maxMs":0.244,"nodes":393,"searches":17,"deepSearches":0,"illegal":0}},{"id":"6:greedy:random:4:a","n":6,"seed":149938734,"round":4,"result":"win","winner":"red","drawReason":null,"turns":29,"red":{"agent":"greedy","moves":15,"totalMs":1.963,"maxMs":0.165,"nodes":346,"searches":14,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":14,"totalMs":0.066,"maxMs":0.009,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:greedy:random:4:b","n":6,"seed":149938734,"round":4,"result":"win","winner":"red","drawReason":null,"turns":35,"red":{"agent":"random","moves":18,"totalMs":0.171,"maxMs":0.033,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":17,"totalMs":4.23,"maxMs":0.79,"nodes":395,"searches":17,"deepSearches":0,"illegal":0}},{"id":"6:greedy:random:5:a","n":6,"seed":1308205427,"round":5,"result":"win","winner":"red","drawReason":null,"turns":37,"red":{"agent":"greedy","moves":19,"totalMs":3.362,"maxMs":0.581,"nodes":433,"searches":18,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":18,"totalMs":0.126,"maxMs":0.018,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:greedy:random:5:b","n":6,"seed":1308205427,"round":5,"result":"win","winner":"blue","drawReason":null,"turns":34,"red":{"agent":"random","moves":17,"totalMs":0.102,"maxMs":0.018,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":17,"totalMs":2.497,"maxMs":0.257,"nodes":388,"searches":16,"deepSearches":0,"illegal":0}},{"id":"6:greedy:random:6:a","n":6,"seed":806639720,"round":6,"result":"win","winner":"red","drawReason":null,"turns":35,"red":{"agent":"greedy","moves":18,"totalMs":3.238,"maxMs":0.603,"nodes":427,"searches":17,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":17,"totalMs":0.123,"maxMs":0.029,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:greedy:random:6:b","n":6,"seed":806639720,"round":6,"result":"win","winner":"blue","drawReason":null,"turns":32,"red":{"agent":"random","moves":16,"totalMs":0.08,"maxMs":0.01,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":16,"totalMs":2.218,"maxMs":0.172,"nodes":377,"searches":15,"deepSearches":0,"illegal":0}},{"id":"6:greedy:random:7:a","n":6,"seed":911753572,"round":7,"result":"win","winner":"red","drawReason":null,"turns":29,"red":{"agent":"greedy","moves":15,"totalMs":2.21,"maxMs":0.205,"nodes":369,"searches":14,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":14,"totalMs":0.07,"maxMs":0.012,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:greedy:random:7:b","n":6,"seed":911753572,"round":7,"result":"win","winner":"blue","drawReason":null,"turns":36,"red":{"agent":"random","moves":18,"totalMs":0.105,"maxMs":0.015,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":18,"totalMs":2.774,"maxMs":0.263,"nodes":385,"searches":17,"deepSearches":0,"illegal":0}},{"id":"6:greedy:random:8:a","n":6,"seed":689923035,"round":8,"result":"win","winner":"red","drawReason":null,"turns":29,"red":{"agent":"greedy","moves":15,"totalMs":2.098,"maxMs":0.24,"nodes":376,"searches":14,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":14,"totalMs":0.067,"maxMs":0.009,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:greedy:random:8:b","n":6,"seed":689923035,"round":8,"result":"win","winner":"blue","drawReason":null,"turns":40,"red":{"agent":"random","moves":20,"totalMs":0.214,"maxMs":0.097,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":20,"totalMs":2.687,"maxMs":0.172,"nodes":385,"searches":19,"deepSearches":0,"illegal":0}},{"id":"6:greedy:random:9:a","n":6,"seed":745898922,"round":9,"result":"win","winner":"red","drawReason":null,"turns":31,"red":{"agent":"greedy","moves":16,"totalMs":2.236,"maxMs":0.174,"nodes":363,"searches":15,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":15,"totalMs":0.077,"maxMs":0.009,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:greedy:random:9:b","n":6,"seed":745898922,"round":9,"result":"win","winner":"blue","drawReason":null,"turns":30,"red":{"agent":"random","moves":15,"totalMs":0.072,"maxMs":0.01,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":15,"totalMs":2.037,"maxMs":0.195,"nodes":370,"searches":14,"deepSearches":0,"illegal":0}},{"id":"6:greedy:random:10:a","n":6,"seed":4254412685,"round":10,"result":"win","winner":"red","drawReason":null,"turns":31,"red":{"agent":"greedy","moves":16,"totalMs":2.397,"maxMs":0.22,"nodes":387,"searches":15,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":15,"totalMs":0.097,"maxMs":0.028,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:greedy:random:10:b","n":6,"seed":4254412685,"round":10,"result":"win","winner":"blue","drawReason":null,"turns":30,"red":{"agent":"random","moves":15,"totalMs":0.077,"maxMs":0.012,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":15,"totalMs":2.43,"maxMs":0.245,"nodes":357,"searches":14,"deepSearches":0,"illegal":0}},{"id":"6:greedy:random:11:a","n":6,"seed":2106573534,"round":11,"result":"win","winner":"red","drawReason":null,"turns":37,"red":{"agent":"greedy","moves":19,"totalMs":2.698,"maxMs":0.244,"nodes":443,"searches":18,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":18,"totalMs":0.106,"maxMs":0.011,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:greedy:random:11:b","n":6,"seed":2106573534,"round":11,"result":"win","winner":"blue","drawReason":null,"turns":40,"red":{"agent":"random","moves":20,"totalMs":0.126,"maxMs":0.013,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":20,"totalMs":3.026,"maxMs":0.234,"nodes":427,"searches":19,"deepSearches":0,"illegal":0}},{"id":"6:greedy:random:12:a","n":6,"seed":2080415366,"round":12,"result":"win","winner":"red","drawReason":null,"turns":23,"red":{"agent":"greedy","moves":12,"totalMs":1.532,"maxMs":0.226,"nodes":337,"searches":11,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":11,"totalMs":0.042,"maxMs":0.007,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:greedy:random:12:b","n":6,"seed":2080415366,"round":12,"result":"win","winner":"blue","drawReason":null,"turns":38,"red":{"agent":"random","moves":19,"totalMs":0.123,"maxMs":0.017,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":19,"totalMs":2.823,"maxMs":0.188,"nodes":408,"searches":18,"deepSearches":0,"illegal":0}},{"id":"6:greedy:random:13:a","n":6,"seed":189284120,"round":13,"result":"win","winner":"red","drawReason":null,"turns":47,"red":{"agent":"greedy","moves":24,"totalMs":3.674,"maxMs":0.261,"nodes":473,"searches":23,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":23,"totalMs":0.183,"maxMs":0.015,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:greedy:random:13:b","n":6,"seed":189284120,"round":13,"result":"win","winner":"red","drawReason":null,"turns":31,"red":{"agent":"random","moves":16,"totalMs":0.099,"maxMs":0.018,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":15,"totalMs":2.962,"maxMs":0.327,"nodes":363,"searches":15,"deepSearches":0,"illegal":0}},{"id":"6:greedy:random:14:a","n":6,"seed":3457848742,"round":14,"result":"win","winner":"red","drawReason":null,"turns":33,"red":{"agent":"greedy","moves":17,"totalMs":2.466,"maxMs":0.23,"nodes":418,"searches":16,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":16,"totalMs":0.088,"maxMs":0.01,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:greedy:random:14:b","n":6,"seed":3457848742,"round":14,"result":"win","winner":"blue","drawReason":null,"turns":30,"red":{"agent":"random","moves":15,"totalMs":0.069,"maxMs":0.009,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":15,"totalMs":2.24,"maxMs":0.224,"nodes":358,"searches":14,"deepSearches":0,"illegal":0}},{"id":"6:greedy:random:15:a","n":6,"seed":1708412067,"round":15,"result":"win","winner":"red","drawReason":null,"turns":33,"red":{"agent":"greedy","moves":17,"totalMs":2.553,"maxMs":0.264,"nodes":388,"searches":16,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":16,"totalMs":0.092,"maxMs":0.012,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:greedy:random:15:b","n":6,"seed":1708412067,"round":15,"result":"win","winner":"blue","drawReason":null,"turns":24,"red":{"agent":"random","moves":12,"totalMs":0.043,"maxMs":0.007,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":12,"totalMs":1.567,"maxMs":0.165,"nodes":315,"searches":11,"deepSearches":0,"illegal":0}},{"id":"6:greedy:random:16:a","n":6,"seed":466097946,"round":16,"result":"win","winner":"red","drawReason":null,"turns":33,"red":{"agent":"greedy","moves":17,"totalMs":5.512,"maxMs":0.601,"nodes":401,"searches":16,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":16,"totalMs":0.217,"maxMs":0.035,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:greedy:random:16:b","n":6,"seed":466097946,"round":16,"result":"win","winner":"blue","drawReason":null,"turns":26,"red":{"agent":"random","moves":13,"totalMs":0.058,"maxMs":0.008,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":13,"totalMs":2.057,"maxMs":0.292,"nodes":326,"searches":12,"deepSearches":0,"illegal":0}},{"id":"6:greedy:random:17:a","n":6,"seed":4019563749,"round":17,"result":"win","winner":"red","drawReason":null,"turns":29,"red":{"agent":"greedy","moves":15,"totalMs":2.116,"maxMs":0.179,"nodes":354,"searches":14,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":14,"totalMs":0.069,"maxMs":0.011,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:greedy:random:17:b","n":6,"seed":4019563749,"round":17,"result":"win","winner":"blue","drawReason":null,"turns":50,"red":{"agent":"random","moves":25,"totalMs":0.276,"maxMs":0.083,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":25,"totalMs":3.66,"maxMs":0.218,"nodes":476,"searches":24,"deepSearches":0,"illegal":0}},{"id":"6:greedy:random:18:a","n":6,"seed":2163527119,"round":18,"result":"win","winner":"red","drawReason":null,"turns":45,"red":{"agent":"greedy","moves":23,"totalMs":3.132,"maxMs":0.178,"nodes":428,"searches":22,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":22,"totalMs":0.164,"maxMs":0.017,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:greedy:random:18:b","n":6,"seed":2163527119,"round":18,"result":"win","winner":"blue","drawReason":null,"turns":34,"red":{"agent":"random","moves":17,"totalMs":0.104,"maxMs":0.013,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":17,"totalMs":2.557,"maxMs":0.245,"nodes":390,"searches":16,"deepSearches":0,"illegal":0}},{"id":"6:greedy:random:19:a","n":6,"seed":2671863345,"round":19,"result":"win","winner":"red","drawReason":null,"turns":33,"red":{"agent":"greedy","moves":17,"totalMs":2.826,"maxMs":0.33,"nodes":421,"searches":16,"deepSearches":0,"illegal":0},"blue":{"agent":"random","moves":16,"totalMs":0.087,"maxMs":0.01,"nodes":0,"searches":0,"deepSearches":0,"illegal":0}},{"id":"6:greedy:random:19:b","n":6,"seed":2671863345,"round":19,"result":"win","winner":"blue","drawReason":null,"turns":28,"red":{"agent":"random","moves":14,"totalMs":0.061,"maxMs":0.009,"nodes":0,"searches":0,"deepSearches":0,"illegal":0},"blue":{"agent":"greedy","moves":14,"totalMs":2.038,"maxMs":0.24,"nodes":347,"searches":13,"deepSearches":0,"illegal":0}}]}
diff --git a/web/src/lib/download.ts b/web/src/lib/download.ts
new file mode 100644
index 0000000..51d7859
--- /dev/null
+++ b/web/src/lib/download.ts
@@ -0,0 +1,12 @@
+/** Save text as a file from the browser (CSV / JSON exports). */
+export function downloadText(filename: string, text: string, type = "text/csv;charset=utf-8") {
+ const blob = new Blob([text], { type });
+ const url = URL.createObjectURL(blob);
+ const a = document.createElement("a");
+ a.href = url;
+ a.download = filename;
+ document.body.appendChild(a);
+ a.click();
+ a.remove();
+ setTimeout(() => URL.revokeObjectURL(url), 1000);
+}
diff --git a/web/src/lib/rng.ts b/web/src/lib/rng.ts
index 23be1e7..2e33496 100644
--- a/web/src/lib/rng.ts
+++ b/web/src/lib/rng.ts
@@ -45,3 +45,27 @@ export function sample(rng: Rng, items: readonly T[], k: number): T[] {
export function randomSeed(): number {
return Math.floor(Math.random() * 2 ** 31);
}
+
+/**
+ * Derive a 32-bit seed from a parent seed and any number of integer labels
+ * (board size, pairing, round...). Uses the murmur3 finaliser so nearby
+ * inputs give unrelated seeds; the same inputs always give the same seed.
+ */
+export function deriveSeed(...parts: number[]): number {
+ let h = 0x9e3779b9;
+ for (const part of parts) {
+ let k = Math.imul(part | 0, 0xcc9e2d51);
+ k = (k << 15) | (k >>> 17);
+ k = Math.imul(k, 0x1b873593);
+ h ^= k;
+ h = (h << 13) | (h >>> 19);
+ h = (Math.imul(h, 5) + 0xe6546b64) | 0;
+ }
+ h ^= parts.length;
+ h ^= h >>> 16;
+ h = Math.imul(h, 0x85ebca6b);
+ h ^= h >>> 13;
+ h = Math.imul(h, 0xc2b2ae35);
+ h ^= h >>> 16;
+ return h >>> 0;
+}
diff --git a/web/src/lib/tournament/agents.ts b/web/src/lib/tournament/agents.ts
new file mode 100644
index 0000000..40b4ba1
--- /dev/null
+++ b/web/src/lib/tournament/agents.ts
@@ -0,0 +1,113 @@
+/**
+ * The agents in the round-robin harness. Every minimax variant is the ported
+ * `_4399` agent with exactly one knob changed, so a difference in results can
+ * be attributed to that knob:
+ *
+ * - minimax-dynamic: the original as submitted (dynamic depth 1 to 4);
+ * - minimax-d2 / minimax-d3: the same agent with the depth fixed;
+ * - greedy: no opening book and depth fixed at 1 (the instant-win check is
+ * kept), i.e. one-ply lookahead on the hand-tuned evaluation;
+ * - random: the subject's random baseline.
+ *
+ * The same variants are built from the original Python in
+ * scripts/crosscheck_tournament.py by patching `dynamic_depth_allocation`
+ * and passing `enforceGamePlayer=False`.
+ */
+import { randomBias } from "@/lib/agent/evaluation";
+import { type AgentDecision, type AgentOptions, chooseAgentAction } from "@/lib/agent/player";
+import { chooseRandomAction } from "@/lib/agent/random-player";
+import type { Action, Colour } from "@/lib/cachex/types";
+import type { Rng } from "@/lib/rng";
+
+export const AGENT_IDS = [
+ "minimax-dynamic",
+ "minimax-d2",
+ "minimax-d3",
+ "greedy",
+ "random",
+] as const;
+
+export type AgentId = (typeof AGENT_IDS)[number];
+
+export interface TournamentAgent {
+ id: AgentId;
+ label: string;
+ short: string;
+ description: string;
+ /** What changes relative to the original agent. */
+ knob: string;
+ /** Largest board the in-browser harness offers this agent on (search cost). */
+ maxLiveN: number;
+ options: AgentOptions | null;
+}
+
+export const AGENTS: Record = {
+ "minimax-dynamic": {
+ id: "minimax-dynamic",
+ label: "Minimax, dynamic depth (original)",
+ short: "Original",
+ description:
+ "The _4399 agent as submitted: opening book, instant-win check, then alpha-beta search whose depth grows from 1 to 4 as the board fills.",
+ knob: "none (as submitted)",
+ maxLiveN: 8,
+ options: {},
+ },
+ "minimax-d2": {
+ id: "minimax-d2",
+ label: "Minimax, fixed depth 2",
+ short: "Depth 2",
+ description: "The same agent, searching two plies on every move.",
+ knob: "depth fixed at 2",
+ maxLiveN: 7,
+ options: { fixedDepth: 2 },
+ },
+ "minimax-d3": {
+ id: "minimax-d3",
+ label: "Minimax, fixed depth 3",
+ short: "Depth 3",
+ description: "The same agent, searching three plies on every move. Slow above 5 × 5.",
+ knob: "depth fixed at 3",
+ maxLiveN: 6,
+ options: { fixedDepth: 3 },
+ },
+ greedy: {
+ id: "greedy",
+ label: "Greedy one-ply",
+ short: "Greedy",
+ description:
+ "No opening book: takes an immediate win if there is one, otherwise the move with the best evaluation one ply ahead.",
+ knob: "depth fixed at 1, no opening book",
+ maxLiveN: 8,
+ options: { fixedDepth: 1, enforceGamePlay: false },
+ },
+ random: {
+ id: "random",
+ label: "Random baseline",
+ short: "Random",
+ description:
+ "The subject's random agent: steals with probability 1/2 as Blue's first move, otherwise a uniformly random empty cell.",
+ knob: "not a minimax agent",
+ maxLiveN: 10,
+ options: null,
+ },
+};
+
+export const isAgentId = (x: unknown): x is AgentId =>
+ typeof x === "string" && (AGENT_IDS as readonly string[]).includes(x);
+
+/** Ask an agent for its move given the full action history. */
+export function tournamentMove(
+ id: AgentId,
+ n: number,
+ history: readonly Action[],
+ colour: Colour,
+ rng: Rng,
+): AgentDecision {
+ const agent = AGENTS[id];
+ if (agent.options === null) return chooseRandomAction(n, history, rng);
+ return chooseAgentAction(n, history, colour, {
+ ...agent.options,
+ order: rng,
+ bias: randomBias(rng),
+ });
+}
diff --git a/web/src/lib/tournament/analyse.ts b/web/src/lib/tournament/analyse.ts
new file mode 100644
index 0000000..6697abf
--- /dev/null
+++ b/web/src/lib/tournament/analyse.ts
@@ -0,0 +1,300 @@
+/**
+ * Turns game records into the numbers the tournament page reports:
+ * win rates with Wilson intervals, Bradley-Terry strengths on the Elo scale
+ * with stratified bootstrap intervals, the first-move (colour) effect and
+ * mean move times with bootstrap intervals.
+ */
+import { type CsvValue, toCsv } from "@/lib/csv";
+import { type BootstrapCI, bootstrapMean, stratifiedBootstrapVector } from "@/lib/stats/bootstrap";
+import { type PairOutcome, fitBradleyTerry, toElo } from "@/lib/stats/bradley-terry";
+import { type ProportionCI, wilson } from "@/lib/stats/proportion";
+import { AGENTS, type AgentId } from "./agents";
+import { type GameRecord, winningAgent } from "./play";
+import { canonicalAgents, pairKey } from "./schedule";
+
+export interface Interval {
+ estimate: number;
+ lower: number;
+ upper: number;
+}
+
+export interface AgentStanding {
+ id: AgentId;
+ games: number;
+ wins: number;
+ losses: number;
+ draws: number;
+ /** Games this agent lost by an illegal move. */
+ forfeits: number;
+ illegalMoves: number;
+ moves: number;
+ winRate: ProportionCI;
+ /** Bradley-Terry strength on the Elo scale (anchored, see summary.anchor). */
+ elo: Interval;
+ /** Mean time per move (ms), averaged per game, with a bootstrap CI over games. */
+ moveMs: BootstrapCI;
+ /** Mean search nodes per move. */
+ nodesPerMove: number;
+ /** Share of searched moves that looked deeper than one ply. */
+ deepSearchShare: number;
+}
+
+export interface PairStanding {
+ a: AgentId;
+ b: AgentId;
+ games: number;
+ aWins: number;
+ bWins: number;
+ draws: number;
+ /** Win rate of `a` against `b` (draws count as not-wins). */
+ aWinRate: ProportionCI;
+ /** Wins for `a` when `a` played Red, and games as Red. */
+ aAsRed: { games: number; wins: number };
+ aAsBlue: { games: number; wins: number };
+}
+
+export interface TournamentSummary {
+ games: number;
+ sizes: number[];
+ agents: AgentId[];
+ standings: AgentStanding[];
+ pairs: PairStanding[];
+ colour: {
+ games: number;
+ redWins: number;
+ blueWins: number;
+ draws: number;
+ redWinRate: ProportionCI;
+ };
+ meanTurns: number;
+ /** Agent whose Elo is fixed at 0 (random when present). */
+ anchor: AgentId | null;
+ bootstrap: { reps: number; seed: number; prior: number };
+}
+
+export interface SummariseOptions {
+ reps?: number;
+ seed?: number;
+ /** Virtual drawn games per pairing in the Bradley-Terry fit. */
+ prior?: number;
+ sizes?: number[];
+}
+
+/** Points to each side of one game: 1 / 0, or 0.5 each for a draw. */
+function points(g: GameRecord): { red: number; blue: number } {
+ if (g.winner === null) return { red: 0.5, blue: 0.5 };
+ return g.winner === "red" ? { red: 1, blue: 0 } : { red: 0, blue: 1 };
+}
+
+function outcomesFor(records: readonly GameRecord[], index: Map): PairOutcome[] {
+ return records.map((g) => {
+ const p = points(g);
+ return {
+ i: index.get(g.red.agent)!,
+ j: index.get(g.blue.agent)!,
+ scoreI: p.red,
+ scoreJ: p.blue,
+ };
+ });
+}
+
+export function summariseTournament(
+ allRecords: readonly GameRecord[],
+ { reps = 1000, seed = 4399, prior = 1, sizes }: SummariseOptions = {},
+): TournamentSummary {
+ const records = sizes ? allRecords.filter((g) => sizes.includes(g.n)) : [...allRecords];
+ const agents = canonicalAgents([...new Set(records.flatMap((g) => [g.red.agent, g.blue.agent]))]);
+ const index = new Map(agents.map((id, i) => [id, i]));
+ const anchor: AgentId | null = agents.includes("random") ? "random" : null;
+ const anchorIndex = anchor === null ? undefined : index.get(anchor);
+
+ // Bradley-Terry with a bootstrap stratified by pairing and board size.
+ const strataMap = new Map();
+ for (const g of records) {
+ const key = `${g.n}|${pairKey(g.red.agent, g.blue.agent)}`;
+ const list = strataMap.get(key) ?? [];
+ list.push(g);
+ strataMap.set(key, list);
+ }
+ const strata = [...strataMap.values()];
+ const eloOf = (s: readonly (readonly GameRecord[])[]) =>
+ toElo(
+ fitBradleyTerry(agents.length, outcomesFor(s.flat(), index), { prior }).theta,
+ anchorIndex,
+ );
+ const bt =
+ agents.length >= 2 && records.length > 0
+ ? stratifiedBootstrapVector(strata, eloOf, { reps, seed })
+ : null;
+
+ const standings: AgentStanding[] = agents.map((id, k) => {
+ const mine = records.filter((g) => g.red.agent === id || g.blue.agent === id);
+ let wins = 0;
+ let losses = 0;
+ let draws = 0;
+ let forfeits = 0;
+ let illegalMoves = 0;
+ let moves = 0;
+ let nodes = 0;
+ let searches = 0;
+ let deep = 0;
+ const perGameMs: number[] = [];
+ for (const g of mine) {
+ // Self-play is never scheduled, so each game has exactly one side for `id`.
+ const side = g.red.agent === id ? "red" : "blue";
+ const s = g[side];
+ const w = winningAgent(g);
+ if (w === null) draws++;
+ else if (g.winner === side) wins++;
+ else {
+ losses++;
+ if (g.result === "forfeit") forfeits++;
+ }
+ illegalMoves += s.illegal;
+ moves += s.moves;
+ nodes += s.nodes;
+ searches += s.searches ?? 0;
+ deep += s.deepSearches ?? 0;
+ if (s.moves > 0) perGameMs.push(s.totalMs / s.moves);
+ }
+ return {
+ id,
+ games: mine.length,
+ wins,
+ losses,
+ draws,
+ forfeits,
+ illegalMoves,
+ moves,
+ winRate: wilson(wins, mine.length),
+ elo: bt
+ ? { estimate: bt.estimate[k], lower: bt.lower[k], upper: bt.upper[k] }
+ : { estimate: NaN, lower: NaN, upper: NaN },
+ moveMs: bootstrapMean(perGameMs, { reps: Math.min(reps, 1000), seed: seed + 1 + k }),
+ nodesPerMove: moves > 0 ? nodes / moves : 0,
+ deepSearchShare: searches > 0 ? deep / searches : 0,
+ };
+ });
+ standings.sort((x, y) => y.elo.estimate - x.elo.estimate);
+
+ const pairs: PairStanding[] = [];
+ for (let i = 0; i < agents.length; i++) {
+ for (let j = i + 1; j < agents.length; j++) {
+ const a = agents[i];
+ const b = agents[j];
+ const games = records.filter(
+ (g) =>
+ (g.red.agent === a && g.blue.agent === b) || (g.red.agent === b && g.blue.agent === a),
+ );
+ if (games.length === 0) continue;
+ const aWins = games.filter((g) => winningAgent(g) === a).length;
+ const bWins = games.filter((g) => winningAgent(g) === b).length;
+ const asRed = games.filter((g) => g.red.agent === a);
+ const asBlue = games.filter((g) => g.blue.agent === a);
+ pairs.push({
+ a,
+ b,
+ games: games.length,
+ aWins,
+ bWins,
+ draws: games.length - aWins - bWins,
+ aWinRate: wilson(aWins, games.length),
+ aAsRed: { games: asRed.length, wins: asRed.filter((g) => g.winner === "red").length },
+ aAsBlue: { games: asBlue.length, wins: asBlue.filter((g) => g.winner === "blue").length },
+ });
+ }
+ }
+
+ const redWins = records.filter((g) => g.winner === "red").length;
+ const blueWins = records.filter((g) => g.winner === "blue").length;
+ return {
+ games: records.length,
+ sizes: [...new Set(records.map((g) => g.n))].sort((a, b) => a - b),
+ agents,
+ standings,
+ pairs,
+ colour: {
+ games: records.length,
+ redWins,
+ blueWins,
+ draws: records.length - redWins - blueWins,
+ redWinRate: wilson(redWins, records.length),
+ },
+ meanTurns: records.length ? records.reduce((s, g) => s + g.turns, 0) / records.length : 0,
+ anchor,
+ bootstrap: { reps, seed, prior },
+ };
+}
+
+/** One row per game, for CSV export. */
+export function gamesCsv(records: readonly GameRecord[]): string {
+ const rows = records.map((g) => ({
+ game_id: g.id,
+ board_n: g.n,
+ seed: g.seed,
+ round: g.round,
+ red_agent: g.red.agent,
+ blue_agent: g.blue.agent,
+ result: g.result,
+ winner_colour: g.winner ?? "",
+ winner_agent: winningAgent(g) ?? "",
+ draw_reason: g.drawReason ?? "",
+ turns: g.turns,
+ red_moves: g.red.moves,
+ red_total_ms: Number(g.red.totalMs.toFixed(3)),
+ red_nodes: g.red.nodes,
+ red_illegal: g.red.illegal,
+ blue_moves: g.blue.moves,
+ blue_total_ms: Number(g.blue.totalMs.toFixed(3)),
+ blue_nodes: g.blue.nodes,
+ blue_illegal: g.blue.illegal,
+ }));
+ return toCsv(rows);
+}
+
+/** Leaderboard and pairwise rows, for CSV export. */
+export function summaryCsv(summary: TournamentSummary): string {
+ const r = (x: number, d = 4) => (Number.isFinite(x) ? Number(x.toFixed(d)) : null);
+ const rows: Record[] = [];
+ for (const s of summary.standings) {
+ rows.push({
+ table: "standing",
+ agent: s.id,
+ opponent: "",
+ games: s.games,
+ wins: s.wins,
+ losses: s.losses,
+ draws: s.draws,
+ win_rate: r(s.winRate.p),
+ win_rate_lo95: r(s.winRate.lower),
+ win_rate_hi95: r(s.winRate.upper),
+ elo: r(s.elo.estimate, 1),
+ elo_lo95: r(s.elo.lower, 1),
+ elo_hi95: r(s.elo.upper, 1),
+ illegal_moves: s.illegalMoves,
+ mean_move_ms: r(s.moveMs.estimate, 3),
+ });
+ }
+ for (const p of summary.pairs) {
+ rows.push({
+ table: "pairing",
+ agent: p.a,
+ opponent: p.b,
+ games: p.games,
+ wins: p.aWins,
+ losses: p.bWins,
+ draws: p.draws,
+ win_rate: r(p.aWinRate.p),
+ win_rate_lo95: r(p.aWinRate.lower),
+ win_rate_hi95: r(p.aWinRate.upper),
+ elo: null,
+ elo_lo95: null,
+ elo_hi95: null,
+ illegal_moves: null,
+ mean_move_ms: null,
+ });
+ }
+ return toCsv(rows);
+}
+
+export const agentLabel = (id: AgentId) => AGENTS[id].label;
diff --git a/web/src/lib/tournament/crosscheck.ts b/web/src/lib/tournament/crosscheck.ts
new file mode 100644
index 0000000..95fe9f7
--- /dev/null
+++ b/web/src/lib/tournament/crosscheck.ts
@@ -0,0 +1,67 @@
+/**
+ * Compare the TypeScript reference tournament with the original-Python
+ * cross-check (scripts/crosscheck_tournament.py) on the pairings and board
+ * sizes both ran. RNG streams differ between the two, so games differ; the
+ * question is whether the win rates agree within sampling error.
+ */
+import {
+ type DifferenceCI,
+ type ProportionCI,
+ newcombeDifference,
+ wilson,
+} from "@/lib/stats/proportion";
+import type { AgentId } from "./agents";
+import { type GameRecord, winningAgent } from "./play";
+import { canonicalAgents } from "./schedule";
+
+export interface PythonGame {
+ n: number;
+ red: AgentId;
+ blue: AgentId;
+ seed: number;
+ winner: "red" | "blue" | null;
+ turns: number;
+}
+
+export interface CrosscheckRow {
+ a: AgentId;
+ b: AgentId;
+ sizes: number[];
+ python: ProportionCI;
+ typescript: ProportionCI;
+ /** Python − TypeScript win rate of `a`, Newcombe 95% interval. */
+ difference: DifferenceCI;
+}
+
+const winnerOf = (g: PythonGame): AgentId | null => (g.winner === null ? null : g[g.winner]);
+
+export function compareImplementations(
+ ts: readonly GameRecord[],
+ py: readonly PythonGame[],
+): CrosscheckRow[] {
+ const sizes = [...new Set(py.map((g) => g.n))].sort((x, y) => x - y);
+ const agents = canonicalAgents([...new Set(py.flatMap((g) => [g.red, g.blue]))]);
+ const rows: CrosscheckRow[] = [];
+ for (let i = 0; i < agents.length; i++) {
+ for (let j = i + 1; j < agents.length; j++) {
+ const a = agents[i];
+ const b = agents[j];
+ const isPair = (red: AgentId, blue: AgentId) =>
+ (red === a && blue === b) || (red === b && blue === a);
+ const pyGames = py.filter((g) => sizes.includes(g.n) && isPair(g.red, g.blue));
+ const tsGames = ts.filter((g) => sizes.includes(g.n) && isPair(g.red.agent, g.blue.agent));
+ if (!pyGames.length || !tsGames.length) continue;
+ const pyWins = pyGames.filter((g) => winnerOf(g) === a).length;
+ const tsWins = tsGames.filter((g) => winningAgent(g) === a).length;
+ rows.push({
+ a,
+ b,
+ sizes,
+ python: wilson(pyWins, pyGames.length),
+ typescript: wilson(tsWins, tsGames.length),
+ difference: newcombeDifference(pyWins, pyGames.length, tsWins, tsGames.length),
+ });
+ }
+ }
+ return rows;
+}
diff --git a/web/src/lib/tournament/play.ts b/web/src/lib/tournament/play.ts
new file mode 100644
index 0000000..4b6acb6
--- /dev/null
+++ b/web/src/lib/tournament/play.ts
@@ -0,0 +1,146 @@
+/**
+ * Plays one tournament game under the ported referee rules. The referee
+ * validates every action; an exception or an illegal action counts as an
+ * illegal move and forfeits the game to the opponent.
+ */
+import { Game } from "@/lib/cachex/game";
+import { type Action, type Colour, opponent } from "@/lib/cachex/types";
+import { createRng, deriveSeed } from "@/lib/rng";
+import { type AgentId, tournamentMove } from "./agents";
+import type { GameSpec } from "./schedule";
+
+export interface SideStats {
+ agent: AgentId;
+ moves: number;
+ /** Total wall-clock time spent choosing moves, in ms. */
+ totalMs: number;
+ maxMs: number;
+ /** Search nodes visited across the game (0 for random / book moves). */
+ nodes: number;
+ /** Moves chosen by a minimax search (not the book, an instant win or random). */
+ searches: number;
+ /** Of those, searches deeper than one ply. */
+ deepSearches: number;
+ illegal: number;
+}
+
+export interface GameRecord {
+ id: string;
+ n: number;
+ seed: number;
+ round: number;
+ result: "win" | "draw" | "forfeit";
+ winner: Colour | null;
+ drawReason: "repetition" | "max-turns" | null;
+ turns: number;
+ red: SideStats;
+ blue: SideStats;
+}
+
+export type MoveFn = (
+ id: AgentId,
+ n: number,
+ history: readonly Action[],
+ colour: Colour,
+ seed: number,
+) => Action | { action: Action; nodes?: number; depth?: number | null };
+
+const defaultMove: MoveFn = (id, n, history, colour, seed) => {
+ const decision = tournamentMove(id, n, history, colour, createRng(seed));
+ const e = decision.explanation;
+ return {
+ action: decision.action,
+ nodes: e.kind === "search" ? e.nodes : 0,
+ depth: e.kind === "search" ? e.depth : null,
+ };
+};
+
+export function playTournamentGame(
+ spec: GameSpec,
+ { move = defaultMove, now = () => performance.now() }: { move?: MoveFn; now?: () => number } = {},
+): GameRecord {
+ const game = new Game(spec.n);
+ const history: Action[] = [];
+ const side = (agent: AgentId): SideStats => ({
+ agent,
+ moves: 0,
+ totalMs: 0,
+ maxMs: 0,
+ nodes: 0,
+ searches: 0,
+ deepSearches: 0,
+ illegal: 0,
+ });
+ const stats: Record = { red: side(spec.red), blue: side(spec.blue) };
+
+ while (!game.over()) {
+ const colour = game.turnPlayer();
+ const s = stats[colour];
+ const started = now();
+ let action: Action | null = null;
+ try {
+ const out = move(s.agent, spec.n, history, colour, deriveSeed(spec.seed, history.length));
+ if (Array.isArray(out)) action = out as Action;
+ else {
+ const result = out as { action: Action; nodes?: number; depth?: number | null };
+ action = result.action;
+ s.nodes += result.nodes ?? 0;
+ if (typeof result.depth === "number") {
+ s.searches += 1;
+ if (result.depth > 1) s.deepSearches += 1;
+ }
+ }
+ } catch {
+ action = null;
+ }
+ const elapsed = now() - started;
+ s.moves += 1;
+ s.totalMs += elapsed;
+ s.maxMs = Math.max(s.maxMs, elapsed);
+
+ if (action === null || !game.isLegal(action)) {
+ s.illegal += 1;
+ return finish(spec, game, stats, { result: "forfeit", winner: opponent(colour) });
+ }
+ game.update(colour, action);
+ history.push(action);
+ }
+
+ const r = game.result!;
+ return finish(
+ spec,
+ game,
+ stats,
+ r.kind === "win"
+ ? { result: "win", winner: r.winner }
+ : { result: "draw", winner: null, drawReason: r.reason },
+ );
+}
+
+function finish(
+ spec: GameSpec,
+ game: Game,
+ stats: Record,
+ outcome: {
+ result: GameRecord["result"];
+ winner: Colour | null;
+ drawReason?: GameRecord["drawReason"];
+ },
+): GameRecord {
+ return {
+ id: spec.id,
+ n: spec.n,
+ seed: spec.seed,
+ round: spec.round,
+ result: outcome.result,
+ winner: outcome.winner,
+ drawReason: outcome.drawReason ?? null,
+ turns: game.nturns,
+ red: stats.red,
+ blue: stats.blue,
+ };
+}
+
+/** The agent that won, or null for a draw. */
+export const winningAgent = (g: GameRecord): AgentId | null =>
+ g.winner === null ? null : g[g.winner].agent;
diff --git a/web/src/lib/tournament/schedule.ts b/web/src/lib/tournament/schedule.ts
new file mode 100644
index 0000000..4355dc5
--- /dev/null
+++ b/web/src/lib/tournament/schedule.ts
@@ -0,0 +1,64 @@
+/**
+ * Round-robin schedule. Every pairing plays `rounds` colour-swapped pairs of
+ * games on every board size: in each round the same seed is used twice, once
+ * with each agent as Red, so first-move advantage cancels within a pairing.
+ */
+import { deriveSeed } from "@/lib/rng";
+import { AGENT_IDS, type AgentId } from "./agents";
+
+export interface TournamentConfig {
+ agents: AgentId[];
+ sizes: number[];
+ /** Colour-swapped game pairs per pairing per board size (games = 2 × rounds). */
+ rounds: number;
+ seed: number;
+}
+
+export interface GameSpec {
+ id: string;
+ n: number;
+ red: AgentId;
+ blue: AgentId;
+ /** Shared by both games of a colour-swapped pair. */
+ seed: number;
+ round: number;
+}
+
+/** Agents in canonical order, without duplicates. */
+export const canonicalAgents = (agents: readonly AgentId[]) =>
+ AGENT_IDS.filter((id) => agents.includes(id));
+
+export function pairKey(a: AgentId, b: AgentId): string {
+ const [x, y] = canonicalAgents([a, b]);
+ return `${x}|${y}`;
+}
+
+export function buildSchedule(config: TournamentConfig): GameSpec[] {
+ const agents = canonicalAgents(config.agents);
+ if (agents.length < 2) throw new RangeError("a round robin needs at least two agents");
+ if (!Number.isInteger(config.rounds) || config.rounds < 1) {
+ throw new RangeError("rounds must be a positive integer");
+ }
+ const sizes = [...new Set(config.sizes)].sort((a, b) => a - b);
+ const games: GameSpec[] = [];
+ for (const n of sizes) {
+ for (let i = 0; i < agents.length; i++) {
+ for (let j = i + 1; j < agents.length; j++) {
+ const a = agents[i];
+ const b = agents[j];
+ for (let round = 0; round < config.rounds; round++) {
+ const seed = deriveSeed(
+ config.seed,
+ n,
+ AGENT_IDS.indexOf(a),
+ AGENT_IDS.indexOf(b),
+ round,
+ );
+ games.push({ id: `${n}:${a}:${b}:${round}:a`, n, red: a, blue: b, seed, round });
+ games.push({ id: `${n}:${a}:${b}:${round}:b`, n, red: b, blue: a, seed, round });
+ }
+ }
+ }
+ }
+ return games;
+}
diff --git a/web/src/lib/tournament/tournament.test.ts b/web/src/lib/tournament/tournament.test.ts
new file mode 100644
index 0000000..7ee98d6
--- /dev/null
+++ b/web/src/lib/tournament/tournament.test.ts
@@ -0,0 +1,289 @@
+import { describe, expect, it } from "vitest";
+
+import { AgentBoard } from "@/lib/agent/agent-board";
+import { chooseAgentAction } from "@/lib/agent/player";
+import { runAgent } from "@/lib/agent/run-agent";
+import { place } from "@/lib/cachex/types";
+import { csvCell, toCsv } from "@/lib/csv";
+import { AGENT_IDS, AGENTS, tournamentMove } from "./agents";
+import { gamesCsv, summariseTournament, summaryCsv } from "./analyse";
+import { type GameRecord, playTournamentGame } from "./play";
+import { buildSchedule, pairKey } from "./schedule";
+import { createRng } from "@/lib/rng";
+
+describe("round-robin schedule", () => {
+ const config = {
+ agents: ["random", "greedy", "minimax-dynamic"] as const,
+ sizes: [5, 4, 4],
+ rounds: 3,
+ seed: 11,
+ };
+ const games = buildSchedule({ ...config, agents: [...config.agents] });
+
+ it("plays every pairing on every size, colour-swapped", () => {
+ // 3 pairings × 2 sizes × 3 rounds × 2 colours
+ expect(games).toHaveLength(36);
+ const byPair = new Map();
+ for (const g of games) {
+ const key = `${g.n}|${pairKey(g.red, g.blue)}`;
+ byPair.set(key, [...(byPair.get(key) ?? []), g]);
+ }
+ expect(byPair.size).toBe(6);
+ for (const list of byPair.values()) {
+ expect(list).toHaveLength(6);
+ const [a, b] = pairKey(list[0].red, list[0].blue).split("|");
+ expect(list.filter((g) => g.red === a)).toHaveLength(3);
+ expect(list.filter((g) => g.red === b)).toHaveLength(3);
+ }
+ });
+
+ it("shares one seed between the two games of a colour-swapped pair", () => {
+ for (let i = 0; i < games.length; i += 2) {
+ expect(games[i].seed).toBe(games[i + 1].seed);
+ expect(games[i].red).toBe(games[i + 1].blue);
+ }
+ expect(new Set(games.map((g) => g.seed)).size).toBe(games.length / 2);
+ expect(new Set(games.map((g) => g.id)).size).toBe(games.length);
+ });
+
+ it("is deterministic and rejects degenerate configs", () => {
+ expect(buildSchedule({ ...config, agents: [...config.agents] })).toEqual(games);
+ expect(() => buildSchedule({ ...config, agents: ["random"] })).toThrow(RangeError);
+ expect(() => buildSchedule({ ...config, agents: [...config.agents], rounds: 0 })).toThrow(
+ RangeError,
+ );
+ });
+});
+
+describe("agents", () => {
+ it("are the original with one knob changed", () => {
+ const n = 6;
+ const history = [place(1, 1), place(4, 2), place(2, 3)] as const;
+ // The original, unpatched, is exactly what /play and /spectate run.
+ const original = tournamentMove("minimax-dynamic", n, history, "blue", createRng(3));
+ const viaPlayPage = runAgent({
+ id: 1,
+ kind: "minimax",
+ n,
+ history: [...history],
+ colour: "blue",
+ seed: 3,
+ });
+ if (!viaPlayPage.ok) throw new Error(viaPlayPage.error);
+ expect(original).toEqual(viaPlayPage.decision);
+ if (original.explanation.kind !== "search") throw new Error("expected a search");
+ expect(original.explanation.depth).toBe(1);
+
+ const d3 = tournamentMove("minimax-d3", n, history, "blue", createRng(3));
+ if (d3.explanation.kind !== "search") throw new Error("expected a search");
+ expect(d3.explanation.depth).toBe(3);
+
+ // Greedy skips the opening book.
+ const greedyOpening = tournamentMove("greedy", n, [], "red", createRng(1));
+ expect(greedyOpening.explanation.kind).toBe("search");
+ const bookOpening = tournamentMove("minimax-d2", n, [], "red", createRng(1));
+ expect(bookOpening.explanation.kind).toBe("opening");
+ expect(tournamentMove("random", n, [], "red", createRng(1)).explanation.kind).toBe("random");
+ expect(AGENT_IDS.every((id) => AGENTS[id].id === id)).toBe(true);
+ });
+
+ it("fixed depth 1 never looks past one ply", () => {
+ const board = AgentBoard.fromActions(5, [place(1, 1), place(3, 3), place(2, 2)]);
+ const d = chooseAgentAction(5, [place(1, 1), place(3, 3), place(2, 2)], "blue", {
+ fixedDepth: 1,
+ });
+ if (d.explanation.kind !== "search") throw new Error("expected a search");
+ expect(d.explanation.depth).toBe(1);
+ // depth 1 visits the root plus one node per legal move
+ expect(d.explanation.nodes).toBe(1 + board.emptyCount());
+ });
+});
+
+describe("playing a game", () => {
+ const spec = {
+ id: "t",
+ n: 4,
+ red: "minimax-dynamic",
+ blue: "random",
+ seed: 99,
+ round: 0,
+ } as const;
+
+ it("is reproducible from its seed", () => {
+ let t = 0;
+ const now = () => (t += 1);
+ const a = playTournamentGame({ ...spec }, { now });
+ t = 0;
+ const b = playTournamentGame({ ...spec }, { now });
+ expect(a).toEqual(b);
+ expect(a.result === "win" || a.result === "draw").toBe(true);
+ expect(a.red.moves + a.blue.moves).toBe(a.turns);
+ expect(a.red.illegal + a.blue.illegal).toBe(0);
+ });
+
+ it("forfeits the game on an illegal move or an exception", () => {
+ const illegal = playTournamentGame(
+ { ...spec },
+ {
+ move: (id, n, history, colour) =>
+ colour === "blue"
+ ? place(9, 9)
+ : tournamentMove(id, n, history, colour, createRng(1)).action,
+ },
+ );
+ expect(illegal).toMatchObject({ result: "forfeit", winner: "red", turns: 1 });
+ expect(illegal.blue.illegal).toBe(1);
+
+ const crash = playTournamentGame(
+ { ...spec },
+ {
+ move: () => {
+ throw new Error("boom");
+ },
+ },
+ );
+ expect(crash).toMatchObject({ result: "forfeit", winner: "blue", turns: 0 });
+ expect(crash.red.illegal).toBe(1);
+ });
+});
+
+function record(
+ red: GameRecord["red"]["agent"],
+ blue: GameRecord["blue"]["agent"],
+ winner: "red" | "blue" | null,
+ n = 4,
+ i = 0,
+): GameRecord {
+ const side = (agent: GameRecord["red"]["agent"]) => ({
+ agent,
+ moves: 5,
+ totalMs: 10,
+ maxMs: 3,
+ nodes: 20,
+ searches: 4,
+ deepSearches: 1,
+ illegal: 0,
+ });
+ return {
+ id: `${red}-${blue}-${i}`,
+ n,
+ seed: i,
+ round: i,
+ result: winner === null ? "draw" : "win",
+ winner,
+ drawReason: winner === null ? "repetition" : null,
+ turns: 10,
+ red: side(red),
+ blue: side(blue),
+ };
+}
+
+describe("tournament summary", () => {
+ // Original beats random 9-1, greedy beats random 7-3, original vs greedy 6-4.
+ const games: GameRecord[] = [];
+ const add = (
+ a: GameRecord["red"]["agent"],
+ b: GameRecord["red"]["agent"],
+ aWins: number,
+ bWins: number,
+ ) => {
+ for (let k = 0; k < aWins; k++)
+ games.push(record(k % 2 ? a : b, k % 2 ? b : a, k % 2 ? "red" : "blue", 4, games.length));
+ for (let k = 0; k < bWins; k++)
+ games.push(record(k % 2 ? a : b, k % 2 ? b : a, k % 2 ? "blue" : "red", 4, games.length));
+ };
+ add("minimax-dynamic", "random", 9, 1);
+ add("greedy", "random", 7, 3);
+ add("minimax-dynamic", "greedy", 6, 4);
+ games.push(record("greedy", "random", null, 5, games.length));
+ const summary = summariseTournament(games, { reps: 200, seed: 1 });
+
+ it("counts wins, losses and draws per agent with Wilson intervals", () => {
+ const original = summary.standings.find((s) => s.id === "minimax-dynamic")!;
+ expect(original).toMatchObject({ games: 20, wins: 15, losses: 5, draws: 0 });
+ expect(original.winRate.p).toBe(0.75);
+ const greedy = summary.standings.find((s) => s.id === "greedy")!;
+ expect(greedy).toMatchObject({ games: 21, wins: 11, losses: 9, draws: 1 });
+ expect(summary.games).toBe(31);
+ expect(summary.sizes).toEqual([4, 5]);
+ });
+
+ it("anchors Elo at the random agent and orders the leaderboard by strength", () => {
+ expect(summary.anchor).toBe("random");
+ expect(summary.standings.map((s) => s.id)).toEqual(["minimax-dynamic", "greedy", "random"]);
+ const random = summary.standings.find((s) => s.id === "random")!;
+ expect(random.elo.estimate).toBe(0);
+ for (const s of summary.standings) {
+ expect(s.elo.lower).toBeLessThanOrEqual(s.elo.estimate + 1e-9);
+ expect(s.elo.upper).toBeGreaterThanOrEqual(s.elo.estimate - 1e-9);
+ }
+ });
+
+ it("reports pairings and the colour effect", () => {
+ const p = summary.pairs.find((x) => x.a === "minimax-dynamic" && x.b === "random")!;
+ expect(p).toMatchObject({ games: 10, aWins: 9, bWins: 1, draws: 0 });
+ expect(p.aAsRed.games + p.aAsBlue.games).toBe(10);
+ expect(summary.colour.redWins + summary.colour.blueWins + summary.colour.draws).toBe(31);
+ });
+
+ it("filters by board size and is reproducible", () => {
+ const only5 = summariseTournament(games, { reps: 50, seed: 1, sizes: [5] });
+ expect(only5.games).toBe(1);
+ expect(summariseTournament(games, { reps: 200, seed: 1 })).toEqual(summary);
+ });
+
+ it("exports CSV", () => {
+ const csv = gamesCsv(games);
+ expect(csv.split("\r\n")[0]).toContain("game_id,board_n,seed");
+ expect(csv.trim().split("\r\n")).toHaveLength(games.length + 1);
+ const s = summaryCsv(summary);
+ expect(s).toContain("standing,minimax-dynamic");
+ expect(s).toContain("pairing,minimax-dynamic,random,10,9,1,0,0.9");
+ });
+});
+
+describe("CSV writer", () => {
+ it("quotes, escapes and neutralises formulas", () => {
+ expect(csvCell('say "hi", ok')).toBe('"say ""hi"", ok"');
+ expect(csvCell("=HYPERLINK(1)")).toBe("'=HYPERLINK(1)");
+ expect(csvCell(-3)).toBe("-3");
+ expect(csvCell(null)).toBe("");
+ expect(csvCell(NaN)).toBe("");
+ expect(toCsv([{ a: 1, b: "x\ny" }])).toBe('a,b\r\n1,"x\ny"\r\n');
+ expect(toCsv([])).toBe("\r\n");
+ });
+});
+
+describe("Python cross-check comparison", () => {
+ it("compares win rates per pairing on the shared sizes", async () => {
+ const { compareImplementations } = await import("./crosscheck");
+ const ts: GameRecord[] = [
+ record("minimax-dynamic", "random", "red", 4, 1),
+ record("random", "minimax-dynamic", "blue", 4, 2),
+ record("minimax-dynamic", "random", "blue", 6, 3), // size not in the Python run
+ ];
+ const py = [
+ {
+ n: 4,
+ red: "minimax-dynamic" as const,
+ blue: "random" as const,
+ seed: 1,
+ winner: "red" as const,
+ turns: 9,
+ },
+ {
+ n: 4,
+ red: "random" as const,
+ blue: "minimax-dynamic" as const,
+ seed: 1,
+ winner: "red" as const,
+ turns: 9,
+ },
+ ];
+ const [row] = compareImplementations(ts, py);
+ expect(row).toMatchObject({ a: "minimax-dynamic", b: "random", sizes: [4] });
+ expect(row.python.p).toBe(0.5);
+ expect(row.typescript.p).toBe(1);
+ expect(row.difference.estimate).toBe(-0.5);
+ });
+});
diff --git a/web/src/workers/astar-benchmark.worker.ts b/web/src/workers/astar-benchmark.worker.ts
index 5f5dea9..09b38a5 100644
--- a/web/src/workers/astar-benchmark.worker.ts
+++ b/web/src/workers/astar-benchmark.worker.ts
@@ -1,16 +1,17 @@
/**
- * Runs the Manhattan vs Euclidean heuristic study off the main thread.
+ * Runs the paired Manhattan vs Euclidean heuristic study off the main thread.
*/
-import { type BenchmarkRow, runHeuristicBenchmark } from "@/lib/astar/random-board";
+import { type PairedStudyRow, runPairedStudy } from "@/lib/analysis/astar-paired";
export interface BenchmarkRequest {
id: number;
dimensions: number[];
+ boardsPerDimension: number;
seed: number;
}
export type BenchmarkResponse =
- | { id: number; ok: true; rows: BenchmarkRow[]; elapsedMs: number }
+ | { id: number; ok: true; rows: PairedStudyRow[]; elapsedMs: number }
| { id: number; ok: false; error: string };
const ctx = self as unknown as {
@@ -24,7 +25,7 @@ const ctx = self as unknown as {
ctx.addEventListener("message", ({ data }) => {
const started = performance.now();
try {
- const rows = runHeuristicBenchmark(data.dimensions, data.seed);
+ const rows = runPairedStudy(data);
ctx.postMessage({ id: data.id, ok: true, rows, elapsedMs: performance.now() - started });
} catch (err) {
ctx.postMessage({
diff --git a/web/src/workers/tournament.worker.ts b/web/src/workers/tournament.worker.ts
new file mode 100644
index 0000000..9069e7a
--- /dev/null
+++ b/web/src/workers/tournament.worker.ts
@@ -0,0 +1,34 @@
+/**
+ * Plays tournament games off the main thread. The pool in
+ * use-tournament-pool.ts runs several of these in parallel.
+ */
+import { type GameRecord, playTournamentGame } from "@/lib/tournament/play";
+import type { GameSpec } from "@/lib/tournament/schedule";
+
+export interface TournamentJob {
+ id: number;
+ spec: GameSpec;
+}
+
+export type TournamentJobResult =
+ { id: number; ok: true; record: GameRecord } | { id: number; ok: false; error: string };
+
+const ctx = self as unknown as {
+ postMessage: (message: TournamentJobResult) => void;
+ addEventListener: (
+ type: "message",
+ listener: (event: MessageEvent) => void,
+ ) => void;
+};
+
+ctx.addEventListener("message", ({ data }) => {
+ try {
+ ctx.postMessage({ id: data.id, ok: true, record: playTournamentGame(data.spec) });
+ } catch (err) {
+ ctx.postMessage({
+ id: data.id,
+ ok: false,
+ error: err instanceof Error ? err.message : String(err),
+ });
+ }
+});
From dac6fa13e08fffda3371467048558a5d07c4cd9c Mon Sep 17 00:00:00 2001
From: rNLKJA <62606765+rNLKJA@users.noreply.github.com>
Date: Tue, 6 Oct 2026 00:59:11 +1030
Subject: [PATCH 03/18] feat(ai): add bring-your-own-key commentator, LLM arena
and audit log
- AI settings dialog: Anthropic (default, Claude Haiku 4.5 or Sonnet
5.5) or OpenAI (editable model id). The visitor's key is kept in
sessionStorage by default, localStorage only on opt-in, with a forget
button. Calls go straight from the browser to the provider; the key
never reaches this site, the audit log or the repository.
- Provider adapters in lib/ai (official Anthropic SDK with browser
access, OpenAI Chat Completions with strict JSON schema), zod
validation and friendly errors (invalid key, rate limit, overload,
network/CORS, refusal, truncation).
- Move commentator grounded in the agent's own evaluation breakdown,
with an automatic grounding check and accept / edit / reject review.
- LLM Arena: the model plays the minimax agent with JSON moves checked
against the legal moves (retry, then forfeit), compared on identical
seeds with random and greedy baselines; Wilson CIs, illegal-answer
rate, latency and tokens, CSV export.
- Every call is audit-logged in IndexedDB and viewable at /ai-log with
JSON and CSV export. All output is labelled AI-generated.
- Tests mock fetch for both providers and assert the key never appears
in log entries or exports.
Co-Authored-By: Claude Opus 5.5
---
web/src/app/ai-log/page.tsx | 35 ++
web/src/app/layout.tsx | 13 +-
web/src/app/llm-arena/page.tsx | 41 ++
web/src/components/ai/ai-badge.tsx | 19 +
web/src/components/ai/ai-log-client.tsx | 228 ++++++++
web/src/components/ai/ai-provider.tsx | 147 +++++
web/src/components/ai/ai-settings-button.tsx | 29 +
web/src/components/ai/ai-settings-dialog.tsx | 221 +++++++
web/src/components/ai/commentator-panel.tsx | 252 ++++++++
web/src/components/ai/llm-arena-client.tsx | 493 ++++++++++++++++
web/src/components/layout/site-header.tsx | 23 +-
web/src/components/play/explain-panel.tsx | 17 +-
web/src/components/play/play-client.tsx | 1 +
web/src/components/play/spectate-client.tsx | 1 +
web/src/components/ui/dialog.tsx | 95 +++
web/src/lib/ai/ai.test.ts | 575 +++++++++++++++++++
web/src/lib/ai/anthropic.ts | 84 +++
web/src/lib/ai/audit-log.ts | 211 +++++++
web/src/lib/ai/client.ts | 90 +++
web/src/lib/ai/commentator.ts | 258 +++++++++
web/src/lib/ai/llm-player.ts | 340 +++++++++++
web/src/lib/ai/models.ts | 23 +
web/src/lib/ai/openai.ts | 128 +++++
web/src/lib/ai/settings.ts | 106 ++++
web/src/lib/ai/types.ts | 100 ++++
25 files changed, 3522 insertions(+), 8 deletions(-)
create mode 100644 web/src/app/ai-log/page.tsx
create mode 100644 web/src/app/llm-arena/page.tsx
create mode 100644 web/src/components/ai/ai-badge.tsx
create mode 100644 web/src/components/ai/ai-log-client.tsx
create mode 100644 web/src/components/ai/ai-provider.tsx
create mode 100644 web/src/components/ai/ai-settings-button.tsx
create mode 100644 web/src/components/ai/ai-settings-dialog.tsx
create mode 100644 web/src/components/ai/commentator-panel.tsx
create mode 100644 web/src/components/ai/llm-arena-client.tsx
create mode 100644 web/src/components/ui/dialog.tsx
create mode 100644 web/src/lib/ai/ai.test.ts
create mode 100644 web/src/lib/ai/anthropic.ts
create mode 100644 web/src/lib/ai/audit-log.ts
create mode 100644 web/src/lib/ai/client.ts
create mode 100644 web/src/lib/ai/commentator.ts
create mode 100644 web/src/lib/ai/llm-player.ts
create mode 100644 web/src/lib/ai/models.ts
create mode 100644 web/src/lib/ai/openai.ts
create mode 100644 web/src/lib/ai/settings.ts
create mode 100644 web/src/lib/ai/types.ts
diff --git a/web/src/app/ai-log/page.tsx b/web/src/app/ai-log/page.tsx
new file mode 100644
index 0000000..ddb608b
--- /dev/null
+++ b/web/src/app/ai-log/page.tsx
@@ -0,0 +1,35 @@
+import type { Metadata } from "next";
+import Link from "next/link";
+
+import { AiLogClient } from "@/components/ai/ai-log-client";
+import { PageHeader } from "@/components/layout/page-header";
+
+export const metadata: Metadata = {
+ title: "AI audit log",
+ description:
+ "Every AI call made from this browser: feature, provider, model, exact input, output, latency, tokens and your review decision. Exportable as JSON or CSV. API keys are never recorded.",
+};
+
+export default function AiLogPage() {
+ return (
+
+
+
+ Every call the optional AI features make is recorded here: what was sent, what came back,
+ which provider and model, how long it took, the tokens the provider reported, and your
+ decision on the output (accepted, edited or rejected; automated evaluation calls are
+ marked n/a).
+
+
+ The log lives only in this browser (IndexedDB). This static site has no server, so nothing
+ here is sent to us. Your API key is never written to the log.{" "}
+
+ AI use statement
+
+ .
+
+
+
+
+ );
+}
diff --git a/web/src/app/layout.tsx b/web/src/app/layout.tsx
index 0648690..803c404 100644
--- a/web/src/app/layout.tsx
+++ b/web/src/app/layout.tsx
@@ -1,6 +1,7 @@
import type { Metadata, Viewport } from "next";
import { Bricolage_Grotesque, Geist, Geist_Mono } from "next/font/google";
+import { AiProvider } from "@/components/ai/ai-provider";
import { SiteFooter } from "@/components/layout/site-footer";
import { SiteHeader } from "@/components/layout/site-header";
import { ThemeProvider } from "@/components/layout/theme-provider";
@@ -62,11 +63,13 @@ export default function RootLayout({ children }: { children: React.ReactNode })
enableSystem
disableTransitionOnChange
>
-
-
- {children}
-
-
+
+
+
+ {children}
+
+
+