您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Do trivial deduction.
当前为
// ==UserScript== // @name Puzz.link Assistance // @version 1.0 // @description Do trivial deduction. // @author Leaving Leaves // @match https://puzz.link/p?*/* // @icon https://www.google.com/s2/favicons?sz=64&domain=github.com // @grant none // @namespace https://greasyfork.org/users/1192854 // ==/UserScript== (function () { 'use strict'; const maxLoop = 20; let btn = '<button type="button" class="btn" id="assist" style="display: inline;">Assist</button>'; document.querySelector('#btntrial').insertAdjacentHTML('afterend', btn); document.querySelector("#assist").addEventListener("click", assist, false); window.addEventListener("keypress", (event) => { if (event.key !== 'q') { return; } assist(); }); function assist() { if (/slither/.test(document.URL)) { SlitherlinkAssist(); } if (/yaji[lr]in/.test(document.URL)) { YajilinAssist(); } console.log('Assisted.'); } let fourside = function (a, b) { a(b.top); a(b.bottom); a(b.left); a(b.right); }; let fourside2 = function (a, b, c) { a(b.top, c.top); a(b.bottom, c.bottom); a(b.left, c.left); a(b.right, c.right); }; function YajilinAssist() { let board = ui.puzzle.board; let cell = board.cell; let flg = true; let isEmpty = function (c) { return c.id !== null && c.qnum === -1 && c.qans === 0; }; for (let loop = 0; loop < maxLoop; loop++) { if (!flg) { break; } flg = false; for (let i = 0; i < cell.length; i++) { if (cell[i].qnum !== -1 && cell[i].qdir !== 0) { let qnum = cell[i].qnum; let qdir = cell[i].qdir; let dirs = [[],[-1, 0], [1, 0], [0, -1], [0, 1]];//Top Bottom Left Right let rows = board.rows, cols = board.cols; let x = Math.floor(i / cols); let y = i % cols; let emptynum = 0; let blocknum = 0; while (x >= 0 && y >= 0 && x < rows && y < cols) { emptynum += isEmpty(cell[x * cols + y]) && cell[x * cols + y].qsub!==1; blocknum += cell[x * cols + y].qans === 1; x += dirs[qdir][0]; y += dirs[qdir][1]; } if (emptynum + blocknum === qnum) { x = Math.floor(i / cols); y = i % cols; while (x >= 0 && y >= 0 && x < rows && y < cols) { if (isEmpty(cell[x * cols + y]) && cell[x * cols + y].qsub!==1) { flg = 1; cell[x * cols + y].setQans(1); cell[x * cols + y].draw(); } x += dirs[qdir][0]; y += dirs[qdir][1]; } } if (blocknum === qnum){ x = Math.floor(i / cols); y = i % cols; while (x >= 0 && y >= 0 && x < rows && y < cols) { if (isEmpty(cell[x * cols + y]) && cell[x * cols + y].qsub!==1) { flg = 1; cell[x * cols + y].setQsub(1); cell[x * cols + y].draw(); } x += dirs[qdir][0]; y += dirs[qdir][1]; } } } if (cell[i].qnum !== -1) { continue; } let emptynum = 0; let linenum = 0; let adj = cell[i].adjacent; let adb = cell[i].adjborder; if (cell[i].qans === 1) { let fn = function (c) { if (!isEmpty(c)) { return; } flg |= (c.qsub !== 1); c.setQsub(1); c.draw(); }; fourside(fn, adj); continue; } let fn = function (c, d) { if (isEmpty(c) && d.qsub !== 2) { emptynum++; } linenum += d.line == 1; }; fourside2(fn, adj, adb); if (linenum === 2) { let fn = function (d) { if (d.line !== 1) { flg |= d.qsub != 2; d.setQsub(2); d.draw(); } } fourside(fn, adb); } if (emptynum === 1) { flg |= cell[i].qans !== 1; cell[i].setQans(1); cell[i].draw(); } if (emptynum === 2) { if (cell[i].qsub === 1 || linenum === 1) { let fn = function (c, d) { if (!isEmpty(c) || d.qsub === 2) { return; } flg |= (c.qsub !== 1) | (d.line !== 1); c.setQsub(1); d.setLine(1); c.draw(); d.draw(); }; fourside2(fn, adj, adb); } else { let fn = function (c, d) { if (!isEmpty(c) || d.qsub === 2) { return; } flg |= (c.qsub !== 1); c.setQsub(1); c.draw(); }; fourside2(fn, adj, adb); } } } } } function SlitherlinkAssist() { let board = ui.puzzle.board; let cell = board.cell; let cross = board.cross; let flg = true; let addline = function (c) { if (c === undefined || c.id === null || c.qsub === 2) { return; } flg |= (c.line !== 1); c.setLine(); c.draw(); }; let addcross = function (c) { if (c === undefined || c.id === null || c.line === 1) { return; } flg |= (c.qsub !== 2); c.setQsub(2); c.draw(); }; for (let loop = 0; loop < maxLoop; loop++) { if (!flg) { break; } flg = false; for (let i = 0; i < cell.length; i++) { let adj = cell[i].adjborder; let emptynum = 0; let linenum = 0; if (cell[i].qnum === 0) { fourside(addcross, adj); } let fn = function (c) { if (c.qsub === 0) { emptynum++; } linenum += (c.line == 1); }; fourside(fn, adj); if (emptynum === cell[i].qnum) { fourside(addline, adj); } if (linenum === cell[i].qnum) { fourside(addcross, adj); } if (cell[i].qnum === 3 && cell[i].adjacent.bottom !== undefined && cell[i].adjacent.bottom.qnum === 3) { addline(cell[i].adjborder.top); addline(cell[i].adjborder.bottom); addline(cell[i].adjacent.bottom.adjborder.bottom); if (cell[i].adjacent.left !== undefined) { addcross(cell[i].adjacent.left.adjborder.bottom); } if (cell[i].adjacent.right !== undefined) { addcross(cell[i].adjacent.right.adjborder.bottom); } } if (cell[i].qnum === 3 && cell[i].adjacent.right !== undefined && cell[i].adjacent.right.qnum === 3) { addline(cell[i].adjborder.left); addline(cell[i].adjborder.right); addline(cell[i].adjacent.right.adjborder.right); if (cell[i].adjacent.top !== undefined) { addcross(cell[i].adjacent.top.adjborder.right); } if (cell[i].adjacent.bottom !== undefined) { addcross(cell[i].adjacent.bottom.adjborder.right); } } if (cell[i].qnum === 3 && cell[i].adjacent.bottom !== undefined && cell[i].adjacent.bottom.adjacent.left !== undefined && cell[i].adjacent.bottom.adjacent.left.qnum === 3) { let cell2 = cell[i].adjacent.bottom.adjacent.left; addline(cell[i].adjborder.top); addline(cell[i].adjborder.right); addline(cell2.adjborder.bottom); addline(cell2.adjborder.left); } if (cell[i].qnum === 3 && cell[i].adjacent.bottom !== undefined && cell[i].adjacent.bottom.adjacent.right !== undefined && cell[i].adjacent.bottom.adjacent.right.qnum === 3) { let cell2 = cell[i].adjacent.bottom.adjacent.right; addline(cell[i].adjborder.top); addline(cell[i].adjborder.left); addline(cell2.adjborder.bottom); addline(cell2.adjborder.right); } } for (let i = 0; i < cross.length; i++) { let adj = cross[i].adjborder; let emptynum = 0; let linenum = 0; let fn = function (c) { if (c !== undefined && c.id !== null && c.qsub === 0) { emptynum++; } linenum += (c.line == 1); }; fourside(fn, adj); if (emptynum === 1 || linenum === 2) { fourside(addcross, adj); } if (emptynum === 2 && linenum === 1) { fourside(addline, adj); } if (emptynum === 2 && linenum === 0) { let fn = function (c) { return c !== undefined && c.id !== null && c.qsub === 0; } if (fn(adj.top) && fn(adj.left) && adj.top.sidecell[0].qnum === 3) { fourside(addline, adj); } if (fn(adj.top) && fn(adj.right) && adj.top.sidecell[1].qnum === 3) { fourside(addline, adj); } if (fn(adj.bottom) && fn(adj.left) && adj.bottom.sidecell[0].qnum === 3) { fourside(addline, adj); } if (fn(adj.bottom) && fn(adj.right) && adj.bottom.sidecell[1].qnum === 3) { fourside(addline, adj); } if (fn(adj.top) && fn(adj.left) && adj.top.sidecell[0].qnum === 1) { fourside(addcross, adj); } if (fn(adj.top) && fn(adj.right) && adj.top.sidecell[1].qnum === 1) { fourside(addcross, adj); } if (fn(adj.bottom) && fn(adj.left) && adj.bottom.sidecell[0].qnum === 1) { fourside(addcross, adj); } if (fn(adj.bottom) && fn(adj.right) && adj.bottom.sidecell[1].qnum === 1) { fourside(addcross, adj); } } } } } })();