introduce bitloops

This commit is contained in:
mike
2026-01-17 04:35:53 +01:00
parent 47b33af09d
commit 3bd7a0f958
6 changed files with 95 additions and 100 deletions

View File

@@ -19,7 +19,7 @@ import java.util.concurrent.atomic.AtomicLong;
import static puzzle.CsvIndexService.SC;
import static puzzle.Export.*;
import static puzzle.SwedishGenerator.*;
import static puzzle.SwedishGenerator.Dict.loadDict;
import static puzzle.Export.Dicts.loadDict;
public class Main {
@@ -392,9 +392,21 @@ public class Main {
val slotInfo = Masker.scoreSlots(new int[slots.length], slots);
var grid = mask.toGrid();
var filled = fillMask(rng, slotInfo, grid, multiThreaded);
if (!multiThreaded) {
System.out.print("\r" + Strings.padRight("", 120) + "\r");
System.out.flush();
}
// print a final progress line
if (Main.VERBOSE && !multiThreaded) {
System.out.printf(Locale.ROOT,
"[######################] %d/%d slots | nodes=%d | backtracks=%d | mrv=%d | %.1fs%n",
Slotinfo.wordCount(0, slotInfo), slotInfo.length, filled.nodes(), filled.backtracks(), filled.stats().lastMRV(), filled.stats().seconds()
);
}
TOTAL_NODES.addAndGet(filled.stats().nodes);
TOTAL_BACKTRACKS.addAndGet(filled.stats().backtracks);
TOTAL_NODES.addAndGet(filled.nodes());
TOTAL_BACKTRACKS.addAndGet(filled.backtracks());
if (filled.ok()) {
val simpel = FillResult.calcSimpel(slotInfo);
TOTAL_SUCCESS.incrementAndGet();
@@ -404,12 +416,12 @@ public class Main {
var name = Thread.currentThread().getName();
var status = filled.ok() ? "SUCCESS" : "FAILED";
var simplicity = String.format(Locale.ROOT, "%.2f", filled.stats().simplicity);
var nps = (int) (filled.stats().nodes / Math.max(0.001, filled.stats().seconds));
var nps = (int) (filled.nodes() / Math.max(0.001, filled.stats().seconds));
var totalTime = (System.currentTimeMillis() - t0) / 1000.0;
System.out.printf(Locale.ROOT,
"[ATTEMPT] thread=%s | status=%s | nodes=%d | backtracks=%d | nps=%d | simplicity=%s | time=%.1fs%n",
name, status, filled.stats().nodes, filled.stats().backtracks, nps, simplicity, totalTime
name, status, filled.nodes(), filled.backtracks(), nps, simplicity, totalTime
);
if (filled.ok() && (opts.minSimplicity <= 0 || filled.stats().simplicity >= opts.minSimplicity)) {