anchor.diff:          acc.add(current);
           closed.add(current);
           //generate neighbors and recurse
  -        List<Point> valids = validNeighbors(current, board);
  +        List<Point> valids = validNeighbors(board, current);
   
           for(Point valid in valids){
               if(!open.contains(valid) && !closed.contains(valid)){
  
positive.code:         me = new Player(myBoard, score1, 0, turn);
          opp = new Player(oppBoard, score2, 0, turn);
  
          stderr.writeln("Upcoming: $pairs");
          printBoard(myBoard);
          Map rankMap = rankMoves(me);
          stderr.writeln("Rankmap $rankMap");
  
          List<Move> bestMoves = rankMap[rankMap.keys.last];
  
          Move move = bestMoves[rand.nextInt(bestMoves.length)];
  
          print("${move.col} ${move.rot}");
  
          turn++;
          turn++;
      }
  }
  
  class Player {
      List<List<Cell>> board = [];
      int score;
      num nuisancePoints;
      num generatedNuisance = 0;
      bool alive = true;
      int turn;
  
      Player(this.board, this.score, this.nuisancePoints, this.turn);
  
      int get totalBlocks => board.fold(0, (prev, element) => prev + element.length);
  
      num evaluate(){
          if(!alive){
  
negative.code:         //this player's nuisance points don't change when we move
          Player updated = new Player(newBoard, newScore, this.nuisancePoints, turn);
          if(!move.isValid(this.board)){
              // stderr.writeln("Attempting to apply invalid move $move!");
              // printBoard(this.board);
              updated.alive = false;
              return updated;
          }
  