15c7959d96
A Go library that returns every legal play ranked by score and scores or validates plays, using the Appel-Jacobson DAWG algorithm over github.com/iliadenisov/dafsa v1.1.0. - DAWG move generation (across / down / both), full tournament scoring with a per-tile breakdown; public Solver: GenerateMoves (ranked), ScorePlay, ValidatePlay. - Rulesets: English Scrabble, Russian Scrabble, Эрудит (parameterizable Ruleset). - cmd/builddict (build the DAWG from the dictionaries submodule), cmd/stress (self-play benchmark), selfplay engine; brute-force test oracle. - A GADDAG was implemented, benchmarked and removed (the DAWG was smaller and faster for a scoring solver); see RESULTS.md and ALGORITHM.md.
22 lines
744 B
Go
22 lines
744 B
Go
// Package graph provides thin, reusable helpers over a dafsa Cursor that the move
|
|
// generator builds on. It keeps the rest of the solver from depending on dafsa
|
|
// traversal details directly.
|
|
package graph
|
|
|
|
import dawg "github.com/iliadenisov/dafsa"
|
|
|
|
// Spell follows the given alphabet indices from the cursor's root. It returns the
|
|
// state reached, whether that state is accepting, and whether the whole path exists.
|
|
// When ok is false the path ran into a missing edge; n and final are meaningless.
|
|
func Spell(c *dawg.Cursor, indices []byte) (n dawg.Node, final, ok bool) {
|
|
n = c.Root()
|
|
final = c.Final(n)
|
|
for _, ix := range indices {
|
|
n, final, ok = c.Next(n, ix)
|
|
if !ok {
|
|
return n, false, false
|
|
}
|
|
}
|
|
return n, final, true
|
|
}
|