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.GetNotes().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.GetNumber() == 0 && cell.GetNotes().Has(num) { change := field.ExternalChange{ Cell: cell, Action: field.ActionSetNumber, Value: num, From: cell.GetNumber(), TriggerdBy: hs.getName(), } hs.queue(change) } }) } }) return len(hs.changes) } func (hs *HiddenSingle) getName() string { return "Hidden Single" } func (hs *HiddenSingle) Name() string { return hs.getName() } // ────────────────────────────────────────────────────────────────────────────── // // HIDDEN_PAIR STRUCTURE // // ────────────────────────────────────────────────────────────────────────────── // type HiddenPair struct { Base } // ────────────────────────────────────────────────────────────────────────────── // // HIDDEN_TRIPLE STRUCTURE // // ────────────────────────────────────────────────────────────────────────────── // type HiddenTriple struct { Base }