Stromnetzressourcenkosten
Einführung
Im Brettspiel Power Grid ist es ein wesentlicher Bestandteil des Spiels, Ressourcen zu kaufen, um Kraftwerke zu tanken. Es gibt vier Arten von Ressourcen, die im Spiel verwendet werden (fünf, wenn Sie erneuerbare Energien einbeziehen, aber dafür können Sie offensichtlich keine Ressourcen kaufen). Dies sind Kohle, Öl, Müll und Uran. Der Ressourcenmarkt sieht folgendermaßen aus:
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
Wenn Rohstoffe gekauft werden, werden sie von der linken Seite des Marktes genommen, wo sie am billigsten sind. Wenn neue Ressourcen zum Markt hinzugefügt werden, werden sie von rechts hinzugefügt. Wie zu sehen ist, führt dies zu einem Gleichgewicht zwischen Angebot und Nachfrage. Wenn in jeder Runde mehr Ressourcen eines bestimmten Typs gekauft als nachgefüllt werden, steigt der Preis für diese Ressource. In ähnlicher Weise verringern sich die Kosten, wenn sie geringer sind.
Kohle, Öl und Müll verteuern sich gleichermaßen, während Uran viel schneller anwächst. Eine einzelne Einheit einer Nicht-Uran-Ressource kostet 8 - floor((<units available> - 1) / 3)
. Eine einzelne Einheit Uran kostet, 13 - <units available>
wenn 5 oder mehr Einheiten verfügbar sind, und 18 - (2 * <units available>)
ansonsten.
Zum Beispiel stehen zu Beginn des Spiels alle 24 Einheiten Kohle zum Kauf zur Verfügung. Wenn der erste Spieler 4 Einheiten Kohle kaufen möchte, kosten die ersten drei Einheiten jeweils 1 und die vierte 2, sodass die Gesamtkosten 5 betragen. Dadurch bleiben 20 Einheiten verfügbar. Wenn der zweite Spieler auch 4 Einheiten Kohle kaufen möchte, sind die Kosten (2 * 2 + 2 * 3) = 10.
Die Herausforderung
Ihre Herausforderung besteht darin, ein Programm oder eine Funktion zu schreiben, die die Kosten für den Kauf einer bestimmten Menge einer bestimmten Ressource berechnet, vorausgesetzt, dass eine bestimmte Menge dieser Ressource auf dem Markt vorhanden ist.
Ihre Einreichung sollte in jedem vernünftigen Eingabeformat und in beliebiger Reihenfolge die folgenden Parameter akzeptieren:
- Der Ressourcentyp - garantiert einer von [C, O, G, U].
- Die Menge dieser Ressource, die auf dem Markt vorhanden ist - garantiert eine nicht negative ganze Zahl. Wenn der Ressourcentyp nicht U ist, ist er nicht größer als 24. Wenn der Ressourcentyp U ist, ist er nicht größer als 12.
- Die Menge dieser Ressource, die ein Spieler kaufen möchte - garantiert eine nicht negative ganze Zahl, die kleiner oder gleich der Menge ist, die bereits auf dem Markt vorhanden ist.
Die Ausgabe sollte die Kosten der angeforderten Ressourcen sein.
Zusätzliche Regeln
- Die angegebenen Formeln dienen nur zur Veranschaulichung. Sie können jede Methode zur Berechnung der von Ihnen gewünschten Kosten verwenden.
- Die Buchstabencodes für die verschiedenen Ressourcentypen (C, O, G, U) können durch ihre Kleinbuchstaben ersetzt werden. Sie können die Buchstaben auch durch Zahlen ersetzen, entweder in der Form
C=0, O=1, G=2, U=3
oderC=1, O=2, G=3, U=4
. - Das ist Code-Golf , also gewinnt die kleinste Einsendung in Bytes.
- Wenn für Ihre Übermittlung die Eingabe in einer anderen Reihenfolge oder einem anderen Format als im vorherigen Abschnitt angegeben erforderlich ist, sollten Sie Details angeben.
Testfälle
Testfallformat:
resource type, amount in market, amount to buy
> result
Testfälle:
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
undf(O, 10, 7) = 44
.Antworten:
Javascript (ES6),
71-59BytesNimmt
type
,market_amount
undbuy_amount
als Argumente.type
ist eine ganze Zahl zwischen 0 und 3.Demo
Code-Snippet anzeigen
quelle
Python 3,
7169 BytesVielen Dank an @xnor für -2 Bytes
Eine Funktion, die Eingaben über Argumente des Ressourcentyps "Null"
r
, des verfügbaren Betragsa
und des zu kaufenden Betrags akzeptiertb
und die Kosten zurückgibt.Dies nutzt die Tatsache, dass
True
undFalse
gleichbedeutend mit1
und0
in Python ist, und ermöglicht die Verwendung von Booleschen Ausdrücken, um Listen zu indizieren.Wie es funktioniert
Probieren Sie es auf Ideone
quelle
max(18-2*a,13-a)
anstelle von tun[18-2*a,13-a][a>4]
.Befunge, 142 Bytes
Probieren Sie es hier aus! Nimmt Eingaben als 3 Ganzzahlen an, wobei der Ressourcentyp 0,1,2,3 ist. Die Ausgabe ist eine Ganzzahl.
Keine Ahnung, ob dies besser golfen werden kann. Es gibt nicht so viel Leerzeichen, aber die Zeilenumbrüche schmerzen wahrscheinlich.
quelle
Python 2.7, 85 Bytes:
Basierend auf der Antwort von R. Kap, aber Sie können ein Byte auf 85 reduzieren, indem Sie die Unterteilung extra / for floor entfernen. Da dies alles ganze Zahlen sind, wird automatisch eine ganze Zahl angegeben.
quelle
Python 2.7, 86 Bytes:
Übernimmt die Eingabe eines Arrays im Format
[resource type, units available, units to purchase]
. Die Ausgabe ist eine Ganzzahl. Wird versuchen, im Laufe der Zeit mehr Golf zu spielen.Probieren Sie es online! (Ideone)
quelle
Lua,
107101 BytesRekursive Funktion, mit der aufgerufen werden muss
f(resource,stock,buy)
. resource muss eine Zahl zwischen 0 und 3 sein. Die Ausgabe erfolgt über den zurückgegebenen Wert.Vielen Dank an LeakyNun, dass er mir 6 Bytes gespart hat:
(25-y+(y-1)%3)/3
ist kürzer als8-math.floor((y-1)/3)
5 Bytes und erlaubt mir, aufgrund seiner Platzierung ein weiteres Byte zu gewinnen.Ungolfed
Sie können diesen Code online testen, indem Sie das folgende Snippet kopieren und einfügen .
quelle
6and
nicht, da6a
es sich um einen Hex-Wert handelt, dies jedoch6an
nicht.8-math.floor((y-1)/3)
ist wirklich(25-y+(y-1)%3)/3