本文へ移動

Tsunagi繋ぎ

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

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

目次

やり方

上限付きの解法と生成

上限の中で解の数を数え、証明と探索の打ち切りを区別し、回数を決めて候補を生成します。

証明と上限到達を分ける

countSolutionsは解の数、解、gaveUpを返します。一意と証明するには最大2個を探し、countが1でgaveUpがfalseと確認します。上限までに見つけた数だけでは証明になりません。既知の解で探索を助ける関数や、大きい盤用のSAT解法もあります。

import {TSUNAGI_4} from "@johnmorrisdotca/tsunagi/levels-4";
import {decodeLayout,countSolutions} from "@johnmorrisdotca/tsunagi";
const result = countSolutions(decodeLayout(TSUNAGI_4[0][0],4)!,2,20000);
console.log(result.count,result.gaveUp,result.count === 1 && !result.gaveUp);
1 false true

回数を決めて生成する

import {candidate,seededRandom} from "@johnmorrisdotca/tsunagi";
const level = candidate(4,seededRandom(42),8,20000);
console.log(level?.layout ?? "No proved candidate in this attempt");

生成できない、または証明できない試行はnullです。修復、削減、少ない線、特殊ルールにはそれぞれ制約があります。ホストで再試行にも上限を置きます。

収録問題を保つ

新しい候補は収録された固定問題ではありません。変更には既存の生成手順を使い、証明、順番、移行を保ちます。

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

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