anchor.diff:          int threeCount = threeConnectedCount(board);
           int twoCount = twoConnectedCount(board);
           Map blobs = connectedColors(board);
  +        printBoard(board);
  +        stderr.writeln(blobs);
  +        int blobThreeCount = blobs.values.where((blob) =>
  +        blob.length == 3).length;
  +        stderr.writeln("3Count $threeCount blobcount $blobThreeCount");
  +        
  +        assert(threeCount == blobThreeCount);
   
           return 
               twoCount * 5 + 
  
positive.code:     }
  
      Point find(Point point){
          if(point.parent == point){
              return point;
          } else {
              return find(point.parent);
          }
      }
  
  
negative.code:                     int northGroup = groups[northPoint];
                      int westGroup = groups[westPoint];
                      int minGroup = min(northGroup, westGroup);
                      groups[northPoint] = minGroup;
                      groups[westPoint] = minGroup;
                      blobs[minGroup].add(cp);
                      groups.union(northPoint, westPoint);
                      groups.union(northPoint, cp);
  
                      //update equivs
                      // union both sets of labels together
                      // for each group in labels, set equivs[group] to unioned list
                      Set<int> allEquivs = new Set<int>();
                      allEquivs.addAll(equivs[northGroup]);
                      allEquivs.addAll(equivs[westGroup]);
                      
                      allEquivs.forEach((equiv) => equivs[equiv] = allEquivs);
                  }
              }
          }
  