Compare commits
2 Commits
fed32c6cbe
...
121e4c418f
| Author | SHA1 | Date | |
|---|---|---|---|
|
121e4c418f
|
|||
|
5583a08b9a
|
4
package-lock.json
generated
4
package-lock.json
generated
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "vue-nonograms-solid",
|
"name": "vue-nonograms-solid",
|
||||||
"version": "1.12.9",
|
"version": "1.12.10",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "vue-nonograms-solid",
|
"name": "vue-nonograms-solid",
|
||||||
"version": "1.12.9",
|
"version": "1.12.10",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"fireworks-js": "^2.10.8",
|
"fireworks-js": "^2.10.8",
|
||||||
"flag-icons": "^7.5.0",
|
"flag-icons": "^7.5.0",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "vue-nonograms-solid",
|
"name": "vue-nonograms-solid",
|
||||||
"version": "1.12.9",
|
"version": "1.12.10",
|
||||||
"homepage": "https://nonograms.7u.pl/",
|
"homepage": "https://nonograms.7u.pl/",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
@@ -125,28 +125,37 @@ export function calculateDifficulty(density, size = 10) {
|
|||||||
let level;
|
let level;
|
||||||
|
|
||||||
// "Hardest" threshold is 99% solvability.
|
// "Hardest" threshold is 99% solvability.
|
||||||
|
// We calculate a base value first, then adjust for solvability.
|
||||||
|
|
||||||
|
const densityFactor = 1 - 2 * Math.abs(density - 0.5);
|
||||||
|
const complexity = size * (0.4 + 0.6 * densityFactor);
|
||||||
|
|
||||||
if (solvedPct < 99) {
|
if (solvedPct < 99) {
|
||||||
// Extreme: Requires guessing
|
// Requires guessing / advanced logic.
|
||||||
level = 'extreme';
|
// Base penalty for low solvability: 85 to 100
|
||||||
// Map 0-99% solved to value 85-100
|
const penaltyBase = 85 + ((99 - solvedPct) / 99) * 15;
|
||||||
value = 85 + ((99 - solvedPct) / 99) * 15;
|
|
||||||
|
// Scale penalty by size.
|
||||||
|
// Small grids (e.g. 5x5) are trivial even if "unsolvable" by simple logic.
|
||||||
|
// Large grids (e.g. 20x20) are truly extreme if unsolvable.
|
||||||
|
const sizeFactor = Math.min(1, size / 20);
|
||||||
|
|
||||||
|
value = penaltyBase * sizeFactor;
|
||||||
|
|
||||||
|
// Ensure difficulty doesn't drop below structural complexity
|
||||||
|
value = Math.max(value, complexity);
|
||||||
} else {
|
} else {
|
||||||
// Solvable (>= 99%)
|
// Solvable (>= 99%)
|
||||||
// Density factor: 0.5 is hardest (1), 0.1/0.9 is easiest (0.2)
|
|
||||||
const densityFactor = 1 - 2 * Math.abs(density - 0.5);
|
|
||||||
|
|
||||||
// Complexity based on Size and Density
|
// Complexity based on Size and Density
|
||||||
// Max size 80.
|
// Max size 80.
|
||||||
// Formula: size * (0.4 + 0.6 * densityFactor)
|
// Formula: size * (0.4 + 0.6 * densityFactor)
|
||||||
// Max: 80 * 1 = 80.
|
|
||||||
const complexity = size * (0.4 + 0.6 * densityFactor);
|
|
||||||
|
|
||||||
value = Math.min(85, complexity);
|
value = Math.min(85, complexity);
|
||||||
|
}
|
||||||
|
|
||||||
if (value < 25) level = 'easy';
|
if (value < 25) level = 'easy';
|
||||||
else if (value < 55) level = 'harder';
|
else if (value < 55) level = 'harder';
|
||||||
else level = 'hardest';
|
else if (value < 85) level = 'hardest';
|
||||||
}
|
else level = 'extreme';
|
||||||
|
|
||||||
return { level, value: Math.round(value) };
|
return { level, value: Math.round(value) };
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user