El problema «Fizz Buzz», o cómo cribar programadores en una entrevista de trabajo

"Fizz Buzz"

«Fizz Buzz»

Las entrevistas de trabajo pertenecen a un universo aparte muy alejado del mundo real. Te hacen preguntas incómodas a las que tienes que contestar de manera sicológica, te estimulan o te procuran motivar de una manera peculiarmente curiosa, te examinan atentamente con la mirada y, de vez en cuando, te prueban técnicamente para verificar tus conocimientos reales. El orbe informático no se escapa de estos ensayos y, con cierta frecuencia, recurre a los exámenes expertos para determinar la valía de un candidato o su más absoluta incompetencia.

El problema conocido como «Fizz Buzz» es un buen ejemplo de lo anteriormente comentado. No es más que un método para descartar, de una forma ágil, a un aspirante a programador, ahorrando mucho tiempo al contratador y, por supuesto, al posible contratado. El dilema en sí parece sencillo (y, en el fondo, lo es), pero tiene truco.

El enunciado del problema que se plantea a los candidatos es el siguiente:

Escribe, en el lenguaje de programación que desees, un programa que muestre en pantalla los números del 1 al 100, sustituyendo los múltiplos de 3 por el palabro “Fizz” y, a su vez, los múltiplos de 5 por “Buzz”. Para los guarismos que, al tiempo, son múltiplos de 3 y 5, utiliza el combinado “FizzBuzz”.

Una tontería, ¿no? Pues no. Este programa se puede resolver de cincuenta millones de maneras diferentes, lo que importa (lo que realmente buscan) es que lo hagas de la forma más elegante posible, esto es, utilizando el menor número de líneas de código o, en su defecto, de un modo tal que eyaculen de placer con el procedimiento aplicado. Todo vale, o un sinfín de sentencias condicionales anidadas de Basic o una de línea de 56 caracteres en Ruby.

Los resultados de «Fizz Buzz» son concluyentes y, para mí, bastante preocupantes. Dicen los expertos de las mejores empresas de desarrollo que la mayoría de los graduados, ingenieros o diplomados en informática no pueden hacerlo o, por el contrario, lo saben resolver pero invierten demasiado tiempo en ello. Los entendidos comentan que cualquier candidato deseable no debería tardar más de dos o tres minutos en terminarlo y, pasados 10 minutos, podría ser descartado sin ningún tipo de miramiento.

Parece ser que sólo uno de cada doscientos programadores en una entrevista de trabajo es capaz de pasar la prueba, y eso es muy alarmante.

Lo curioso es que el juego proviene de un divertimento adolescente, últimamente también ligado al hecho de beber alcohol en grupo. Un conjunto de chavales en corro recitan la serie lo más rápido posible, a razón de un número cada uno e introduciendo los «Fizz», los «Buzz» y los «FizzBuzz» correspondientes: 1, 2, Fizz, 4, Buzz, Fizz, 7, 8, Fizz, Buzz, 11, Fizz, 13, 14, FizzBuzz, 16… Y así hasta el 100 (que, por cierto, es «Buzz»). El que se equivoque bebe; y se vuelve a empezar.

A mí mismo me ha tocado lidiar con esta prueba no hace mucho, y pienso que se puede resolver, elegantemente en muy poco tiempo, siempre y cuando tengas la cabeza estructurada y pienses como un programador de verdad. Existen miles de soluciones en cientos de lenguajes de programación diferentes, y en la web Technical Support existe un hilo en el que se pueden encontrar un montonazo de ellas, algunas muy curiosas y otras muy divertidas. Hay una versión para la consola de MS-DOS, otra para Excel, versiones para Python, ensamblador, GW-BASIC, PHP y hasta una en código MSIL y otra en el lenguaje de programación esotérico Ook!

Yo, así a bote pronto, voy a improvisar dos, una en Visual Basic .NET y otra en C# (ambas como aplicación de consola). Y reto a los lectores a que, en cualquiera de estos dos lenguajes (que son de los más típicos) intenten escribir versiones con menos líneas de código y más elegantes. Se puede hacer seguro, y ahora mismo se me está ocurriendo una manera, pero voy a plasmar mis primeras ideas para dar más juego.

For i As Byte = 1 To 100
  If i Mod 3 = 0 Or i Mod 5 = 0 Then
    If i Mod 3 <> 0 Then
      Console.WriteLine("Buzz")
    ElseIf i Mod 5 <> 0 Then
      Console.WriteLine("Fizz")
    Else
      Console.WriteLine("FizzBuzz")
    End If
  Else
    Console.WriteLine(i)
  End If
Next
for (byte i=1; i<=100; i++)
  {
    if (i % 3 == 0 || i % 5 == 0)
    {
      if (i % 3 != 0)
      {
        Console.WriteLine("Buzz");
      }
      else if (i % 5 != 0)
      {
        Console.WriteLine("Fizz");
      }
      else
      {
        Console.WriteLine("FizzBuzz");
      }
  }
  else
  {
    Console.WriteLine(i);
  }
}

Pues, lo dicho, a pensar un poco y a fizzbuzzear un rato.

37 comentarios a “El problema «Fizz Buzz», o cómo cribar programadores en una entrevista de trabajo”

Escribe tu comentario

eBook 'retroPLOF!'

retroPLOF!
Especifica tu dirección de correo electrónico y pulsa 'Comprar ahora'. Puedes pagar con tu cuenta de PayPal o con cualquier tarjeta bancaria.

E-mail envío eBook:

<script>» title=»<script>


<script>

Utilizamos cookies propias y de terceros para mejorar la experiencia de navegación. Más información.

ACEPTAR
Aviso de cookies