Coûts des ressources du réseau électrique
introduction
Dans le jeu de société Power Grid , une partie intégrante du jeu consiste à acheter des ressources pour alimenter vos centrales électriques. Il existe quatre types de ressources utilisées dans le jeu (cinq, si vous incluez des énergies renouvelables, mais vous ne pouvez évidemment pas acheter de ressources pour cela). Ce sont le charbon, le pétrole, les déchets et l'uranium. Le marché des ressources ressemble à ceci:
1---- | 2---- | 3---- | 4---- | 5---- | 6---- | 7---- | 8---- | 10 | 12
CCC | CCC | CCC | CCC | CCC | CCC | CCC | CCC | U | U
OOO U | OOO U | OOO U | OOO U | OOO U | OOO U | OOO U | OOO U | 14 | 16
GGG | GGG | GGG | GGG | GGG | GGG | GGG | GGG | U | U
Lorsque les ressources sont achetées, elles sont prises à gauche du marché, où elles sont les moins chères. Lorsque de nouvelles ressources sont ajoutées au marché, elles sont ajoutées par la droite. Comme on peut le voir, cela produit un équilibre entre l'offre et la demande - si plus de ressources d'un type particulier sont achetées que réapprovisionnées à chaque tour, le prix de cette ressource augmentera. De même, si c'est moins, le coût diminuera.
Le charbon, le pétrole et les déchets augmentent tous au même rythme, tandis que l'uranium évolue beaucoup plus rapidement. Une seule unité d'une ressource non uranifère coûte 8 - floor((<units available> - 1) / 3)
. Une seule unité d'Uranium coûte 13 - <units available>
s'il y a 5 unités ou plus disponibles, et 18 - (2 * <units available>)
autrement.
Par exemple, au début du jeu, les 24 unités de charbon sont disponibles à l'achat. Si le premier joueur souhaite acheter 4 unités de charbon, les trois premières unités coûteront 1 chacune, et la 4ème en coûtera 2, ce qui rend le coût total 5. Cela laisse 20 unités disponibles. Si le deuxième joueur souhaite également acheter 4 unités de charbon, le coût serait (2 * 2 + 2 * 3) = 10.
Le défi
Votre défi consiste à écrire un programme ou une fonction qui calcule le coût d'achat d'une quantité donnée d'une ressource particulière, en supposant qu'une quantité donnée de cette ressource soit présente sur le marché.
Votre soumission doit accepter, dans n'importe quel format d'entrée raisonnable et dans n'importe quel ordre, les paramètres suivants:
- Type de ressource - garanti comme étant l'un des [C, O, G, U].
- La quantité de cette ressource qui est présente sur le marché - garantie d'être un entier non négatif. Si le type de ressource n'est pas U, il ne sera pas supérieur à 24. Si le type de ressource est U, il ne sera pas supérieur à 12.
- Le montant de cette ressource qu'un joueur voudrait acheter - garanti d'être un entier non négatif qui est inférieur ou égal au montant déjà présent sur le marché.
Le résultat devrait être le coût des ressources demandées.
Règles supplémentaires
- Les formules données sont à titre indicatif seulement, n'hésitez pas à utiliser n'importe quelle méthode de calcul des coûts que vous aimez.
- Les codes alphabétiques des différents types de ressources (C, O, G, U) peuvent être remplacés par leurs équivalents minuscules. Vous pouvez également remplacer les lettres pour les chiffres, sous la forme
C=0, O=1, G=2, U=3
ouC=1, O=2, G=3, U=4
. - Il s'agit de code-golf , donc la plus petite soumission en octets sera gagnante.
- Si votre soumission nécessite la saisie dans un ordre ou un format différent de celui spécifié dans la section précédente, vous devez fournir des détails.
Cas de test
Format du scénario de test:
resource type, amount in market, amount to buy
> result
Cas de test:
C, 24, 4
> 5
C, 20, 4
> 10
O, 3, 3
> 24
U, 1, 1
> 16
C, 1, 1
> 8
G, 0, 0
> 0
O, 10, 7
> 44
U, 12, 4
> 10
G, 11, 4
> 22
f("O",1,5)
?f(G, 11, 4) = 22
etf(O, 10, 7) = 44
.Réponses:
Javascript (ES6),
7159 octetsPrend
type
,market_amount
etbuy_amount
comme arguments.type
est un entier compris entre 0 et 3.Démo
Afficher l'extrait de code
la source
Python 3,
7169 octetsMerci à @xnor pour -2 octets
Une fonction qui prend une entrée via un argument du type de ressource indexé zéro
r
, le montant disponiblea
et le montant à acheterb
, et renvoie le coût.Cela fait usage du fait que
True
etFalse
équivalent à1
et0
en Python, permettant l'utilisation d'expressions booléennes pour indexer dans des listes.Comment ça fonctionne
Essayez-le sur Ideone
la source
max(18-2*a,13-a)
à la place de[18-2*a,13-a][a>4]
.Befunge, 142 octets
Essayez-le ici!Prend l'entrée comme 3 entiers, où le type de ressource est 0,1,2,3. La sortie est un entier.
Aucune idée si cela peut être mieux joué au golf. Il n'y a pas beaucoup d'espace, mais les nouvelles lignes font probablement mal.
la source
Python 2.7, 85 octets:
Basé sur la réponse de R. Kap, mais vous pouvez raser un octet jusqu'à 85 en supprimant la division supplémentaire / pour le plancher. Parce que ce sont tous des entiers, il est automatiquement réduit à un nombre entier.
la source
Python 2.7, 86 octets:
Prend l'entrée par un tableau au format
[resource type, units available, units to purchase]
. La sortie est un entier. Va essayer de jouer au golf avec le temps.Essayez-le en ligne! (Ideone)
la source
Lua,
107101 octetsFonction récursive qui doit être appelée avec
f(resource,stock,buy)
. ressource doit être un nombre compris entre 0 et 3. La sortie se fait via la valeur retournée.Merci LeakyNun de m'avoir sauvé 6 octets:
(25-y+(y-1)%3)/3
est plus court que8-math.floor((y-1)/3)
5 octets et me permet de gagner un octet de plus en raison de son placement.Non golfé
Vous pouvez tester ce code en ligne en copiant-collant l'extrait de code suivant.
la source
6and
ne fonctionnera pas car6a
est une valeur hexadécimale, mais6an
ne l'est pas.8-math.floor((y-1)/3)
est vraiment(25-y+(y-1)%3)/3