---
# System prepended metadata

title: Abre la cerradura

---

# Abre la cerradura

Tienes un candado frente a ti con 4 ruedas circulares. Cada rueda tiene 10 ranuras: `'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'`. Las ruedas pueden girar libremente y girar: por ejemplo, podemos convertir `'9'` en `'0'` o `'0'` en `'9'`. Cada movimiento consiste en girar una rueda en la ranura.

La cerradura comienza inicialmente en '0000', una cadena que representa el estado de las 4 ruedas.

Se le da una lista de callejones sin salida, lo que significa que si la cerradura muestra alguno de estos códigos, las ruedas de la cerradura dejarán de girar y no podrá abrirla.

Dado un objetivo que representa el valor de las ruedas que desbloquearán la cerradura, devuelva el número total mínimo de vueltas necesarias para abrir la cerradura, o ``-1`` si es imposible.

## Ejemplo 1:

### Input: 
`deadends = ["0201", "0101", "0102", "1212", "2002"]`
`target = "0202"`
### Output: 6
### Explicación:
Una secuencia de movimientos válidos sería 
`"0000" -> "1000" -> "1100" -> "1200" -> "1201" -> "1202" -> "0202"`.
Tenga en cuenta que una secuencia como 
`"0000" -> "0002" ->` <span style="color:red"> `"0102"`</span>` -> "0202"`
no sería válida, porque las ruedas de la cerradura se atascan después de que la secuencia se convierte en el deadends(callejón sin salida) `"0102"`.

## Ejemplo 2:

#### Input: 
`deadends = ["8888"] `
`target = "0009"`
#### Output: 1
#### Explicación:
Podemos girar la última rueda en reversa para pasar de `"0000" -> "0009".`

## Ejemplo 3:
### Input: 
`deadends: ["8887", "8889", "8878", "8898", "8788", "8988", "78880," 9888 "]`
`target = "8888"`
### Output: -1
### Explicación:
No podemos alcanzar el objetivo sin atascarnos.

## Ejemplo 4:
### Input: 
`deadends = ["0000"]`
`target = "8888"`
### Output: -1

## Restricciones:
* `1 <= deadends.length <= 500`
* `deadends[i].length == 4`
* `target.length == 4`
* `target no estará en la lista de deadends`
* `target and deadends[i] constan solo de dígitos.`

```typescript=
/*
 * Typescript Scaffolding
 */
function openLock(deadends: string[], target: string): number
{
    //your code
}

//Test 
let deadends = ["8887", "8889", "8878", "8898", "8788", "8988", "78880", "9888 "]
let target = 8888
openLock(deadends, target) //-> should return -1
```
