anchor.diff:      for(int row = 0; row < 6; row++){
           for(int col = 0; col < board[row].length; col++){
               Point cp = new Point(col, row);
  -            if(board[row][col] == Cell.skull && 
  +            if(board[row][col] == Cell.skull &&
                   validNeighbors(board, cp).any((nbr) => removals.contains(nbr))){
                   skulls.add(cp);
               }
  
positive.code:             twoCount * 2 +
              threeCount * 5 +
              this.totalBlocks * -2 +
              totalSkulls * -3 + 
              this.generatedNuisance +
              this.score * 1;
      }
      
      //TODO add skull drop update method (board, int rows);
  
      Player applyMove(Move move, Pair pair){
  
negative.code: }
  
  Solution findSolution(Player me, Player opp, List<Pair> pairs){
  
      Solution current = new Solution(me, opp, pairs,
          randomMoves(pairs),
          randomMoves(pairs));
  
      while(sw.elapsedMilliseconds < TIMEOUT){
          Solution newSol = new Solution(me, opp, pairs,
              randomMoves(pairs),
              randomMoves(pairs));
          if(newSol.p1Discount  + newSol.p1Eval >
              current.p1Discount + current.p1Eval){
              current = newSol;
          }
      }
      stderr.writeln("Returning solution with eval ${current.p1Eval}");
  
      return current;
  
  }
  
  List<Move> randomMoves(pairs){
      return new List.generate(pairs.length, (index) =>
          pairs[index].allMoves()[rand.nextInt(
              pairs[index].allMoves().length)]);
  }
  