Files
Ilia Denisov 256999b42c Publish as versioned Gitea module; move dictionary pipeline out
- Rename module to gitea.iliadenisov.ru/developer/scrabble-solver so it can be
  consumed as a versioned dependency (no go.work replace / CI clone).
- De-internalize wordlist and dictdawg as public packages.
- Remove cmd/builddict, dictprep/, the dictionaries submodule and the dawg
  Makefile: the word-list parsing and DAWG build now live in the separate
  scrabble-dictionary repository, which publishes the DAWG set as a release artifact.
- internal/dict loads the committed dawg/en_sowpods.dawg fixture for cmd/stress.
- Update README/CLAUDE docs accordingly.
2026-06-04 19:11:46 +02:00

31 lines
925 B
Go

// Package dictdawg builds a plain left-to-right DAWG of a dictionary, as used by the
// Appel-Jacobson move generator.
package dictdawg
import (
"github.com/iliadenisov/alphabet"
dawg "github.com/iliadenisov/dafsa"
)
// Build returns a DAWG Finder over words, which must be alphabet-index slices sorted by
// index order and de-duplicated (see wordlist.Encode).
func Build(idx alphabet.Indexer, words [][]byte) (dawg.Finder, error) {
d := dawg.New(idx)
for _, w := range words {
if err := d.AddB(w); err != nil {
return nil, err
}
}
return d.Finish(), nil
}
// Save writes the DAWG to filename. It requires an embedded alphabet (for example
// alphabet.Latin()), so that Load can reconstruct it.
func Save(f dawg.Finder, filename string) error {
_, err := f.Save(filename)
return err
}
// Load reopens a DAWG saved with Save.
func Load(filename string) (dawg.Finder, error) { return dawg.Load(filename) }