Resolución de problemas de programación

Los problemas de programación no son muy diferentes de los problemas de matemáticas o física. Por lo general, hay una entrada y una salida a las que alguien debe llegar proporcionando un algoritmo. Este algoritmo suele ser una función o una serie de funciones.

Los acertijos de programación y los problemas con juguetes son buenos ejercicios para mejorar las habilidades y prepararse para las entrevistas técnicas. No es de extrañar que cada vez más escuelas de codificación en línea (p. ej., CodeAcademy) hagan de esos entrenamientos metálicos el principal elemento básico de sus cursos.

Los programadores principiantes pueden beneficiarse aplicando estos pasos a su proceso de resolución de un problema de programación:

  1. Buscar la entrada
  2. Buscar la salida
  3. Invente algún algoritmo lógico para transformar entrada a salida en inglés sencillo, también conocido como pseudocódigo
  4. Traducir pseudocódigo a lenguaje de programación, por ejemplo, JavaScript
  5. Ejecute el código mentalmente (en caso de un ejercicio de pizarra) o en una máquina
  6. Compare la salida actual con la salida esperada, si no son iguales, enjuague y repita desde el paso 3

Aquí hay un ejemplo del repositorio de Blake Embery:

Al aplicar los pasos mencionados anteriormente, podemos generar este pseudocódigo:

  1. Obtener el número
  2. Divídalo por 10, si el resultado es más de 1, el número es mayor que 10
  3. Incrementar el contador (ahora sabemos que tenemos al menos uno si el resultado es mayor que 1)
  4. Repita la división con el resultado como un nuevo número hasta que el nuevo resultado sea menor que 1
  5. Salir devolviendo el valor del contador

Ahora, traduzcamos esto a código JavaScript/Node.js:

var num = function (n) {
  var i = 1; 
  while ((n/10)>=1) {
    n=n/10;
    i++
  } 
  return i;
}

Para probar las funciones, puede simplemente ejecutar:

num (1000);
num (100);
num (10);
num (1);

Resolviendo Problemas de Programación

var num = function (n) {
  // There is an extra check here to ensure the number is an integer
  return ('' + (n|0)).length;
};

En ambos casos el problema está solucionado, pero cómo se soluciona diferencian a un buen programador de uno genial (saber API es un plus).