feat: update difficulty calculation with high-res simulation data v1.12.11
All checks were successful
Deploy to Production / deploy (push) Successful in 16s

This commit is contained in:
2026-02-12 23:10:15 +01:00
parent 121e4c418f
commit f1f3f81466
4 changed files with 65 additions and 15 deletions

4
package-lock.json generated
View File

@@ -1,12 +1,12 @@
{ {
"name": "vue-nonograms-solid", "name": "vue-nonograms-solid",
"version": "1.12.10", "version": "1.12.11",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "vue-nonograms-solid", "name": "vue-nonograms-solid",
"version": "1.12.10", "version": "1.12.11",
"dependencies": { "dependencies": {
"fireworks-js": "^2.10.8", "fireworks-js": "^2.10.8",
"flag-icons": "^7.5.0", "flag-icons": "^7.5.0",

View File

@@ -1,6 +1,6 @@
{ {
"name": "vue-nonograms-solid", "name": "vue-nonograms-solid",
"version": "1.12.10", "version": "1.12.11",
"homepage": "https://nonograms.7u.pl/", "homepage": "https://nonograms.7u.pl/",
"type": "module", "type": "module",
"scripts": { "scripts": {

View File

@@ -0,0 +1,47 @@
import { generateRandomGrid, calculateHints } from '../src/utils/puzzleUtils.js';
import { solvePuzzle } from '../src/utils/solver.js';
import fs from 'fs';
const SIZES = [5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80];
const DENSITIES = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9];
const SAMPLES = 200; // High sample count for stability
console.log('Starting simulation...');
console.log(`Sizes: ${SIZES.join(', ')}`);
console.log(`Densities: ${DENSITIES.join(', ')}`);
console.log(`Samples per point: ${SAMPLES}`);
const results = {};
async function run() {
const totalSteps = SIZES.length * DENSITIES.length;
let currentStep = 0;
const startTime = Date.now();
for (const size of SIZES) {
results[size] = [];
for (const density of DENSITIES) {
let totalSolved = 0;
for (let i = 0; i < SAMPLES; i++) {
const grid = generateRandomGrid(size, density);
const { rowHints, colHints } = calculateHints(grid);
const { percentSolved } = solvePuzzle(rowHints, colHints);
totalSolved += percentSolved;
}
const avg = Math.round(totalSolved / SAMPLES);
results[size].push(avg);
currentStep++;
const pct = Math.round((currentStep / totalSteps) * 100);
const elapsed = ((Date.now() - startTime) / 1000).toFixed(0);
process.stdout.write(`\rProgress: ${pct}% (${currentStep}/${totalSteps}) - Elapsed: ${elapsed}s`);
}
}
console.log('\n\nSimulation complete!');
console.log('SIM_DATA = ' + JSON.stringify(results, null, 4) + ';');
fs.writeFileSync('simulation_results.json', JSON.stringify(results, null, 4));
}
run();

View File

@@ -64,18 +64,21 @@ export function calculateDifficulty(density, size = 10) {
// Data derived from Monte Carlo Simulation (Logical Solver) // Data derived from Monte Carlo Simulation (Logical Solver)
// Format: { size: [solved_pct_at_0.1, ..., solved_pct_at_0.9] } // Format: { size: [solved_pct_at_0.1, ..., solved_pct_at_0.9] }
const SIM_DATA = { const SIM_DATA = {
5: [86, 73, 74, 80, 88, 98, 99, 99, 100], 5: [88, 76, 71, 80, 90, 98, 99, 100, 100],
10: [57, 22, 19, 44, 86, 99, 100, 100, 100], 10: [58, 25, 18, 44, 81, 99, 100, 100, 100],
15: [37, 7, 2, 12, 70, 99, 100, 100, 100], 15: [36, 7, 3, 11, 67, 99, 100, 100, 100],
20: [23, 3, 0, 3, 40, 99, 100, 100, 100], 20: [24, 3, 0, 3, 48, 99, 100, 100, 100],
25: [13, 1, 0, 1, 19, 99, 100, 100, 100], 25: [13, 1, 0, 1, 21, 99, 100, 100, 100],
30: [8, 1, 0, 0, 4, 100, 100, 100, 100], 30: [9, 0, 0, 0, 7, 99, 100, 100, 100],
35: [5, 0, 0, 0, 3, 99, 100, 100, 100], 35: [5, 0, 0, 0, 5, 97, 100, 100, 100],
40: [3, 0, 0, 0, 1, 96, 100, 100, 100], 40: [3, 0, 0, 0, 2, 91, 100, 100, 100],
45: [2, 0, 0, 0, 1, 83, 100, 100, 100], 45: [2, 0, 0, 0, 1, 84, 100, 100, 100],
50: [1, 0, 0, 0, 0, 62, 100, 100, 100], 50: [1, 0, 0, 0, 0, 65, 100, 100, 100],
60: [0, 0, 0, 0, 0, 18, 100, 100, 100], 55: [1, 0, 0, 0, 0, 55, 100, 100, 100],
70: [0, 0, 0, 0, 0, 14, 100, 100, 100], 60: [0, 0, 0, 0, 0, 35, 100, 100, 100],
65: [0, 0, 0, 0, 0, 20, 100, 100, 100],
70: [0, 0, 0, 0, 0, 11, 100, 100, 100],
75: [0, 0, 0, 0, 0, 12, 100, 100, 100],
80: [0, 0, 0, 0, 0, 4, 100, 100, 100] 80: [0, 0, 0, 0, 0, 4, 100, 100, 100]
}; };