¿Cómo mejorar tu lógica de programación y no llorar en el intento?😭

Desarrollo

Consejos de cómo mejorar nuestra lógica, pero también cómo enfrentarnos a esos problemas teniendo en cuenta otros aspectos.


Introducción

Muchos programadores, y me incluyo, hemos sufrido alguna vez intentando resolver un problema. A veces sentimos mucha frustración cuando estamos estancados en algo y no encontramos solución. En ese momento de frustración, debemos respirar y dividir el problema en pequeñas soluciones.

Una vez alguien me dijo: “Debemos tomar ese problema grande y dividirlo en pequeños fragmentos, y poco a poco ir resolviendo cada pequeño fragmento que te hará resolver ese rompecabezas.”

Ahora bien, ¿cómo podemos mejorar nuestra lógica a la hora de resolver un problema? Quizá la respuesta sea un poco obvia, como: “Necesitas practicar ejercicios” o “Mejoras en programación, programando” y es completamente cierto. No puedes mejorar en algo que no practicas. Pero antes de caer en la frustración de no poder resolver un primer ejercicio, déjame darte unos pequeños consejos:

Ahora vamos a poner en práctica nuestra lógica🚀


Ejercicio para practicar👨🏻💻

Ahora tenemos el siguiente ejercicio, mejor conocido como Two Sum. Es el problema de las dos sumas que consiste en encontrar dos números en una matriz que sumen un número objetivo dado. Cabe destacar que este ejercicio puede ser más complejo de lo que parece si empezamos a cuestionar o imaginar otros casos. Usaremos dos métodos distintos para resolverlo.

Problema: Dado un array de enteros, devuelve los índices de los dos números que suman un objetivo dado.

-- Ejemplos Inputs y Outputs --

// Ejemplo 1:

Input: nums = [6, 2, 3]; target = 8
Output: [0, 1]

// Ejemplo 2:

Input: nums = [3, 2, 4]; target = 6
Output: [1, 2]

// Ejemplo 3:

Input: nums = [5, 7, 5]; target = 10
Output: [0, 2]

Necesitamos encontrar la combinación de que la suma de dos números dé el target deseado. Entonces, ¿qué podemos hacer?🤔 Pues aquí es donde entra uno de los consejos, antes de codear, dividir el problema en fragmentos.

Comprender el problema

Definir los casos de prueba del ejercicio

// Input: nums = [6, 2, 3]; target = 8

// Output: [0, 1] (Porque nums[0] + nums[1] es 6 + 2, que es igual a 8)

Pero, ¿qué sucede si no hay dos números que sumen el objetivo?🤔

Plantear una estrategia


Método a:

function twoSum(nums, target) {
  // 1. Iterar sobre los pares de números posibles
  for (let i = 0; i < nums.length; i++) {
    // j está siempre por delante de i para no revaluar sumas ya evaluadas
    for (let j = i + 1; j < nums.length; j++) {
      // 2. Comprobar si un par dado coincide con nuestro target
      if (nums[i] + nums[j] == target) {
        // Devuelve los indices cuando se ha encontrado un par
        return [i, j]
      }
    }
  }
  return 'No se ha encontrado ninguna combinación que sume el target'
}
Ejercicio Two Sum - Método a

Método b:

function twoSum(nums, target) {
  // Creamos un objecto (diccionario) para almacenar los números vistos y sus indices
  const seen = {}
  // Iteramos a través del array nums
  for (let i = 0; i < nums.length; i++) {
    // Guardamos el número actual en una variable
    const currentNum = nums[i]

    // Calculamos el componente que, junto con currentNum, suma target
    const complement = target - currentNum

    // Verificamos si el componente ya esta en el objeto seen
    if (seen[complement] !== undefined) {
      // Si está, devolvemos los indices del complemento y del número actual
      return [seen[complement], i]
    }
    // Si el complemento no está, guardamos el número actual y su indice en seen
    seen[currentNum] = i
  }
}

Et voilà. El ejercicio está resuelto🤯


En conclusión, debemos practicar para mejorar, pero siempre teniendo en cuenta que necesitas saber antes de resolver un ejercicio. Como dije, la programación no es fácil, pero terminar el día sabiendo que llegaste al resultado esperado es lo que hace que la programación sea maravillosa.

Siempre ten en cuenta que:

La grandeza nace de los pequeños comienzos. - Francis Drake

Victor Quiñones

Victor Quiñones

Frontend Developer

Especializado en crear interfaces web eficientes, intuitivas y escalables, he descubierto la importancia y el poder transformador de la tecnología en nuestra vida cotidiana.