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
Réponses:
JavaScript (ES6), 50 octets
la source
d[x]
à 10?d[x]
n'a pas été défini, c'estundefined
; cela rendd[x]<50
return false, doncd[x]=d[x]<50?d[x]+1:10
définitd[x]
à10
.undefined
. :)Python 2,
79745448 octetsAugmentation massive du nombre d'octets en repensant le problème.
Je voudrais me débarrasser du. Faire usage deint
casting mais mon cerveau ne fonctionne pasl.pop()
pour éviter de rogner la liste deux fois et une bonne vieille récursion lambda :)merci à Jonathan Allan pour avoir économisé 6 octets :)
Mon ancienne version de 54 octets dont j'étais assez fier :)
la source
...l>[]and 1*~...
pour enregistrer ces 3 octets que vous saviez pouvoir.f=lambda l:l and~-l.count(l[0])%41+10+f(l[1:])or 0
f=lambda l:l and l.count(l.pop())%41+10+f(l)or 0
Pyth, 15 octets
Un programme qui prend l'entrée d'une liste et imprime le résultat.
Suite de tests (première ligne pour permettre plusieurs entrées)
Comment ça fonctionne
la source
Gelée ,
14 1110 octetsTryItOnline!
Comment?
la source
05AB1E ,
1615 octetsMerci à Emigna d' avoir enregistré un octet!
Utilise l' encodage CP-1252 . Essayez-le en ligne!
la source
ÎÙv¹y¢L<41%T+OO
devrait fonctionner pour 1 octet enregistréPerl 41 octets
Comprend +1 pour
-p
Prend des informations sur les nouvelles lignes.
Incrémente une valeur de hachage de:
10
si c'estundef
,-40
si c'est-à-> 49
dire50
, ou1
autrement. Ceci est ensuite ajouté au$\
séparateur de sortie, que les-p
impressions.Exemple:
la source
05AB1E , 13 octets
Explication
["A","B","A"]
utilisé comme exemple.la source
C ++ 14, 105 octets
En tant que lambda générique sans nom retournant via le paramètre de référence. Nécessite une entrée pour être un conteneur
string
qui apush_back
, commevector<string>
.Utiliser l'
%41+10
astuce de la réponse Python de Kade .Crée un conteneur vide
P
en mémoire de ce qui a déjà été servi. Le prix est calculé en comptant lex
dansP
.Non golfé et utilisation:
la source
Mathematica, 64 octets
On dirait que ça devrait être plus court.
Length/@Gather@#
compte les répétitions de chaque boisson.//.z_/;z>41:>Sequence[41,z-41]
divise tout entierz
supérieur à 41 en41
etz-41
, pour refléter la baisse des prix. Ensuite, chacun des décomptes est branché à la formule(19+#)#/2
, qui est le coût total des#
boissons tant qu'il#
ne dépasse pas 41. Enfin,Tr
résume ces coûts.la source
k, 22 octets
L'argument peut être n'importe quelle liste - chaînes, chiffres, etc.
La
q
traduction est plus facile à lire:la source
C #, 193 octets + 33
33 octets supplémentaires pour
using System.Collections.Generic;
Je suis sûr que cela peut être ignoré, les dictionnaires ne sont certainement pas la meilleure façon de le faire et je pourrais probablement travailler un ternaire dans mon if. A part ça, je pense que ça va!
Exemples:
Non golfé
la source
Clojure, 79 octets
Compte les fréquences des boissons, puis calcule le prix de base comme
10 + (i % 41)
.mapcat
les concatène etapply +
calcule la somme.la source
PHP, 47 octets
prend l'entrée des arguments de la ligne de commande; courir avec
-r
.la source