Introduction et crédit
Supposons que vous êtes barman. La plupart du temps, vous avez beaucoup de gens heureux dans votre bar, mais beaucoup ne boivent que la même boisson et trop peu à votre goût et vous voulez changer cela. Vous introduisez donc un système où le prix d'une boisson est variable, selon le nombre déjà vendu, mais jamais plus ou moins cher que certains seuils. Pour une raison étrange, vous oubliez toujours de suivre correctement toutes les boissons et les prix vendus et vous devez donc penser à un court (= mémorable!) Morceau de code qui fait le calcul pour vous compte tenu de la quantité de boissons consommées.
Ce défi est déjà apparu à l'examen de mi-session en 2012 lors du cours de programmation fonctionnelle de mon université et j'ai l'autorisation de mon professeur de le poster ici. On nous a fourni un exemple de solution dans la langue de l'examen.
Contribution
Votre entrée sera une liste de chaînes qui ne contiennent pas d'espaces - ce sont les noms des boissons vendues. Prenez la saisie en utilisant votre méthode de saisie préférée et généralement acceptée.
Production
Votre sortie sera un numéro unique - c'est le revenu que vous avez généré ce soir. Donnez la sortie en utilisant votre méthode de sortie préférée et généralement acceptée.
Que faire?
Cela s'applique à chaque boisson individuellement:
- Le prix de départ est de 10.
- Chaque fois que la boisson est achetée, son prix est augmenté de 1 pour le prochain acheteur.
- Le prix maximal est de 50. Si la boisson a été achetée pour 50, le nouveau prix sera à nouveau de 10.
Votre tâche consiste à trouver le revenu global, généré par la liste d'entrée des boissons compte tenu des règles ci-dessus.
Dans le cas où vous vous demandez: "50 dollars, c'est vraiment sacrément cher pour un verre!", Il s'agit de 50 décis, donc 50 * 0,1 * unité, mais j'ai opté pour 10-50 pour ne pas exclure les langues sans arithmétique à virgule flottante.
Qui gagne?
C'est du code-golf , donc le code le plus court en octets gagne! Des règles standard s'appliquent.
Cas d'angle potentiels
Si la liste d'entrée est vide, la sortie doit être 0.
La liste d'entrée ne peut pas être supposée être triée par boisson.
Exemples
[] -> 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