Files
Sudoku/logic/strategies/hidden.go
T

68 lines
2.7 KiB
Go

package strategies
import "git.kleiax.de/homepage/field"
// ────────────────────────────────────────────────────────────────────────────── //
// HIDDEN_SINGLE STRUCTURE //
// ────────────────────────────────────────────────────────────────────────────── //
type HiddenSingle struct {
Base
}
func (hs *HiddenSingle) SearchProgressableCells() int {
hs.field.ForEachPart(func(part field.Part) {
m := make(map[int]int)
part.ForEachCell(func(cell *field.Cell) {
notes := cell.Notes.Get()
for note := range notes {
m[note]++
}
})
var hiddenSingles []int
for num, count := range m {
if count == 1 {
hiddenSingles = append(hiddenSingles, num)
}
}
for num := range hiddenSingles {
part.ForEachCell(func(cell *field.Cell) {
if cell.Notes.Has(num) {
change := field.ExternalChange{
Cell: cell,
Action: field.ActionSetNumber,
Value: num,
From: cell.GetNumber(),
TriggerdBy: hs.getName(),
}
hs.changes = append(hs.changes, change)
}
})
}
})
return len(hs.changes)
}
func (hs *HiddenSingle) getName() string {
return "Hidden Single"
}
// ────────────────────────────────────────────────────────────────────────────── //
// HIDDEN_PAIR STRUCTURE //
// ────────────────────────────────────────────────────────────────────────────── //
type HiddenPair struct {
Base
}
// ────────────────────────────────────────────────────────────────────────────── //
// HIDDEN_TRIPLE STRUCTURE //
// ────────────────────────────────────────────────────────────────────────────── //
type HiddenTriple struct {
Base
}