68 lines
2.7 KiB
Go
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
|
|
}
|