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  }