Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
First solution in Clear category for Behind 2048 by kurosawa4434
MOVE_UP = 'up'
MOVE_DOWN = 'down'
MOVE_LEFT = 'left'
MOVE_RIGHT = 'right'
UWIN = 'UWIN'
GAME = 'GAME'
OVER = 'OVER'
def move2048(state, move):
result = [[] for _ in range(4)]
def add_new_tile():
for y in range(4):
for x in range(4):
if result[3 - y][3 - x] == 0:
result[3 - y][3 - x] = 2
return
def move_tiles(row):
tiles = [x for x in row if x != 0]
new_tiles = []
prev = 0
while tiles:
v = tiles.pop(0)
if prev:
if v == prev:
new_tiles.append(prev * 2)
prev = 0
else:
new_tiles.append(prev)
prev = v
if not tiles:
new_tiles.append(v)
else:
if tiles:
prev = v
else:
new_tiles.append(v)
return new_tiles + [0 for x in range(4 - len(new_tiles))]
def move_up():
for i in range(4):
new_row = move_tiles([state[x][i] for x in range(4)])
for i in range(4):
result[i].append(new_row[i])
def move_down():
for i in range(4):
newRow = move_tiles([state[3 - x][i] for x in range(4)])
for i in range(4):
result[3 - i].append(newRow[i])
def move_right():
for i in range(4):
new_row = move_tiles([state[i][3 - x] for x in range(4)])
result[i] = [new_row[3 - x] for x in range(4)]
def move_left():
for i in range(4):
new_row = move_tiles(state[i])
result[i] = new_row
# main
if move == MOVE_UP:
move_up()
elif move == MOVE_RIGHT:
move_right()
elif move == MOVE_DOWN:
move_down()
elif move == MOVE_LEFT:
move_left()
if [1 for x in result if 2048 in x]:
return [list(UWIN) for _ in range(4)]
if [1 for x in result if 0 in x]:
add_new_tile()
else:
return [list(GAME) if not x % 2 else list(OVER) for x in range(4)]
return result
July 24, 2016