本文へ移動

Suido水道

管を回してポンプと排水口をつなぎます。収録された問題やシード付きの問題で遊べます。

「水道」は、水を届ける設備を表す言葉です。 名前について(英語)

目次

やり方

問題の生成と検証

再現できる種を使い、証明と探索打切りを区別します。

再現できる問題を作る

import {makeSuido,checkSuidoAnswer,solve} from "@johnmorrisdotca/suido";
const made = makeSuido({size:5,seed:42,kind:"network",difficulty:50,attempts:3});
const proof = solve(made.layout,2,20000);
console.log(made.seed,made.difficulty,checkSuidoAnswer(made.code,made.answer));
console.log(proof.complete && proof.count===1);

生成は同期処理で、大きな盤面や端がつながる盤面では待ち時間が生じます。入力への応答を保つ必要があればWorkerを使います。難度指定は試行回数の範囲で近い候補を選び、指定値との完全一致は保証しません。選ばれた候補を再現するには、返された種と同じオプション、バージョンを保存します。

探索結果を区別する

solveはcountとcompleteを返します。予算を使い切って一つ見つかっただけでは、一意性の証明にはなりません。上限を2にしてcomplete && count === 1を確認します。countSolutionsは数だけを返すため、証明の判断には詳しい結果を使います。checkSuidoAnswerは与えた解答を検証しますが、一意性は証明しません。

固定ピース、壁、端の接続、大きなピース、一括回転は盤面の規則です。高価な設定を選ぶ前に生成時間、追加規則、難度を確認してください。

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

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