|
Optimized with binary search (can't figure out why ycomb formats my code all ugly) var speed = 500; [rin, bin, gin].forEach(col => {
col.valueAsNumber = 7;
col.dispatchEvent(new Event('change'));
col.score = 0;
}); async function tryit(col, value) {
col.valueAsNumber = value;
col.dispatchEvent(new Event('change'));
submit.click();
await new Promise(resolve => setTimeout(resolve, speed));
var res_text = result.innerText.split(/[ ()%]/)[4];
if (res_text === "Splendid!") {
throw new Error("Finished - Found correct combination");
}
col.score = parseInt(res_text);
return col.score;
} async function binarySearch(col) {
let start = 0;
let end = 15;
let mid = 7;
let startAccuracy = await tryit(col, start);
let endAccuracy = await tryit(col, end);
let midAccuracy = 0; while (true) {
mid = Math.floor((start + end) / 2);
midAccuracy = await tryit(col, mid);
if ((end - start) <= 2) {
const max = Math.max([startAccuracy, midAccuracy, endAccuracy]);
if (startAccuracy == max) await tryit(col, start);
else if (midAccuracy == max) await tryit(col, mid);
else await tryit(col, end);
return;
}
if (endAccuracy > startAccuracy) {
start = mid;
startAccuracy = midAccuracy;
} else {
end = mid;
endAccuracy = midAccuracy;
}
}
}
async function findOptimalCombination() {
for (const col of [rin, gin, bin]) {
await binarySearch(col);
}
/* rounding */
for (const col of [rin, gin, bin]) {
const mid = col.valueAsNumber;
const score = await tryit(col, mid);
const left = await tryit(col, mid - 1);
if (score >= left) {
const right = await tryit(col, mid + 1);
if (score >= right) await tryit(col, mid);
}
}
console.log("Optimization complete");
}await findOptimalCombination(); |