github.com/joshprzybyszewski/masyu@v0.0.0-20230508015604-f31a025f6e7e/solve/rule_black_validator.go (about) 1 package solve 2 3 import ( 4 "github.com/joshprzybyszewski/masyu/model" 5 ) 6 7 func newBlackValidator( 8 row, col model.Dimension, 9 ) rule { 10 r := rule{ 11 affects: 6, 12 row: row, 13 col: col, 14 } 15 r.check = r.checkBlackValid 16 return r 17 } 18 19 func (r *rule) checkBlackValid( 20 s *state, 21 ) { 22 23 l, a := s.horAt(r.row, r.col) 24 if l { 25 s.lineHor(r.row, r.col+1) 26 s.avoidHor(r.row, r.col-1) 27 } else if a || s.horLineAt(r.row, r.col-1) { 28 s.avoidHor(r.row, r.col) 29 s.lineHor(r.row, r.col-1) 30 if r.col > 1 { 31 s.lineHor(r.row, r.col-2) 32 } else { 33 r.setInvalid(s) 34 } 35 } 36 37 l, a = s.verAt(r.row, r.col) 38 if l { 39 s.lineVer(r.row+1, r.col) 40 s.avoidVer(r.row-1, r.col) 41 } else if a || s.verLineAt(r.row-1, r.col) { 42 s.avoidVer(r.row, r.col) 43 s.lineVer(r.row-1, r.col) 44 if r.row > 1 { 45 s.lineVer(r.row-2, r.col) 46 } else { 47 r.setInvalid(s) 48 } 49 } 50 }