# ¿Es posible resolver el 15-puzzle?
En este ejercicio vamos a estar trabajando con la representación en forma de matriz cuadrada de enteros (int) de un [15-puzzle](https://en.wikipedia.org/wiki/15_puzzle). Se puede jugar al juego desde [aquí](https://lorecioni.github.io/fifteen-puzzle-game/).
Se pide generar un método que para una matriz de entrada, devuelva verdadero, si el puzzle tiene solución o falso si no se puede resolver
Las reglas para comprobar que un 15-puzzle de lado L puede ser resuelto son:
Si L es impar:
- El puzzle puede ser resuelto si el *número de inversiones* es par
Si L es par:
- Si la fila donde esta el espacio en blanco esta en una fila impar:
- El puzzle puede ser resuelto si el *número de inversiones* es impar
- Si la fila donde esta el espacio en blanco esta en una fila par:
- El puzzle puede ser resuelto si el *número de inversiones* es par
El número de inversiones (NI) se obtiene de la siguiente manera:
Si pensamos el puzzle en una dimensión en vez de dos dimensiones, el número de inversiones es la cantidad de números mayores a la derecha de cada posición. Por ejemplo consideremos una matriz de 3x3 escrito en una dimensión:
```
3 2 X
1 4 5
6 7 8
```
```
3 2 X 1 4 5 6 7 8
```
La cantidad de inversiones en este caso son 3:
[3, 2], [3, 1] y [2, 1]
### Input/Output
**[input] int[][] m**
La matriz **m** representada en una matriz cuadrada de enteros. El número `0` representa el espacio vacio
`2 ≤ m[0].length ≤ 9`
`0 ≤ m[i] ≤ (m[0].length)² - 1`
**[output] boolean**
`true | false`
### Ejemplo
Para la matriz m:
```
1 2 3
6 5 4
8 0 7
```
L = 3 -> impar
NI = 4 -> par: [6, 5], [6, 4], [5, 4], [8, 7]
Salida esperada: `true`
La salida debe ser:
`validPuzzle(m) = true`
### Tests
**Test 1**
Para la matriz m:
```
1 8 2
0 3 4
7 6 5
```
L = 3 -> impar
NI = 9 -> impar: [8, 2], [8, 3], [8, 4], [8, 7], [8, 6], [8, 5], [7, 6], [7, 5], [6, 5]
Salida esperada: `false`
**Test 2**
Para la matriz m:
```
0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15
```
L = 4 -> par
Fila X = 1 -> impar
NI = 0 -> par
Salida esperada: `false`
### Bibliografía
La lógica de la resolución de este tipo de puzzles de deslizamiento es explicada en el siguiente artículo de THE UNIVERSITY OF BIRMINGHAM: [TilesSolvability](https://www.cs.bham.ac.uk/~mdr/teaching/modules04/java2/TilesSolvability.html)