本文へ移動

Tsunagi繋ぎ

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

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

目次

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

EdgeModel型

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

The clauses a layout comes to, ready to be searched.

インポート

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

定義

type EdgeModel = {
    sat: Sat;
    total: number;
    eu: number[];
    ev: number[];
    over: number[];
    via: number[];
    edgeVar: Int32Array;
    around: number[][];
    between: (a: number, b: number, via?: number) => number | undefined;
    standable: (at: number) => boolean;
    colourVar: Int32Array[];
};

メンバー

名前型説明
satSat
totalnumber
eunumber[]

Every edge as the two cells it joins (the smaller first), the bridge it crosses (or -1) and the portal it goes through (the index in layout.portalPairs, or -1).

evnumber[]
overnumber[]
vianumber[]
edgeVarInt32Array<ArrayBufferLike>
aroundnumber[][]

The edges at each cell.

between(a: number, b: number, via?: number) => number | undefined

The edge between two neighbouring cells on a plain step, or the one through portal via (-1 for a plain step); undefined where there is none.

standable(at: number) => boolean

Whether a line can stand on a cell: not blocked, not a bridge, not a portal.

colourVarInt32Array<ArrayBufferLike>[]

Each portal cell's two cells' pair variables, for a model that has them (colours, one-hot or binary).

例

import { TSUNAGI_4 } from "@johnmorrisdotca/tsunagi/levels-4";
import { decodeLayout, edgeModel } from "@johnmorrisdotca/tsunagi";
import type { EdgeModel } from "@johnmorrisdotca/tsunagi";

