public Move giveMove(){
		//update the weights for the new state
		double[][] w = newGenerateWeights(super.currentGameState.getStatus());
		//double[][] w1 = generateWeights(super.currentGameState.getStatus());
		Iterator<String> i = super.currentGameState.getDict().iterator();
		for(int j =0; j<5;j++){
		Letterpress.p(Arrays.toString(w[j]));
		}		
		//walk through the possible moves and get the best weighted move
		LMove bestMove = null;
		double bestWeight = 0.0;
		while(i.hasNext()){
			String move = i.next();
			//calculate the word value for the given board
			//build the move
			boolean [][]used = new boolean[5][5];
			for (int j = 0; j <used[0].length; j++){
				Arrays.fill(used[j], false);
			}
			LMove mv = new LMove();
			mv.setWord(move);
			for (int k=0;k<move.length();k++){
				char c = move.charAt(k);
				LCoord bestLtr = getBestLtr(w,used,c); 
				used[bestLtr.getRow()][bestLtr.getCol()] = true;
				mv.addLCoord(bestLtr);
			}
			
			//score the move vs. best weight
			double moveWeight = 0.0;
			Iterator<LCoord> it = mv.iterator();
			while (it.hasNext()){
				LCoord c = it.next();
				moveWeight += w[c.getRow()][c.getCol()];
			}
			
			if (moveWeight > bestWeight){
				bestMove = mv;
				bestWeight = moveWeight;
			}
		}
		//get letter positions for the best move
		if (bestMove == null){
			return new LMove();
		} else {
			//Letterpress.p(bestMove.getWord());
			Letterpress.p("Move Weight: "+bestWeight);
			return bestMove;
		}
	}