anchor.diff:      
       if(this.outOfBounds(x+1,y) == false && grid.getElement(x, y) >= grid.getElement(x+1, y)) //abajo
       {
  -      this.factor(1, 0, first);
  +      this.factor(1, 0, x, y, first, breakZigZag);
  +      auxZigZag = (this.factor(1, 0, x, y, false, breakZigZag) == 1);
         grid.setElement(x, y, max);
  -      auxList = this.maxDecrecimientosList(grid,x+1,y,false,1,0);
  +      auxList = this.maxDecrecimientosList(grid,x+1,y,false,1,0,auxZigZag);
         count.add(auxList[0]+1);
  -      addedcount.add(auxList[1]+aux*this.factor(direcX, direcY, false));
  +      addedcount.add(auxList[1]+aux*this.factor(1, 0, x, y, false, breakZigZag));
         grid.setElement(x, y, aux);
         if(grid.getElement(x, y) == grid.getElement(x+1, y))
         {
  
positive.code:       List<Move> prevMoves = new List<Move>();
        this.getMove(testGrid, punto, depth, prevMoves, 0);
      }
      if(moves == 400)
      {
        print(this.globalMove.getValue());
        print(punto.toString());
        return;
      }
      Game.move(this.globalMove);
    }
    
  
negative.code:   
    SolverDecrecimiento() 
    {
    }
    
    void move() 
    {
      Grid testGrid = Game.getCurrentGameState().getGrid().clone(); //this is the current grid getting it from currentGameState
      int moves = Game.getCurrentGameState().getMoves();
      //testGrid = new Grid.fromJSON(("[32, 64, 256, 512],[8, 8, 2, 2],[2, 0, 0, 0],[2, 0, 0, 0]"));
      //testGrid.getMatrix().printMatrix();
      List<int> punto = this.puntoMasGrande(testGrid);
      List<int> auxpunto = new List<int>();
  