In den Pokemon-Videospielen wird der Spieler in die Welt geschickt, um wilde Tiere zu winzigen Bällen zu zwingen und sie zum Kampf auszubilden. Natürlich weiß jeder , dass niemand Pokemon für den Kampf spielt. Die wahre Auslosung der Serie ist, dass das Pokémon sich selbst fängt! Ihre Aufgabe ist es, den Pokeball während eines Eroberungsversuchs zu simulieren. Für diese Herausforderung wird die Erfassungsformel der Generation V verwendet, die wie folgt lautet:

HP_maxentspricht den maximalen HP des Zielpokemons. HP_currentist gleich den aktuellen HP des Zielpokemons. rateist die Fangrate des Pokémons, bonus_ballist der Multiplikator des geworfenen Pokéballs und bonus_statusist 2,5, wenn das Ziel-Pokémon schläft oder eingefroren ist, 1,5, wenn das Ziel-Pokémon gelähmt, vergiftet oder verbrannt ist, und 1, andernfalls.
Nach dem Auffinden amüssen Sie bis zu drei "Shake Checks" durchführen. Die Wahrscheinlichkeit, dass ein Shake-Check erfolgreich ist, ist 65536 / (255 / a)^(1/4). Wenn eine dieser Prüfungen fehlschlägt, entweicht das Pokémon seinem Ball. Wenn alle drei Prüfungen erfolgreich sind, wird das Pokemon abgefangen!
Hinweis: Bei jeder Division wird das Ergebnis auf ein Vielfaches von 1/4096 abgerundet. Dies ist im Allgemeinen ein unbedeutendes Detail, das jedoch in Ihrem Programm berücksichtigt werden muss.
Ihre Herausforderung besteht darin, ein Programm zu schreiben, das die Schüttelprüfungen ausführt und druckt, um den Status der Prüfungen zu ermitteln. Auf stdin erhält Ihr Programm (mindestens Details unten) die maximale HP des Pokémons, die Fangrate des Ziel-Pokémons und den Namen des Pokéballs. Die maximale HP und die Fangrate sind garantiert ganze Zahlen, während der Name des Pokeballs immer eine Zeichenfolge ist. Diese Eingabe kann in beliebiger Reihenfolge erfolgen und mit einem oder mehreren abgrenzenden Zeichen versehen sein, sofern dies konsistent ist. Angenommen, die Eingabe ist korrekt, ist keine Fehlerbehandlung erforderlich.
Die Namen der Pokeballs, die Sie unterstützen müssen, und ihre Fangmultiplikatoren sind hier aufgelistet:
Poke | 1
Great | 1.5
Ultra | 2
Master | 255
Sie können davon ausgehen, dass das Ziel schläft und 1 HP hat. Das erwartete Ausgabeformat lautet wie folgt:
(First check failed)
(no output)
(Second check failed)
*shake*
(Third check failed)
*shake*
*shake*
*shake*
(All checks pass)
*shake*
*shake*
*shake*
Click!
(Das ist kein Tippfehler, Ihr Programm sollte niemals nur zwei Shakes ausgeben.)
Das ist Code-Golf , also ist Ihre Punktzahl die Byteanzahl des Quellcodes Ihres Programms. Die niedrigste Punktzahl gewinnt.
Boni!
Ich sagte, dass Sie annehmen können, dass das pokemon bei 1 HP ist und schläft. Alternativ können Sie dem Benutzer erlauben, die aktuellen HP und des Pokemons einzugeben bonus_status. Die aktuelle HP des Pokemons ist immer eine ganze Zahl, die kleiner oder gleich der maximalen HP ist, und beträgt bonus_statusimmer entweder 2,5, 1,5 oder 1. Wenn Sie dies tun, müssen Sie diese Werte am Ende Ihrer Eingabe haben und standardmäßig 1 und 2.5 wenn sie nicht geliefert werden. Sie können 15 Punkte von Ihrer Punktzahl abziehen, um einen dieser Punkte umzusetzen, oder 25 Punkte für beide.
Darüber hinaus können Sie kritische Erfassungen implementieren. Bei einer kritischen Erfassung wird nur ein Schütteltest durchgeführt. Wenn dies fehlschlägt, wird das Programm automatisch beendet. Wenn bestanden, gibt es Folgendes aus:
*shake*
Click!
Kritische Fänge werden häufiger, wenn der Spieler mehr Pokémon sammelt. Der Einfachheit halber können wir jedoch davon ausgehen, dass sie bereits "alle gefangen" haben. Wenn eine zufällig generierte Zahl zwischen 0 und 2047 kleiner ist als a(das Ergebnis der ersten Berechnung) multipliziert mit 2,5, ist dies eine kritische Erfassung. Durch die Unterstützung kritischer Erfassungen können Sie 25 Punkte aus Ihrer Punktzahl entfernen .
Es gibt eine Reihe anderer Pokeballs, die Sie möglicherweise unterstützen. Ihre Namen und Fangmultiplikatoren sind hier aufgelistet:
Safari | 1.5
Sport | 1.5
Lure | 3
Net | 3
Dusk | 3.5
Dive | 3.5
Moon | 4
Fast | 4
Quick | 5
Love | 8
Für jeden dieser Bälle, für den Sie Unterstützung hinzufügen, können Sie (5 + die Länge des Ballnamens) von Ihrer Punktzahl abziehen .
Wenn Sie für einen Kick alle diese Boni (aktuelle HP und Bonus_status von stdin, kritische Eroberungen und alle 10 optionalen Bälle) erreichen, erhalten Sie eine zusätzliche Belohnung von 7 Punkten, die von Ihrer Punktzahl entfernt wurden, für einen geraden Gesamtbonus von 150 .
Beispiel Eingabe / Ausgabe
Nur um sicherzustellen, dass wir alle auf einer Seite sind.
$ ./balls <<< "19,Ultra,255"
*shake*
*shake*
*shake*
Click!
Viel Glück und viel Spaß beim Golfen!
65536 / (255 / a)^(1/4)größer als 1, ist die Prüfung automatisch erfolgreich. Ich bin mir nicht sicher, was du mit der zweiten Frage meinst.
rnd < pMittel ist die Prüfung erfolgreich mit rndin Bereich von 0 und 1
65536 / (255 / a)^(1/4), dann, wenn die Zufallszahl kleiner ist, der Shake-Test erfolgreich
65536 / (255 / a)^(1/4)können, aber mein Mut sagt, dass sie größer als 1 ist. Prüfen Sie mit einer Zufallszahl im Bereich von 0 bis 65536? Ist die Prüfung erfolgreich, wenn die Zufallszahl größer oder kleiner ist?