本文へ移動

Kazu数

検証済みの数独や論理パズルを作り、標準の規則とヒントを読み、盤を描いたり埋め込んだりできます。

「数」は数字を表す言葉です。 名前について(英語)

目次

やり方

ナンプレと数字の盤の規則

印刷コードと種類ごとの制約を組にします。

標準の種類を選ぶ

number-placeは通常のナンプレ、jigsawは不規則な領域、diagonalは長い対角線、sum-cagesは合計の領域です。more-or-lessは不等号、towersは外周の見える塔の数を使います。種類でコードの読み方と答えの規則が決まります。

import {KAZU_KINDS,KAZU_SPECS,isKazuSize,generateKazu,checkKazu} from "@johnmorrisdotca/kazu";
console.log(KAZU_KINDS.map(kind=>[kind,KAZU_SPECS[kind].sizes]));
const puzzle = generateKazu("more-or-less",4,"easy",42);
console.log(isKazuSize("more-or-less",4),checkKazu(puzzle.kind,puzzle.size,puzzle.givens,puzzle.solution));
[
  [ 'number-place', [ 4, 6, 9, 16, 25 ] ],
  [ 'jigsaw', [ 5, 6, 7, 9 ] ],
  [ 'diagonal', [ 6, 9 ] ],
  [ 'sum-cages', [ 6, 9 ] ],
  [ 'more-or-less', [ 4, 5, 6, 7 ] ],
  [ 'towers', [ 4, 5, 6, 7 ] ]
]
true { ok: true }

印刷された問題を全部保持する

コードには数字の後に領域、合計、不等号、外周のヒントが入る場合があります。検証の前にsize * sizeだけへ切り詰めないでください。readGivensと種類別の読取を使い、decodeCellsは数字の部分だけに使います。別の不等号・見え方の規則ではlayoutOfGivensがnullになる場合があります。

種は1〜KAZU_SEED_MOSTの整数、難度はeasy/medium/hardです。未対応の入力は例外です。大きな盤や難しい種類は同期処理で待つため、独自の画面ではWorkerを使えます。従来の難度の説明も参照してください。

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

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