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:
siendo n 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.