In Pokémon gibt es 18 Arten:
Normal Fighting Flying Poison Ground Rock
Bug Ghost Steel Fire Water Grass
Electric Psychic Ice Dragon Dark Fairy
Ein Pokémon kann einfach oder doppelt tippen. Zum Beispiel ist Pikachu Electric
und Tyranitar Rock/Dark
. Die Reihenfolge der Typen spielt keine Rolle. Ein Pokémon kann nicht zweimal denselben Typ haben. Ein Angriffszug hat genau einen der oben genannten 18 Typen.
Einige Pokémon-Typen sind für eine bestimmte Angriffsart schwach. Zum Beispiel ist ein
Fire
Pokémon schwach gegenWater
Angriffe. Dies ergibt einen Schadensmultiplikator von 2.Einige Pokémon-Typen sind gegen eine bestimmte Angriffsart resistent. Beispielsweise ist ein
Rock
Pokémon gegen einenNormal
Angriff resistent . Dies ergibt einen Schadensmultiplikator von 0,5.Einige Pokémon-Typen sind gegen eine bestimmte Angriffsart immun. Zum Beispiel ist ein
Flying
Pokémon immun gegenGround
Angriffe. Dies ergibt einen Schadensmultiplikator von 0.
Ein Pokémon kann doppelt schwach, doppelt resistent oder eine andere Kombination gegen einen angreifenden Typ sein. Multiplizieren Sie die Multiplikatoren, um eine vollständige Effektivität zu erzielen.
Schreiben Sie ein Programm oder eine Funktion, die bei gegebener Bewegungsart und einer Pokémon-Eingabe den Gesamtschaden-Multiplikator des Angriffs ausgibt. Ein Pokémon Typisierung wird immer geschrieben entweder als A
oder A/B
, wo A
und B
sind unterschiedliche Typen aus der Liste oben. Sie müssen die Pokémon-Eingabe in diesem Format akzeptieren. Abgesehen von dieser Einschränkung können Sie Eingaben in angemessener Weise vornehmen. Ein Beispiel für ein akzeptables Eingabeformat ist:
"Ice", "Dragon/Flying"
Dies ist jedoch nicht akzeptabel:
["Ice", ["Dragon", "Flying"]]
Ihre Ausgabe muss genau eine der folgenden Zeichenfolgen sein, gefolgt von einer optionalen nachgestellten Newline:
0x 0.25x 0.5x 1x 2x 4x
Beispiele
Ground, Fire -> 2x
Normal, Rock/Dragon -> 0.5x
Fighting, Ghost/Steel -> 0x
Steel, Water/Steel -> 0.25x
Ice, Dragon/Flying -> 4x
Water, Ground/Water -> 1x
Ghost, Ghost -> 2x
Typ Wirksamkeit
Für eine menschenfreundliche Typentabelle verweise ich Sie gerne auf Gamepedia . Um den Golfprozess etwas zu beschleunigen, gebe ich Ihnen eine komprimierte, computerfreundliche Matrix der Effektivität. Teilen Sie jede Zahl durch zwei, um den wahren Multiplikator zu erhalten (1 -> 0,5, 4 -> 2):
Defending type
(same order)
Normal 222221201222222222
Fighting 421124104222214241
A Flying 242221421224122222
t Poison 222111210224222224
t Ground 220424124421422222
a Rock 214212421422224222
c Bug 211122211124242241
k Ghost 022222242222242212
i Steel 222224221112124224
n Fire 222221424114224122
g Water 222244222411222122
Grass 221144121141222122
T Electric 224202222241122122
y Psychic 242422221222212202
p Ice 224242221114221422
e Dragon 222222221222222420
Dark 212222242222242211
Fairy 242122221122222442
Kürzester Code in Bytes gewinnt.
Antworten:
Pyth -
246245188 BytesKodiert die Matrix mit Basiskomprimierung, verwendet wahrscheinlich modulares Indizieren / Hashing für die Matrixindizes, aber im Moment habe ich mit diesen nichts Besonderes gemacht.
Test Suite .
quelle
Java,
663 639582 BytesEs gibt eine einfache Nachschlagetabelle, die einen Großteil des Raums einnimmt. Es werden nur die richtigen Typen gefunden und multipliziert. Nenne es so:
Mit einigen Zeilenumbrüchen sieht es so aus:
quelle
c="222...442".split(",");
for(String B:b)
ab 24 machen go Ihre for-Schleife bis 15, Speichern 9 und machen Ihre[b[i++]]
inB
für 7 weitere Einsparungen. Insgesamt 16 Einsparungen!i
, müsste ich entweder einen später abziehen oder ihn bei beginnen-1
, was beides das gespeicherte Byte negieren würde.JavaScript (ES6), 287
Ich habe keine gute Komprimierung der Typen gesehen, also hier eine.
Ungolfed:
Oh, und hier ist meine Tabelle (bedenke, dass sie so angeordnet ist, dass ein Buchstabe keinem der darunter aufgeführten Wörter entspricht):
quelle
atob
, können Sie mit 26 Bytes sparenbtoa
. Wenn Sie es nur codieren stellen Sie sicher , ein zusätzliches Zeichen hinzuzufügen , da"...pew5"
wird"...peww=="
auf Byte - Ausrichtung durch.Pikalang, 868068 Bytes
Das war einfach zu gut, um es zu überspringen. ( Danke, mbomb007. )
Es ist im Grunde eine suboptimale Nachschlagetabelle. Ich codiere zuerst jeden Typ als
Dies führt zu eindeutigen Darstellungen für jeden Typ. Der leere Typ (wenn das verteidigende Pokemon nur einen einzigen Typ hat) wird als codiert
0x00
.Danach benutze ich nur ein Durcheinander von
if-else
Äquivalenten, um alle ~ 5800-Kombinationen zu überprüfen.Code
Stack Exchange hat mir nicht erlaubt, den Code als Ganzes zu veröffentlichen.
Beispiel
Anscheinend ist der offizielle Pikalang-Interpreter noch nicht fertig, aber da es sich um eine triviale Brainfuck-Substitution handelt, habe ich sie mit einem Brainfuck-Interpreter getestet.
Die Eingabe ist durch Zeilenumbrüche getrennt und erfordert einen zusätzlichen Zeilenumbruch.
Das Programm verwendet den Speicherplatz -1. Wenn Ihr Interpreter nicht zulässt, dass die linke Seite des Bandes verlassen wird, stellen Sie dem Code ein
pipi
oder ein>
(für Pikalang bzw. Brainfuck) voran.Brainfuck, 193708
Hier ist das gleiche Programm in Brainfuck (auch gzipped + base64'd).
Das Programm besteht aus vier Teilen:
Hauptprogrammstruktur
Hier ist das Skript, das die Nachschlagetabelle generiert:
Übrigens dauert diese Antwort 29817 Bytes. :)
quelle
PIPI
könnte als>
oder interpretiert werden++
). Auch BFC würde offenbar die Großschreibung des Codes erfordern.C ++ 14,
420416Die Eingabe sollte zu stdin und in der Form sein
Normal, Rock/Dragon
Live-Version .
Mit etwas Leerzeichen:
quelle
Tcl, 382
Das Skript enthält komprimierte Daten, einschließlich Nicht-UTF-8-Bytes. Hier ist das genaue Skript, das in Base 64 codiert ist:
Verwendet den
zlib
Befehl zur Komprimierung.quelle
Lua,
758661633 BytesUngolfed:
Nennen Sie es mit
f("Grass","Water/Flying")
quelle
m
direkt verwenden, da er nur einmal referenziert wird.m
aufe
billiger, dae
es ein paar Mal verwendet wird.e={...}[r]
:? Weil ich das ausprobiert habe und es nicht legal ist: /Python 3 - 362
Das Eingabeformat ist der Verschiebungstyp und der Pokémon-Typ, die durch Leerzeichen getrennt sind. Zum Beispiel
Fire Grass
oderWater Steel/Electric
.Die Tabelle ist eine Zeichenfolge, in der der Index jedes Zeichens im Bereich von 40 bis 103 liegt und 3 Typenkombinationen darstellt. Die Liste der Typen wird als 3. und 4. (falls vorhanden) Zeichen jedes Typs gespeichert, die mit dem 3. und 4. Zeichen jedes eingegebenen Typs verglichen werden.
quelle
'rmghyiis...'.find(x[2:4])//2
anstelle von"rm gh yi is ...".split().index(x[2:4])
e
undg
Charaktere .... vielleicht könnten drei Buchstaben-Präfixe verwendet werden und Sie hätten noch einige Einsparungen.find(...)//3
gegenüber.split().index(...)
/
die beiden Typen für doppelt typisierte Pokemons zu fordern, zSteel/Electric
.PHP, 426
Beispieleingabe:
Beispielausgabe:
quelle