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 }