Introducción y crédito
Asume que eres un barman. Tienes muchas personas felices en tu bar la mayoría de las veces, pero muchas solo beben la misma bebida y muy pocas para tu gusto y quieres cambiar eso. Entonces, introduce un sistema en el que el precio de una bebida es variable, dependiendo de cuántos ya se hayan vendido, pero nunca más o menos costoso que ciertos umbrales. Por alguna extraña razón, siempre se olvida de realizar un seguimiento adecuado de todas las bebidas y precios vendidos y, por lo tanto, debe pensar en un código breve (¡= memorable!) Que haga los cálculos matemáticos por la cantidad de bebidas consumidas.
Este desafío ya apareció en el examen de mitad de período en 2012 en el curso de programación funcional en mi universidad y tengo la autorización de mi profesor para publicarlo aquí. Se nos ha proporcionado una solución de ejemplo en el idioma del examen.
Entrada
Su entrada será una lista de cadenas que no contienen espacios: estos son los nombres de las bebidas vendidas. Tome la entrada usando su método de entrada preferido, generalmente aceptado.
Salida
Su producción será un solo número: este es el ingreso que ha generado esta noche. Dé la salida utilizando su método de salida preferido, generalmente aceptado.
¿Qué hacer?
Esto aplica para cada bebida individualmente:
- El precio inicial es 10.
- Cada vez que se compra la bebida, su precio aumenta en 1 para el próximo comprador.
- El precio máximo es 50. Si la bebida se ha comprado por 50, el nuevo precio será 10 nuevamente.
Su tarea es encontrar el ingreso general, generado por la lista de entrada de bebidas dadas las reglas anteriores.
En caso de que se pregunte: "¡50 dólares es realmente caro para una bebida!", Esto es 50 dólares deci, por lo que 50 * 0.1 * Unidad, pero he optado por 10-50 para no excluir idiomas sin aritmética de coma flotante.
¿Quién gana?
Este es el código de golf , por lo que gana el código más corto en bytes. Aplican reglas estándar.
Casos de esquina potenciales
Si la lista de entrada está vacía, la salida será 0.
No se puede suponer que la lista de entrada está ordenada por bebida.
Ejemplos
[] -> 0
["A"] -> 10
["A","B"] -> 20
["A","A","B"] -> 31
["A","B","A"] -> 31
["A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A"] -> 1240
["A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","B","B","B","C","C","D"] -> 1304
["D","A","A","C","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","B","B","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","B","C"] -> 1304
["A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","B","B","B","C","C","D","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A"] -> 1304