Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
Behind 2048 eval's power solution in Creative category for Behind 2048 by capback250
# migrated from python 2.7
from functools import reduce
WIN = [['U', 'W', 'I', 'N'], ['U', 'W', 'I', 'N'], ['U', 'W', 'I', 'N'], ['U', 'W', 'I', 'N']]
LOSE = [['G', 'A', 'M', 'E'], ['O', 'V', 'E', 'R'], ['G', 'A', 'M', 'E'], ['O', 'V', 'E', 'R']]
BaseGenerator, BaseList = '[x for x in state]', 'list(st)'
ACTIONS = {'up':['[x for x in zip(*state)][::-1]', BaseList, '[list(x) for x in zip(*out[::-1])]'],
'left':[BaseGenerator, BaseList, '[list(x) for x in out]'],
'down':['[x for x in zip(*state)]', 'list(st[::-1])', '[list(x) for x in zip(*out)[::-1]]'],
'right':[BaseGenerator, 'list(st[::-1])', '[list(x)[::-1] for x in out]']}
findWin = lambda matrix: 2048 in reduce(list.__add__, [x for x in matrix])
move2048 = lambda state, move: movemaker(state, move)
def movemaker(state, move):
out = [summString(eval(ACTIONS[move][1])) for st in eval(ACTIONS[move][0])]
return WIN if findWin(eval(ACTIONS[move][2])) else addNewValue(eval(ACTIONS[move][2]))
def addNewValue(matrix):
for x in range(3, -1, -1):
for y in range(3, -1, -1):
if not matrix[x][y]:
matrix[x][y] = 2
return matrix
return WIN if findWin(matrix) else LOSE
def summString(row):
clear = list(filter(bool, row))
for i in range(len(clear)-1):
if clear[i] == clear[i+1]:
clear[i] *= 2
clear[i+1] = 0
return list(filter(bool, clear)) + [0] * (4 - len(list(filter(bool, clear))))
Jan. 19, 2016