// node tools/calibrate_briscola.mjs [partite per livello, predefinite 1000] // Stessi semi e mazzi per i tre livelli; Andrea gioca con l'euristica «attenta». import { newBriscola, observation, attentive, play, update, canPlay, LEVELS } from '../src/engine/briscola.js'; export function simulate(seed, level) { const c = newBriscola(seed, { level }); for (let steps = 0; steps < 200 && c.step !== 'result'; steps++) { if (canPlay(c)) play(c, attentive(observation(c, 'player'))); update(c, 20); c.events.length = 0; } if (c.step !== 'result') throw new Error('Partita non conclusa'); return c; } export function calibrate(n = 1000) { return LEVELS.map(level => { const wins = { player: 0, cpu: 0, draw: 0 }; let sum = 0, dealers = 0; for (let i = 1; i <= n; i++) { const c = simulate(Math.imul(i, 2654435761) >>> 0, level); wins[c.result.winner ?? 'draw']++; sum += c.result.player; dealers += c.dealer === 'player'; } return { level, games: n, wins, playerPercent: 100 * wins.player / n, drawPercent: 100 * wins.draw / n, average: sum / n, playerDeals: dealers }; }); } if (process.argv[1] === new URL(import.meta.url).pathname) console.log(JSON.stringify(calibrate(Number(process.argv[2]) || 1000), null, 2));