Reference · Rules, solvers and generation
cheatLinefunction
CHEAT: one unfinished line drawn for the player, correctly. John, 2026-09-26: beyond Check, which only flashes the unjoined pairs, "a Cheat button that draws one unfinished line correctly", offered only where "Allow cheating" was chosen at set-up. Flow Free's hint does the same — it draws one whole flow.
The line is the lowest-numbered pair not yet joined; where every pair is joined but the board is wrong, the lowest whose line is not the answer's. It is drawn as the answer has it, and any other line in its way is cut back to before the first cell it would share — on a bridge only where both go the same way over it, since two lines may cross there. Null when there is nothing to draw: every line already the answer's. Pure: new lines, the old untouched.
Import it
import { cheatLine } from "@johnmorrisdotca/tsunagi";
Definition
function cheatLine(layout: LinkLayout, lines: Lines, answer: Lines): { lines: Lines; pair: number; } | null
Parameters
| Name | Type | Description |
|---|---|---|
layout | LinkLayout | The decoded native board and its rule settings. |
lines | Lines | The native cell lists for every pair. |
answer | Lines | The native complete answer string or solved lines specified by the signature. |
Returns
{ lines: Lines; pair: number; } | null
The updated lines and helped pair, or null when every pair is already joined.
Examples
import { TSUNAGI_4 } from "@johnmorrisdotca/tsunagi/levels-4";
import { cheatLine, decodeLayout, linesOfAnswer, noLines } from "@johnmorrisdotca/tsunagi";
const givens = TSUNAGI_4[0][0];
const answer = TSUNAGI_4[0][1];
const layout = decodeLayout(givens,4)!;
const lines = noLines(layout);
const solvedLines = linesOfAnswer(layout,answer)!;
console.log(cheatLine(layout,lines,solvedLines));{ lines: [ [ 0, 1, 2, 3 ], [], [], [] ], pair: 0 }What it prints (run when this page was built)