Cinco problemas para menos de 1 hora

Publicado en

Como parte de la revisión editorial que estamos haciendo en Software Guru, hemos decidido abrir una nueva sección dedicada a algoritmia y programación. Conforme buscaba contenido para esta sección, me recomendaron un artículo del blog de Santiago L. Valderrama [1] donde comenta que le sorprende que una gran cantidad de personas que hoy en día aplican para posiciones de ingeniero de software, en realidad no saben programar. En sus palabras:

Imagino que es aceptable aplicar para una posición de desarrollador web si solo sabes   JQuery, pero ¿desde cuando “ingeniero de software” significa que basta con saber HTML, Javascript y CSS?

Espero que quienes aplican a mi vacante de ingeniero de software, puedan realmente programar. Es decir, que reciban un problema y programen una solución utilizando cualquier lenguaje de programación que quieran.

Concuerdo con Santiago, y justamente es el espíritu de esta nueva sección en SG.

Para poder evaluar si alguien sabe programar o no, Santiago plantea un reto con 5 problemas, indicando que un verdadero “ingeniero de software” debería ser capaz de resolverlos en 1 hora.

Comparto a continuación los problemas que plantea Santiago, y los invito a que los resuelvan utilizando el lenguaje de programación de su preferencia.

  1. Escribe 3 funciones que calculen la suma de los números en una lista. En la primer función utiliza un ciclo for, en la segunda un while, y en la tercera recursividad.

  2. Escribe una función que combine dos listas alternando los elementos de cada una. Por ejemplo, si tenemos las listas [a, b, c] y [1, 2, 3] la función debería regresar [a, 1, b, 2, c, 3].

  3. Escribe una función que calcule la lista de los primeros 100 números Fibonacci. Por definición, los primeros números de la secuencia son 0 y 1, y cada número subsecuente es la suma de los dos anteriores.

  4. Escribe una función, que dada una lista de enteros no negativos, los organice de manera que forman el número más grande posible. Por ejemplo, dada la lista [ 50, 2, 1, 9] el resultado sería 95021.

  5. Usando los números del 1 al 9 en orden consecutivo, podemos realizar 3 operaciones entre cada dígito: suma, resta o concatenación, para que el resultado de las operaciones conjuntas de como resultado 100. Por ejemplo: 1+2+34-5+67-8+9=100. Entonces, escribe un programa que encuentre todas las posibilidades de realizar esto.

Los primeros 3 problemas son muy sencillos, el cuarto tiene un poco de jiribilla y el quinto sí es más complicado. Personalmente, creo que quien pueda resolver el quinto problema en menos de 1 hora, merece “puntos extra”, pero no descartaría a quienes no puedan hacerlo.

En las referencias de este artículo encontrarás enlaces a ejemplos de solución que Santiago sugiere para los problema 4 y 5. Antes de consultarlas, te invito a que intentes resolver los problemas por tí mismo y solo consultes la solución hasta que hayas terminado o te hayas rendido.

En futuras entregas de esta sección encontrarás artículos donde revisaremos problemas de programación y estrategias para resolverlos.

En el caso del problema 4 verifica que tu solución sea capaz de soportar el escenario en el que recibe una lista como [5, 50, 56]. El resultado correcto en este caso no es 56505 sino 56550. Así que vas a tener que hacer algo más que una simple comparación de strings.

Si resuelves estos problemas y quieres compartir tus soluciones, te invito a que lo hagas como comentarios a este artículo.

Referencias

  1. S. Valderrama. “Five Programming problems every Software Engineer should be able to solve in less than 1 hour”. http://swgu.ru/pu

  2. S. Valderrama. “Solution to problem 4”. http://swgu.ru/pv

  3. S. Valderrama. “Solution to problem 5”. http://swgu.ru/pw

Bio

Pedro Galván es cofundador y director editorial de Software Guru.