本文へ移動

Tsunagi繋ぎ

同じ印の2つを別々の線で結び、盤を埋めます。収録された問題やシード付きの問題で遊べます。

「つなぎ」は、物をつなぐことを表す言葉です。 名前について(英語)

目次

リファレンス · ルール・解法・生成

TwistCandidate型

リファレンスの説明と例は英語です。見出しと目次は日本語です。

MAKING TSUNAGI'S TWISTS, on a desk: boards with bridges, and boards with walls and blocked cells (John, 2026-09-26, both chosen from the brainstorm; bridges first). Like generate.ts, only the level script calls this, and a board is kept only when the solver proves it has exactly one answer — the one it was made from.

BRIDGES. A grid is filled with lines as for a plain board. Then, where a line runs straight through a cell away from the edge and two other lines each end on the cells either side of it the other way, those two are joined into one line over the cell, which becomes a bridge: the first line goes over it one way, the joined one the other. Repeated for as many bridges as asked, never two side by side.

WALLS AND BLOCKED CELLS. A few cells are blocked before the grid is filled, so the lines go round them. Where the board then has more than one answer, walls are put on edges between two different lines — never across an edge the answer uses, so its answer stands — until it has one, and then every wall that is not needed for that is taken away again. What is left is walls a player has to use to find the answer.

インポート

import type { TwistCandidate } from "@johnmorrisdotca/tsunagi";

定義

type TwistCandidate = LinkCandidate & {
    bridges: number;
    walls: number;
    blocked: number;
};

メンバー

名前型説明
layoutstring
answerstring
pairsnumber
nodesnumber

Positions the solver looked at to prove the answer is the only one.

branchesnumber

Positions where it had to try more than one way: how much guessing the level asks for.

turnsnumber

Turns in the answer's lines, over all of them: how much the lines wind.

keystring

The layout in its one spelling over all eight turns and mirrors, so two levels are never the same board.

bridgesnumber
wallsnumber
blockednumber

例

import { TSUNAGI_4 } from "@johnmorrisdotca/tsunagi/levels-4";
import { decodeLayout, symmetryKey, turnsIn } from "@johnmorrisdotca/tsunagi";
import type { TwistCandidate } from "@johnmorrisdotca/tsunagi";

const givens = TSUNAGI_4[0][0];
const answer = TSUNAGI_4[0][1];
const layout = decodeLayout(givens,4)!;
const value: TwistCandidate = {...{layout:givens,answer,pairs:layout.ends.length,nodes:1,branches:0,turns:turnsIn(answer,layout),key:symmetryKey(givens,4)},bridges:0,walls:0,blocked:0};
console.log(value);
{
  layout: 'A..AB..BC..CD..D',
  answer: 'AAAABBBBCCCCDDDD',
  pairs: 4,
  nodes: 1,
  branches: 0,
  turns: 0,
  key: 'A..AB..BC..CD..D',
  bridges: 0,
  walls: 0,
  blocked: 0
}

出力(このページを作ったときに実行した結果)

ソースを見るGitHub で編集@johnmorrisdotca/tsunagi 1.7.0 のソースから作成しました。

この日本語は、まだ日本語を母語とする方の確認を受けていません。訂正を歓迎します。