Suppose we have a 2048 game board representing the initial board and a string direction representing the swipe direction, we have to find the next board state. As we know in the 2048 game, we are given a 4 x 4 board of numbers (some of them are empty, represented in here with 0) which we can swipe in any of the 4 directions ("U", "D", "L", or "R"). When we swipe, all the numbers move in that direction as far as possible and identical adjacent numbers are added up exactly once.
So, if the input is like
direction = "L", then the output will be
To solve this, we will follow these steps:
if direction is same as "R", then
board := rotate board anti clockwise two times
otherwise when direction is same as "U", then
board := rotate board anti clockwise once
otherwise when direction is same as "D", then
board := rotate board anti clockwise three times
for i in range 0 to 3, do
row := a list of all non-zero elements at board[i]
for j in range 0 to 2, do
if j + 1 < size of row and row[j] is same as row[j + 1], then
row[j] := row[j] * 2
remove row[j + 1]
while size of row < 4, do
insert 0 at the end of row
board[i] := row
if direction is same as "R", then
board := rotate board anti clockwise two times
otherwise when direction is same as "U", then
board := rotate board anti clockwise three times
otherwise when direction is same as "D", then
board := rotate board anti clockwise once
return board
Let us see the following implementation to get better understanding
Example
class Solution: def solve(self, board, direction): if direction == "R": board = rot_anti_clock_dir(rot_anti_clock_dir(board)) elif direction == "U": board = rot_anti_clock_dir(board) elif direction == "D": board = rot_anti_clock_dir(rot_anti_clock_dir(rot_anti_clock_dir(board))) for i in range(4): row = [x for x in board[i] if x] for j in range(3): if j + 1 < len(row) and row[j] == row[j + 1]: row[j] *= 2 del row[j + 1] while len(row) < 4: row += [0] board[i] = row if direction == "R": board = rot_anti_clock_dir(rot_anti_clock_dir(board)) elif direction == "U": board = rot_anti_clock_dir(rot_anti_clock_dir(rot_anti_clock_dir(board))) elif direction == "D": board = rot_anti_clock_dir(board) return board def rot_anti_clock_dir(x): x = [[x[i][j] for i in range(4)] for j in range(4)] return x[::-1] ob = Solution() matrix = [ [2, 0, 0, 2], [2, 2, 2, 2], [0, 4, 2, 2], [2, 2, 2, 0]] print(ob.solve(matrix, "L"))
Input
matrix = [ [2, 0, 0, 2], [2, 2, 2, 2], [0, 4, 2, 2], [2, 2, 2, 0]]
Output
[ [4, 0, 0, 0], [4, 4, 0, 0], [4, 4, 0, 0], [4, 2, 0, 0]]