En el siguiente artículo se buscará desarrollar con lenguaje de programación swift el problema planteado en la pagina HackerRank.
El ejercicio en cuestion se llama “2D Array – DS” y se encuentra en Practice >> Interview Preparation Kit >> Arrays (enlace). El problema esta catalogado como fácil.
Como es costumbre, y antes de comenzar, el contexto del desarrollo y ejemplo es:
Sistema Operativo: macOS Catalina
Xcode 11.6
Lenguaje Swift
Continuando con el problema, la descripcion de este es:

Lo requerido, y las condiciones son:

Desarrollo
Lo mas recomendable es tomar una hoja de papel y un lapiz, luego empezar a plantear el problema y desarrollar una solucion.
En este caso, se dibujó la matriz 6×6 y luego el comportamiento deseado. Este deseo es el “reloj de arena”, el cual fue dibujado por cada ciclo (en realidad solo 3).

Con esto se identifica el patron, es decir para el ciclo 1 sumar:
variable Suma = [Fila 1][Columna 1] + [Fila 1][Columna 2] + [Fila 1][Columna 3]
+ [Fila 2][Columna 2]
+ [Fila 3][Columna 1] + [Fila 3][Columna 2] + [Fila 3][Columna 3]
Luego, añadir estas sumas a un arreglo, considerar el largo del ciclo (total – 2) y finalmente identificar el valor máximo.
El codigo resultante es el siguiente:
func hourglassSum(arr: [[Int]]) -> Int {
var suma = 0
var sumaTemp = 0
var arrValores:[Int] = []
for r in 0 ..< (arr.count-2) {
for c in 0..<(arr[r].count-2) {
sumaTemp = arr[r][c] + arr[r][c+1] + arr[r][c+2]
sumaTemp += arr[r+1][c+1]
sumaTemp += arr[r+2][c] + arr[r+2][c+1] + arr[r+2][c+2]
print(sumaTemp)
if sumaTemp > suma {
suma = sumaTemp
}
arrValores.append(sumaTemp)
//print(String(r) + ":" + String(c))
}
}
print(String(suma))
return arrValores.max()!
}
Conclusión
Esta pagina contiene muchos problemas o desafíos para estar un buen rato pensando. Es incluso necesario de vez en cuando ejercitar el cerebro.
En si este problema es simple, pero a la vez esa simplicidad puede ser el enemigo al tratar de elaborar un algoritmo muy desarrollado. Espero seguir subiendo otros problemas que tiene esta pagina, ya que estuve con algunos un buen rato.
Acerca del autor Nestor Cortes
Informático en aprendizaje constante, y siempre practicando la versatilidad en el mundo real. Experiencia en minería ,banca, y servicios tecnológicos. Desarrollo Java, Swift y PHP principalmente
- Web |
- More Posts(13)