blankxblanky getblankposition(board if move =up board[blankx][blanky]board[blankx][blanky board[blankx][blanky ]board[blankx][blanky elif move =down board[blankx][blanky]board[blankx][blanky board[blankx][blanky ]board[blankx][blanky elif move =left board[blankx][blanky]board[blankx ][blankyboard[blankx ][blanky]board[blankx][blanky elif move =right board[blankx][blanky]board[blankx ][blankyboard[blankx ][blanky]board[blankx][blankythe data structure in the board parameter is list that represents where all the tiles are whenever the player makes movethe program needs to update this data structure what happens is that the value for the tile is swapped with the value for the blank space the makemove(function doesn' have to return any valuesbecause the board parameter has list reference passed for its argument this means that any changes we make to board in this function will be made to the list value that was passed to makemove((you can review the concept of references at when not to use an assertion def isvalidmove(boardmove) blankxblanky getblankposition(board return (move =up and blanky !len(board[ ] or (move =down and blanky ! or (move =left and blankx !len(board or (move =right and blankx ! the isvalidmove(function is passed board data structure and move the player would want to make the return value is true if this move is possible and false if it is not for exampleyou cannot slide tile to the left one hundred times in rowbecause eventually the blank space will be at the edge and there are no more tiles to slide to the left whether move is valid or not depends on where the blank space is this function makes call to getblankposition(to find the and coordinates of the blank spot lines to are return statement with single expression the slashes at the end of the first three lines tells the python interpreter that that is not the end of the line of code (even though it is at the end