Algunos apuntes con códigos y breves descripciones de Java, Swift, PHP o SQL

HackerRank con Swift: 2D Array – DS

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:

HackerRank 2D Array – DS instruction

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).

2D Array DS planteamiento

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

Categorias: Swift
Tags: , ,
Link: .