Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

117
Vistas
Ejercicio de codificación de tuberías de agua. ¿Cómo me visualizo resolviendo este problema?

Este es un ejercicio en línea para el que estoy tratando de entender la solución.

La pregunta es:

Dada la imagen a continuación (una matriz multidimensional), los valores 0 actúan como una tubería y los valores 1 actúan como cemento. Necesito escribir código para determinar si la "tubería" se extiende desde la parte superior de la primera matriz (se puede decir que es una "apertura" de una tubería) hasta la parte inferior de la última matriz.

 const arr = [ [0, 0, 0, 0, 1], [0, 0, 1, 0, 0], [0, 0, 0, 1, 0], [1, 1, 1, 1, 0], [1, 0, 1, 1, 0], ]

El código que escriba para la matriz anterior arrojaría "verdadero" porque los valores 0 forman el siguiente patrón (reemplace con el asterisco):

 const arr = [ [0, 0, 0, *, 1], [0, 0, 1, *, *], [0, 0, 0, 1, *], [1, 1, 1, 1, *], [1, 0, 1, 1, *], ]

En mi cabeza, visualizo este problema como uno en el que crearía un puntero para moverme por las matrices. Si las reglas solo requirieran que el codificador trabajara con un solo 0 por matriz, el problema sería fácil de resolver. Siendo que hay múltiples callejones sin salida es donde mi mente se vuelve papilla. Supongo que hay una manera más fácil de ver este problema que pensar en bucles. Sé que esto se puede matemetizar, pero no soy exactamente una persona matemática.

Mi proceso de recuperación es simplemente crear una colección de funciones como:

 checkSurroundingValues() goForward() goBackward() goLeft() goDOwn() goUp()

etc., pero hacerlo de esta manera se convierte en un lío demasiado complicado. Me imagino que hay algunos trucos para visualizar cómo completar este problema. Quiero entender claramente "el truco" y el proceso de pensamiento.

Siento que el camino a seguir es escribir un código que siga a cada "cero" y genere efectivamente un nuevo "rastreador" para seguir cada rastro, pero no tengo idea de cómo escribir eso. :)

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

hacerlo de esta manera se convierte en un lío demasiado complicado

Es más repetitivo de lo que necesitas, pero no tanto.

Primero haga un conjunto o matriz de índices visitados hasta el momento, por ejemplo, 1_2 corresponde a haber visitado arr[1][2] . Haz una función recursiva que:

  • Comprueba si la posición que se está iterando ya ha sido visitada. Si es así, vuelve

  • Comprueba si la posición que se está iterando tiene un 1 o un 0. Si es 1, regresa.

  • Comprueba si la posición que se está iterando tiene el índice x máximo (en cuyo caso, se encuentra en la parte inferior); volver verdadero

  • Llame a la función recursivamente con los cuatro cuadrados circundantes: (0, 1), (1, 0), (0, -1), (-1, 0). Si alguna de las llamadas recursivas devuelve verdadero, devuelve verdadero. Debería ser tan simple como

     return [ recuse(x + 1, y), recuse(x - 1, y), recuse(x, y + 1), recuse(x, y - 1), ].some(Boolean);
  • Para comenzar la recursividad, llame a la función para todos los elementos superiores en el índice 0 en la matriz de entrada.

Hay una serie de cosas que tienes que hacer para armarlo, pero es un algoritmo bastante simple.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda