Challenge 1 – Pizza Love

Planteamiento

El primer desafío de esta edición del Tuenti Challenge fue bastante sencillo, pero sirvió para ver cómo iban a ser, en mayor o menor medida, el resto de los challenges. El desafío consistía en encontrar el mínimo número de pizzas para satisfacer a una serie de comensales. El hambre de dichos comensales venía indicada por el número de porciones de pizza que se iban a comer y cada pizza contenía 8 porciones.

El fichero de entrada contenía un número de casos en los que había que resolver el problema descrito anteriormente. El formato de la entrada era el siguiente:

3
3
8 8 8
2
5 3
4
3 4 5 6
  • 1ª fila: número de casos a resolver (3 en el ejemplo)
  • Para cada caso:
    • 1ª fila: número de comensales (3 en el primer caso, 2 en el segundo…)
    • 2ª fila: porciones de pizza deseadas por cada comensal (8, 8 y 8 en el primer caso)

Para cada caso había que dar una salida indicando el número de caso y el número de pizzas necesarias siguiendo el formato siguiente:

Case #1: 3
Case #2: 1
Case #3: 3

Solución

Como cada pizza se divide en 8 porciones, la resolución de este primer desafío consistía en sumar todas las porciones de cada caso y dividir el resultado de dicha suma entre 8. Luego, usando alguna función similar a math.ceil de The Python Standard Library, nos quedaríamos con el entero superior más próximo al resultado de la anterior división. La representación de esta solución sería la siguiente:

formulatuenti1

siendo el número de comensales en cada caso y hunger el número de porciones de pizza desadas por cada comensal.

Resumen de la implementación

El núcleo de la implementación, omitiendo la mayoría de operaciones con ficheros, es el siguiente.

cases = int(infile.readfile())

for case in range(cases):
    next(infile)
    hunger = list(map(int, (infile.readline().split())))
    slices = sum(hunger)
    pizzas = math.ceil(slices / 8)

Para cada caso, se salta la primera línea correspondiente al número de comensales (dato innecesario) mediante la función next(). En la variable hunger se almacenará una lista con el número de porciones deseadas por cada comensal. Se tiene que mapear a enteros debido a que la lectura devuelve caracteres. En la variable slices se guarda la suma de estas porciones y el resultado se halla dividiendo esta suma entre 8, el número de porciones por pizza. Para asegurar que cada comensal se sacia, el resultado se aproxima al siguiente entero superior y se guarda en la variable pizzas.

Puedes consultar la implementación completa en Python de este desafío en GitHub y el resumen de mis impresiones de esta edición en esta entrada del blog.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s