Package Exports
- sudoku-formats
- sudoku-formats/dist/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (sudoku-formats) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
sudoku-formats
Convert between different sudoku formats (lisudoku, fpuzzles, penpa).
See it in action on the lisudoku solver page through the import button.
Install
yarn add sudoku-formats
Decoding and encoding puzzles
import { decodeSudoku, encodeSudoku, FORMATS, SudokuDataFormat } from 'sudoku-formats'
// Parse grid string
decodeSudoku('1000003002000004').then(({ constraints }) => {
console.log(constraints)
})
// Parse lisudoku puzzle
const LISUDOKU_URL = 'https://lisudoku.xyz/solver?import=1000003002000004'
const { format, dataString, constraints, error } = await decodeSudoku(LISUDOKU_URL)
console.log(constraints) // { gridSize: 4, regions: [...], ... }
console.log(dataString) // '1000003002000004'
console.log(format) // 'lisudoku'
console.log(error) // undefined
console.log(encodeSudoku({ constraints: constraints, format: SudokuDataFormat.Lisudoku }))
// { dataString: '1000003002000004', url: 'https://lisudoku.xyz/solver?import=1000003002000004' }
// Parse f-puzzles puzzle
const FPUZZLES_URL = 'https://f-puzzles.com/?load=N4IgzglgXgpiBcBOANCA5gJwgEwQbT1ADcBDAGwFc54BGVNCImAOwQBcMqBfZYHv3vyGCRfALrJCwgTOlyJU0XKVKFsles1c1yrRu2S9R+Yd1nVp/Vdk7r58WK5A'
const { format, dataString, constraints, error } = await decodeSudoku(FPUZZLES_URL)
console.log(constraints) // { size: 9, grid: [...], ... }
console.log(dataString) // 'N4IgzglgXgpiBcBOAN...'
console.log(format) // 'fpuzzles'
console.log(error) // undefined
// Handling errors
const { error } = await decodeSudoku('123');
console.log(error) // 'Error while parsing inline data'
// Get all formats
console.log(FORMATS) // [{ format: 'lisudoku', urlPatterns: ... }, ...]
Converting between formats
import { decodeSudoku, transformSudoku, SudokuDataFormat } from 'sudoku-formats'
const LISUDOKU_URL = 'https://lisudoku.xyz/solver?import=1000003002000004'
const { format, constraints } = await decodeSudoku(LISUDOKU_URL)
// lisudoku -> fpuzzles
const result = transformSudoku({
constraints,
fromFormat: format,
toFormat: SudokuDataFormat.Fpuzzles,
})
console.log(result.constraints) // { size: 4, ... }
console.log(result.url) // 'https://f-puzzles.com/?load=...'
console.log(result.error) // undefined
Supported formats
Format | URL patterns | Example |
---|---|---|
lisudoku | https://lisudoku.xyz/e?import=:data https://lisudoku.xyz/solver?import=:data https://lisudoku.xyz/p/:id |
example1 example2 |
fpuzzles | https://f-puzzles.com/?load=:data |
example1 |
penpa | ...://.../penpa-edit/#...&p=:data |
example1 example2 |
Contribute
Do you want another format supported? Open an issue or a pull request.
Consider joining the discord server.