Block Dude

En Block Dude, el personaje principal puede subir cajas, pero solo si están apiladas de una manera específica que le permita subirlas de una en una. Más específicamente, solo puede SUBIR o BAJAR una caja a la vez.

Considera que 1s representan las cajas y que 0 representa el fondo. Escribe una función que devuelva true si block dude puede desplazarse desde el lado izquierdo hasta el lado derecho de la pantalla dadas sus restricciones.

Por ejemplo, el diseño de muestra que aparece abajo debería devolver true.

[
  [0, 0, 0, 0, X, 0, 0, 0, 0],
  [0, 0, 0, X, 1, X, X, 0, 0],
  [0, X, X, 1, 1, 1, 1, X, 0],
  [X, 1, 1, 1, 1, 1, 1, 1, X]
]

block dude puede atravesar estas cajas (ten en cuenta que las X solo muestran la ruta para caminar y no forman parte de la entrada real). Por otro lado:

[
  [0, 0, 0, 0, 0, 0, 0, 0, 0],
  [0, 0, 0, 1, 1, 0, 0, 0, 0],
  [0, X, X, 1, 1, 1, 1, 0, 0],
  [X, 1, 1, 1, 1, 1, 1, 1, 0]
]

Debería devolver false, ya que block dude queda atrapado en la columna 3 al no poder subir 2 cajas de una vez.

Ejemplos

can_traverse([
  [0, 0, 0, 0, 0, 0, 0, 0, 0],
  [0, 0, 0, 1, 0, 0, 0, 0, 0],
  [0, 0, 1, 1, 0, 0, 1, 0, 0],
  [0, 1, 1, 1, 1, 1, 1, 1, 0]
]) ➞ false

# Block dude can't jump down 2 blocks.

can_traverse([
  [0, 0, 0, 0, 0, 0, 0, 0, 0],
  [0, 0, 0, 1, 0, 0, 0, 0, 1],
  [0, 0, 1, 1, 1, 0, 1, 1, 1],
  [0, 1, 1, 1, 1, 1, 1, 1, 1]
]) ➞ true

# Note: Sometimes the exit is at the top!

can_traverse([
  [0, 0, 0, 0, 0, 0, 0, 0, 0],
  [0, 0, 0, 1, 0, 0, 0, 0, 0],
  [0, 0, 1, 1, 1, 1, 1, 0, 0],
  [0, 1, 1, 1, 1, 1, 1, 1, 0]
]) ➞ true

can_traverse([
  [0, 0, 0, 0, 0, 0, 0, 0, 0],
  [0, 0, 0, 1, 0, 0, 0, 0, 0],
  [0, 1, 1, 1, 1, 1, 1, 0, 0],
  [0, 1, 1, 1, 1, 1, 1, 1, 0]
]) ➞ false

# Block dude can't climb 2 blocks.

Notas

Consulta la pestaña Recursos para encontrar un enlace que permita jugar a block dude.