mags-banko/worker.js
2025-04-12 13:41:28 +02:00

108 lines
2.0 KiB
JavaScript

importScripts("seedrandom.js");
importScripts("generator.js");
console.log("worker");
let workerId;
let currentInput = "";
let attempts = 0;
let startedAt;
let statsInterval;
let guessInterval;
function getNumbers(name) {
Math.seedrandom(name);
let numbers = [];
for (let i = 0; i < 9; i++) {
numbers = numbers.concat(generate_col(i));
}
const activatedCols = generate_rows_check();
const activatedNumbers = [];
for (let row = 0; row < 3; row++) {
for (const col of activatedCols[row]) {
activatedNumbers.push(numbers[(col - 1) * 3 + row]);
}
}
return activatedNumbers;
}
function sendStats() {
if (!startedAt) return;
self.postMessage({ type: "stats", attempts, time: Date.now() - startedAt });
resetStats();
}
function resetStats() {
attempts = 0;
startedAt = Date.now();
}
function generateNextInput(input) {
const alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
if (input.length === 0)
return alphabet[0];
for (let i = input.length - 1; i >= 0; i--) {
const index = alphabet.indexOf(input[i]);
if (index < alphabet.length - 1) {
return input.substring(0, i) + alphabet[index + 1] + alphabet[0].repeat(input.length - i - 1);
}
}
return alphabet[0] + input;
}
function guess() {
currentInput = generateNextInput(currentInput);
attempts++;
// TODO
}
function run() {
statsInterval = setInterval(sendStats, 1000);
guessInterval = setInterval(guess, 0);
resetStats();
self.postMessage({ type: "log", text: "Starting worker", id: workerId });
}
function stop() {
clearInterval(statsInterval);
clearInterval(guessInterval);
sendStats();
self.postMessage({ type: "log", text: "Stopping worker", id: workerId });
}
self.onmessage = message => {
switch (message.data.type) {
case "init":
workerId = message.data.id;
self.postMessage({ type: "ready" });
break;
case "run":
run();
break;
case "stop":
stop();
break;
case "terminate":
stop();
self.postMessage({ type: "terminate" });
break;
}
};