const givens = TSUNAGI_4[0][0];
const layout = decodeLayout(givens,4)!;
const value: EdgeModel = edgeModel(layout)!;
console.log(value);
{
  sat: Sat {
    vars: 88,
    conflicts: 0,
    decisions: 0,
    value: Int8Array(256) [
       0,  0,  1, -1, -1,  1,  1, -1, -1,  1,  1, -1,
      -1,  1, -1,  1,  1, -1, -1,  1,  1, -1, -1,  1,
       1, -1, -1,  1, -1,  1,  1, -1, -1,  1,  1, -1,
      -1,  1,  1, -1, -1,  1, -1,  1,  1, -1,  1, -1,
       1, -1,  1, -1, -1,  1, -1,  1, -1,  1,  1, -1,
      -1,  1, -1,  1, -1,  1,  1, -1, -1,  1, -1,  1,
      -1,  1,  1, -1, -1,  1, -1,  1, -1,  1, -1,  1,
       1, -1, -1,  1, -1,  1, -1,  1,  1, -1, -1,  1,
      -1,  1, -1,  1,
      ... 156 more items
    ],
    level: Int32Array(256) [
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0,
      ... 156 more items
    ],
    reason: Int32Array(256) [
       -1,   8,  -1,  19, 192,  39,  27,  -1,  50,  -1,  64, 217,
       91,  76,  -1, 102,  -1, 116, 242, 143, 171,  -1, 152, 162,
      183,  -1,   1,   2,   3, 184, 185, 186, 187, 196, 197, 198,
      199,  -1,  32,  33,  34,  41,  -1,  44,  45, 208, 209, 210,
      211, 220, 221, 222, 223,  82,  -1,  85,  86,  94,  96,  -1,
       98, 232, 233, 234, 235, 244, 245, 246, 247, 135, 137,  -1,
      139, 147, 149, 150,  -1,  -1,  -1,  -1, 153,  -1,  -1,  -1,
      164, 178, 180, 181,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
       -1,  -1,  -1,  -1,
      ... 156 more items
    ],
    activity: Float64Array(256) [
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0,
      ... 156 more items
    ],
    phase: Int8Array(256) [
       0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
      -1, -1, -1, -1, -1,  0,  0,  0,  0,  0,  0,  0,
       0,  0,  0,  0,
      ... 156 more items
    ],
    seen: Uint8Array(256) [
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0,
      ... 156 more items
    ],
    heapIndex: Int32Array(256) [
      -1,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10,
      11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
      23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
      35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
      47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
      59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
      71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
      83, 84, 85, 86, 87, -1, -1, -1, -1, -1, -1, -1,
      -1, -1, -1, -1,
      ... 156 more items
    ],
    heap: [
       1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12,
      13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
      25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
      37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
      49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
      61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
      73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
      85, 86, 87, 88
    ],
    trail: [
       50,  53,  55,  57,  74,  77,  79,  81,  84,  83,  87,  89,
      108, 107, 111, 113, 118, 115, 117, 121, 142, 139, 141, 145,
      152, 147, 149, 151, 176, 171, 173, 175,   5,   2,  58,  61,
       63,  65,  15,  10,  66,  69,  71,  73,  19,  16,  91,  92,
       95,  97,   9,   6,  13,  29,  24,  99, 100, 103, 105,  33,
       44,  30, 123, 125, 126, 129,  23,  20,  27,  43,  48,  38,
      131, 133, 134, 137, 155, 157, 159,  37, 160,  46,  34,  41,
      163, 165, 167, 168
    ],
    trailLimit: [],
    head: 88,
    watches: [
      [],      [],      [Array], [Array], [Array], [Array], [Array],
      [Array], [Array], [Array], [Array], [Array], [Array], [Array],
      [Array], [Array], [Array], [Array], [Array], [Array], [Array],
      [Array], [Array], [Array], [Array], [Array], [Array], [Array],
      [Array], [Array], [Array], [Array], [Array], [Array], [Array],
      [Array], [Array], [Array], [Array], [Array], [Array], [Array],
      [Array], [Array], [Array], [Array], [Array], [Array], [Array],
      [Array], [Array], [Array], [Array], [Array], [],      [Array],
      [],      [Array], [Array], [Array], [Array], [Array], [],
      [Array], [],      [Array], [Array], [Array], [Array], [Array],
      [],      [Array], [],      [Array], [Array], [Array], [Array],
      [Array], [],      [Array], [],      [Array], [Array], [Array],
      [Array], [Array], [],      [Array], [],      [Array], [Array],
      [Array], [Array], [Array], [],      [Array], [],      [Array],
      [Array], [Array],
      ... 78 more items
    ],
    clauses: [
      [Int32Array], [Int32Array], [Int32Array], [Int32Array], [Int32Array],
      [Int32Array], [Int32Array], [Int32Array], [Int32Array], [Int32Array],
      [Int32Array], [Int32Array], [Int32Array], [Int32Array], [Int32Array],
      [Int32Array], [Int32Array], [Int32Array], [Int32Array], [Int32Array],
      [Int32Array], [Int32Array], [Int32Array], [Int32Array], [Int32Array],
      [Int32Array], [Int32Array], [Int32Array], [Int32Array], [Int32Array],
      [Int32Array], [Int32Array], [Int32Array], [Int32Array], [Int32Array],
      [Int32Array], [Int32Array], [Int32Array], [Int32Array], [Int32Array],
      [Int32Array], [Int32Array], [Int32Array], [Int32Array], [Int32Array],
      [Int32Array], [Int32Array], [Int32Array], [Int32Array], [Int32Array],
      [Int32Array], [Int32Array], [Int32Array], [Int32Array], [Int32Array],
      [Int32Array], [Int32Array], [Int32Array], [Int32Array], [Int32Array],
      [Int32Array], [Int32Array], [Int32Array], [Int32Array], [Int32Array],
      [Int32Array], [Int32Array], [Int32Array], [Int32Array], [Int32Array],
      [Int32Array], [Int32Array], [Int32Array], [Int32Array], [Int32Array],
      [Int32Array], [Int32Array], [Int32Array], [Int32Array], [Int32Array],
      [Int32Array], [Int32Array], [Int32Array], [Int32Array], [Int32Array],
      [Int32Array], [Int32Array], [Int32Array], [Int32Array], [Int32Array],
      [Int32Array], [Int32Array], [Int32Array], [Int32Array], [Int32Array],
      [Int32Array], [Int32Array], [Int32Array], [Int32Array], [Int32Array],
      ... 156 more items
    ],
    learnt: [
      false, false, false, false, false, false, false, false,
      false, false, false, false, false, false, false, false,
      false, false, false, false, false, false, false, false,
      false, false, false, false, false, false, false, false,
      false, false, false, false, false, false, false, false,
      false, false, false, false, false, false, false, false,
      false, false, false, false, false, false, false, false,
      false, false, false, false, false, false, false, false,
      false, false, false, false, false, false, false, false,
      false, false, false, false, false, false, false, false,
      false, false, false, false, false, false, false, false,
      false, false, false, false, false, false, false, false,
      false, false, false, false,
      ... 156 more items
    ],
    clauseActivity: [
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0,
      ... 156 more items
    ],
    lbd: [
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0,
      ... 156 more items
    ],
    learntCount: 0,
    bump: 1,
    clauseBump: 1,
    ok: true
  },
  total: 16,
  eu: [
    0, 0,  1,  1,  2,  2,  3,  4,
    4, 5,  5,  6,  6,  7,  8,  8,
    9, 9, 10, 10, 11, 12, 13, 14
  ],
  ev: [
     1,  4,  2,  5,  3,  6,  7,  5,
     8,  6,  9,  7, 10, 11,  9, 12,
    10, 13, 11, 14, 15, 13, 14, 15
  ],
  over: [
    -1, -1, -1, -1, -1, -1, -1, -1,
    -1, -1, -1, -1, -1, -1, -1, -1,
    -1, -1, -1, -1, -1, -1, -1, -1
  ],
  via: [
    -1, -1, -1, -1, -1, -1, -1, -1,
    -1, -1, -1, -1, -1, -1, -1, -1,
    -1, -1, -1, -1, -1, -1, -1, -1
  ],
  edgeVar: Int32Array(24) [
     1,  2,  3,  4,  5,  6,  7,  8,
     9, 10, 11, 12, 13, 14, 15, 16,
    17, 18, 19, 20, 21, 22, 23, 24
  ],
  around: [
    [ 0, 1 ],           [ 0, 2, 3 ],
    [ 2, 4, 5 ],        [ 4, 6 ],
    [ 1, 7, 8 ],        [ 3, 7, 9, 10 ],
    [ 5, 9, 11, 12 ],   [ 6, 11, 13 ],
    [ 8, 14, 15 ],      [ 10, 14, 16, 17 ],
    [ 12, 16, 18, 19 ], [ 13, 18, 20 ],
    [ 15, 21 ],         [ 17, 21, 22 ],
    [ 19, 22, 23 ],     [ 20, 23 ]
  ],
  between: [Function: between],
  standable: [Function: standable],
  colourVar: [
    Int32Array(4) [ 25, 26, 27, 28 ],
    Int32Array(4) [ 29, 30, 31, 32 ],
    Int32Array(4) [ 33, 34, 35, 36 ],
    Int32Array(4) [ 37, 38, 39, 40 ],
    Int32Array(4) [ 41, 42, 43, 44 ],
    Int32Array(4) [ 45, 46, 47, 48 ],
    Int32Array(4) [ 49, 50, 51, 52 ],
    Int32Array(4) [ 53, 54, 55, 56 ],
    Int32Array(4) [ 57, 58, 59, 60 ],
    Int32Array(4) [ 61, 62, 63, 64 ],
    Int32Array(4) [ 65, 66, 67, 68 ],
    Int32Array(4) [ 69, 70, 71, 72 ],
    Int32Array(4) [ 73, 74, 75, 76 ],
    Int32Array(4) [ 77, 78, 79, 80 ],
    Int32Array(4) [ 81, 82, 83, 84 ],
    Int32Array(4) [ 85, 86, 87, 88 ]
  ]
}

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

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

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