Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

dancing-links-algorithm

messiaen232ISC1.0.1

Implementantion of Knuth's dancing links algorithm

dancing-links-algorithm, sudoku, algorithm-x, knuth

readme

dancing-links-algorithm

About

This is implementation of Knuth's Algorithm X, called also Dancing Links Algorithm.

It lets you solve binary matrix, dictionary and sudoku as well.

Usage

`javascript

const dlx = require('dancing-links-algorithm');

// algorithm finds all subsets of matrix rows, such that there is exactly one 1 in every column

let mat = [[1, 0, 0, 1, 0, 0, 1], [1, 0, 0, 1, 0, 0, 0], [0, 0, 0, 1, 1, 0, 1], [0, 0, 1, 0, 1, 1, 0], [0, 1, 1, 0, 0, 1, 1], [0, 1, 0, 0, 0, 0, 1], [0, 1, 1, 0, 1, 1, 0]];

let solutions = dlx.solve(mat) console.log(solutions)

// OUTPUT: [ [ '0', '6' ], [ '1', '3', '5' ] ]

for (let i = 0; i < solutions.length; i++) { console.log(Solution No. ${i + 1}); for (let j = 0; j < solutions[i].length; j++) { console.log(mat[solutions[i][j]]); } }

// OUTPUT: // Solution No. 1 // [ 1, 0, 0, 1, 0, 0, 1 ] // [ 0, 1, 1, 0, 1, 1, 0 ] // Solution No. 2 // [ 1, 0, 0, 1, 0, 0, 0 ] // [ 0, 0, 1, 0, 1, 1, 0 ] // [ 0, 1, 0, 0, 0, 0, 1 ]

// you can also pass object and elements as parameters

let elements = [1, 2, 3, 4, 5, 6, 7]; let dict = { 'A': [1, 4, 7], 'B': [1, 4], 'C': [4, 5, 7], 'D': [3, 5, 6], 'E': [2, 3, 6, 7], 'F': [2, 7], 'H': [3, 7, 1, 2], 'G': [4, 5, 6] }

let sols = dlx.solve(elements, dict); console.log(sols);

// OUTPUT: [ [ 'B', 'D', 'F' ], [ 'H', 'G' ] ]

// you can solve 9x9 sudoku

let sudoku = '050020108000100200820900050090540070047000083080000000000200004600030000210000000'; let sudokuSolutions = dlx.solve(sudoku);

console.log(sudokuSolutions.length); // OUTPUT: 21 for (let i = 0; i < sudokuSolutions.length; i++) { console.log(Solution No. ${i + 1}); console.log(sudokuSolutions[i]); }

// OUTPUT: // Solution No. 1 // [ [ 7, 5, 9, 3, 2, 6, 1, 4, 8 ], // [ 4, 6, 3, 1, 8, 5, 2, 9, 7 ], // [ 8, 2, 1, 9, 7, 4, 3, 5, 6 ], // [ 3, 9, 2, 5, 4, 8, 6, 7, 1 ], // [ 1, 4, 7, 6, 9, 2, 5, 8, 3 ], // [ 5, 8, 6, 7, 1, 3, 4, 2, 9 ], // [ 9, 3, 8, 2, 5, 1, 7, 6, 4 ], // [ 6, 7, 5, 4, 3, 9, 8, 1, 2 ], // [ 2, 1, 4, 8, 6, 7, 9, 3, 5 ] ] // Solution No. 2 // [ [ 7, 5, 9, 3, 2, 6, 1, 4, 8 ], // [ 4, 6, 3, 1, 8, 5, 2, 9, 7 ], // [ 8, 2, 1, 9, 7, 4, 3, 5, 6 ], // [ 3, 9, 2, 5, 4, 8, 6, 7, 1 ], // [ 5, 4, 7, 6, 1, 2, 9, 8, 3 ], // [ 1, 8, 6, 7, 9, 3, 4, 2, 5 ], // [ 9, 3, 8, 2, 5, 1, 7, 6, 4 ], // [ 6, 7, 5, 4, 3, 9, 8, 1, 2 ], // [ 2, 1, 4, 8, 6, 7, 5, 3, 9 ] ] // // etc.