github.com/joshprzybyszewski/masyu@v0.0.0-20230508015604-f31a025f6e7e/solve/rule_black_extended.go (about) 1 package solve 2 3 import "github.com/joshprzybyszewski/masyu/model" 4 5 func newBlackL2Rule( 6 nodeRow, nodeCol model.Dimension, 7 ) rule { 8 r := rule{ 9 affects: 2, 10 row: nodeRow, 11 col: nodeCol, 12 } 13 r.check = r.checkBlackL2 14 return r 15 } 16 17 func (r *rule) checkBlackL2( 18 s *state, 19 ) { 20 if s.horAvoidAt(r.row, r.col-2) { 21 s.avoidHor(r.row, r.col-1) 22 s.lineHor(r.row, r.col) 23 } 24 } 25 26 func newBlackR2Rule( 27 nodeRow, nodeCol model.Dimension, 28 ) rule { 29 r := rule{ 30 affects: 2, 31 row: nodeRow, 32 col: nodeCol, 33 } 34 r.check = r.checkBlackR2 35 return r 36 } 37 38 func (r *rule) checkBlackR2( 39 s *state, 40 ) { 41 if s.horAvoidAt(r.row, r.col+1) { 42 s.avoidHor(r.row, r.col) 43 s.lineHor(r.row, r.col-1) 44 } 45 } 46 47 func newBlackU2Rule( 48 nodeRow, nodeCol model.Dimension, 49 ) rule { 50 r := rule{ 51 affects: 2, 52 row: nodeRow, 53 col: nodeCol, 54 } 55 r.check = r.checkBlackU2 56 return r 57 } 58 59 func (r *rule) checkBlackU2( 60 s *state, 61 ) { 62 if s.verAvoidAt(r.row-2, r.col) { 63 s.avoidVer(r.row-1, r.col) 64 s.lineVer(r.row, r.col) 65 } 66 } 67 68 func newBlackD2Rule( 69 nodeRow, nodeCol model.Dimension, 70 ) rule { 71 r := rule{ 72 affects: 2, 73 row: nodeRow, 74 col: nodeCol, 75 } 76 r.check = r.checkBlackD2 77 return r 78 } 79 80 func (r *rule) checkBlackD2( 81 s *state, 82 ) { 83 if s.verAvoidAt(r.row+1, r.col) { 84 s.avoidVer(r.row, r.col) 85 s.lineVer(r.row-1, r.col) 86 } 87 }