Behind 2048 Behind 2048
Challenging
EN Spanish RU

Tal vez ya has escuchado sobre un simple y adictivo juego llamado 2048 (leer más al respecto aquí). ). En esta misión, vamos a ver qué hay tras el telón y trataremos de recrear su funcionalidad básica de movimiento.

2048 se juega en una simple cuadrícula de 4 × 4 piezas. Un jugador puede mover las piezas hacia la izquierda, la derecha, hacia arriba o hacia abajo. Si dos piezas del mismo número chocan mientras se mueven, se fusionarán en una nueva pieza que representa la suma de las dos fichas. Esta nueva ficha no puede fusionarse con otra ficha en la misma jugada. Si existen tres fichas con el mismo valor, las dos fichas que se encuentren cerca del borde en la dirección de movimiento se fusionaran (movimiento a la derecha- las fichas más cercanas al borde derecho). En cada jugada, una nueva ficha aparecerá en el último espacio vacío (valor 0) del tablero, con un valor de 2. El último espacio vacío está determinado por índices definidos según el siguiente orden:
[[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11], [12, 13, 14, 15]]
[[0, 1, 2, 3], [4, 5,...
Al inicio, existen dos números en el tablero.

 

Datos de Entrada: El estado del juego, como una lista de listas con enteros (int) y y la dirección del movimiento del jugador, como una cadena (str): 'up', 'down', 'left' or 'right'

 

Salida: El estado del juego después de aplicar el movimiento indicado, como una lista de listas con enteros (int) o letras (matriz “ganar”/”perder”).

¿Cómo se usa?: Esta misión puede ser la base de una implementación con GUI del juego 2048 en Python.

 

Ejemplo:

move2048([[0, 2, 0, 0],
          [0, 0, 0, 0],
          [0, 0, 0, 0],
          [0, 2, 0, 0]], 'up') == [[0, 4, 0, 0],
                                   [0, 0, 0, 0],
                                   [0, 0, 0, 0],
                                   [0, 0, 0, 2]]
move2048([[4, 0, 0, 0],
          [0, 4, 0, 0],
          [0, 0, 0, 0],
          [0, 0, 8, 8]], 'right') == [[0, 0, 0, 4],
                                      [0, 0, 0, 4],
                                      [0, 0, 0, 0],
                                      [0, 0, 2, 16]]
move2048([[2, 0, 2, 2],
          [0, 4, 4, 4],
          [8, 8, 8, 16],
          [0, 0, 0, 0]], 'right') == [[0, 0, 2, 4],
                                      [0, 0, 4, 8],
                                      [0, 8, 16, 16],
                                      [0, 0, 0, 2]]
move2048([[256, 0, 256, 4],
          [16, 8, 8, 0],
          [32, 32, 32, 32],
          [4, 4, 2, 2]], 'right') == [[0, 0, 512, 4],
                                      [0, 0, 16, 16],
                                      [0, 0, 64, 64],
                                      [0, 2, 8, 4]]
move2048([[4, 4, 0, 0],
          [0, 4, 1024, 0],
          [0, 256, 0, 256],
          [0, 1024, 1024, 8]], 'down') == [['U', 'W', 'I', 'N'],
                                           ['U', 'W', 'I', 'N'],
                                           ['U', 'W', 'I', 'N'],
                                           ['U', 'W', 'I', 'N']]
move2048([[2, 4, 8, 16],
          [32, 64, 128, 256],
          [512, 1024, 2, 4],
          [8, 16, 32, 64]], 'left') == [['G', 'A', 'M', 'E'],
                                        ['O', 'V', 'E', 'R'],
                                        ['G', 'A', 'M', 'E'],
                                        ['O', 'V', 'E', 'R']]

Condiciones: len(state) == 4
all(len(row) == 4 for row in state)
all(all(x in (0, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024) for x in row) for row in state)

You should be an authorized user in order to see the full description and start solving this mission.