Home

Awesome

@sabaki/boardmatcher Build Status

Finds patterns & shapes in Go board arrangements and names moves.

Installation

Use npm to install:

$ npm install @sabaki/boardmatcher

To use this module, require it as follows:

const boardmatcher = require('@sabaki/boardmatcher')

To access library pattern data, require:

const library = require('@sabaki/boardmatcher/library')

API

Board Data

The board arrangement is represented by an array of arrays. Each of those subarrays represent one row, all containing the same number of integers. -1 denotes a white stone, 1 a black stone, and 0 represents an empty vertex.

Example

<!-- prettier-ignore -->
[[ 0,  0,  1,  0, -1, -1,  1,  0, 0],
 [ 1,  0,  1, -1, -1,  1,  1,  1, 0],
 [ 0,  0,  1, -1,  0,  1, -1, -1, 0],
 [ 1,  1,  1, -1, -1, -1,  1, -1, 0],
 [ 1, -1,  1,  1, -1,  1,  1,  1, 0],
 [-1, -1, -1, -1, -1,  1,  0,  0, 0],
 [ 0, -1, -1,  0, -1,  1,  1,  1, 1],
 [ 0,  0,  0,  0,  0, -1, -1, -1, 1],
 [ 0,  0,  0,  0,  0,  0,  0, -1, 0]]

Vertex

Board positions are represented by an array of the form [x, y] where x and y are non-negative integers, zero-based coordinates of the vertex. [0, 0] denotes the top left position of the board.

Signed Vertex

Signed vertices are arrays of the form [[x, y], sign] where [x, y] is a vertex, and sign is either -1, 0, or 1 for denoting a white stone, an empty vertex, or a black stone respectively.

Pattern

A pattern object is an object of the following form:

{
    name?: <String> | null,
    url?: <String> | null,
    size?: <Integer> | null,
    type?: 'corner' | null,
    anchors?: <SignedVertex[]> | null,
    vertices: <SignedVertex[]>
}

Match

A match object is an object of the following form:

{
    symmetryIndex: <Integer>,
    invert: <Boolean>,
    anchors: <Vertex[]>,
    vertices: <Vertex[]>
}

boardmatcher.nameMove(data, sign, vertex[, options])

Returns null if boardmatcher cannot name the given move, otherwise a string with the move name.

boardmatcher.findPatternInMove(data, sign, vertex[, options])

Returns null if boardmatcher cannot find a pattern for the given move, otherwise an object of the following form:

{
    pattern: <Pattern>,
    match: <Match>
}

*boardmatcher.matchCorner(data, pattern)

A generator function that yields all matches of the given pattern on data. pattern will be regarded as corner type regardless of its type.

*boardmatcher.matchShape(data, anchor, pattern)

A generator function that yields all matches of the given pattern, for which the given anchor vertex corresponds to one of its anchors, on data.