Ich habe heute den ganzen Tag bei einem Super Smash Bros.-Turnier verbracht und über die Terminologie nachgedacht, die wir bei der Beschreibung von Sets verwenden. Dies sind die drei Arten von Sätzen, die ich bei Turnieren gesehen habe:
- Best of 3 (Bo3)
- Es werden drei Spiele gespielt. Der Gewinner des Sets ist der Spieler, der die meisten Spiele gewonnen hat.
- Wenn ein einzelner Spieler zwei Spiele des Satzes gewinnt, wird er sofort zum Gewinner erklärt, da der Gegner nicht aufholen kann.
- Best of 5 (Bo5)
- Es werden fünf Spiele gespielt. Der Gewinner des Sets ist der Spieler, der die meisten Spiele gewonnen hat.
- Wenn ein einzelner Spieler drei Spiele des Satzes gewinnt, wird er sofort zum Gewinner erklärt, da der Gegner nicht aufholen kann.
- Zuerst bis 5 (Ft5)
- Okay, ich habe ein bisschen mit meinem Wortlaut vorhin geschummelt. Diese Art von Set ist nicht Teil eines Turniers, aber Sie werden oft sehen, wie sie am Veranstaltungsort stattfinden. Dies ist traditionell die Art von Set, die Sie spielen, wenn Sie einen anderen Spieler herausgefordert haben und Geld auf dem Spiel steht.
- Es ist so einfach wie es sich anhört: Die Spieler spielen wiederholt Spiele, bis einer von ihnen fünf gewonnen hat und dieser Spieler zum Gewinner erklärt wird.
Offensichtlich sind Bo3 und Bo5 sehr ähnlich und unterscheiden sich nur in der Anzahl der gespielten Spiele. Aber Ft5 ist eindeutig anders ... oder? Nicht wirklich! Egal wie ein Bo3-Satz ausfällt, der Gewinner hat genau zwei Spiele gewonnen. Der Gewinner eines Bo5-Sets hat genau 3 Spiele gewonnen. Warum nennst du sie nicht Ft2 oder Ft3? Dieselbe Logik, die umgekehrt angewendet wird, zeigt, dass Ft5 genauso ist wie Bo9.
Ziel dieser Herausforderung ist es, das Synonym eines festgelegten Formats zu bestimmen.
Spezifikation
Ihr Programm oder Ihre Funktion nimmt eine einzelne Zeichenfolge von der Eingabe . Die ersten beiden Zeichen sind Bo
oder Ft
, gefolgt von einer Zahl. Das Programm / Funktion Ausgang ein String mit dem anderen Präfix und einer Zahl , so dass die Eingangs- und Ausgangs Strings das gleiche bedeuten.
Jede Zeichenfolge, die mit beginnt Bo
, endet mit einer ungeraden Zahl.
Sie können davon ausgehen, dass die Zahl in der Eingabezeichenfolge niemals größer als 200 sein wird. Sie können auch davon ausgehen, dass Sie niemals eine Eingabe erhalten, für die die richtige Ausgabe eine Zahl größer als 200 enthalten würde. Ebenso werden die Eingabe- und die richtige Ausgabenummer immer verwendet größer als 0 sein.
Beispiele
Bo3 -> Ft2
Ft2 -> Bo3
Bo5 -> Ft3
Ft3 -> Bo5
Bo9 -> Ft5
Ft5 -> Bo9
Bo51 -> Ft26
Ft26 -> Bo51
Bo199 -> Ft100
Ft100 -> Bo199
Antworten:
Pyth, 23 Bytes
Testsuite.
Wie es funktioniert:
Um zuerst das
Bo
oder zu findenFt
, filtert das Programm die Zeichen in der Eingabe ausBoFt
, mit-"BoFt"z
.Dies wird sofort mit gedruckt
p
.p
gibt auch seine Eingabe zurück. Diese Zeichenfolge wird in eine Zahl umgewandelt, die die Bytes als Basis 256 interpretiert. Das Ergebnis ist 17007, wenn die Zeichenfolge warBo
, und 18036, wenn die Zeichenfolge warFt
.Als nächstes berechnet es die beiden möglichen Ergebnisse,
num * 2 - 1
und(num + 1)/2
und legt diese in einem 2 Eintrag Liste. Anschließend indiziert das Programm diese Liste mit der obigen Nummer 17007 oder 18036. Aufgrund der modularen Indizierung von Pyth wird die richtige Nummer ausgewählt. Das Ergebnis wird dann automatisch ausgedruckt.Da
p
Ausdrucke ohne nachgestellte Zeilenvorschubzeile, der implizite Ausdruck jedoch die nachgestellte Zeilenvorschubzeile enthält, werden die beiden aufeinanderfolgenden Ausdrucke im genau richtigen Format ausgegeben.quelle
Python 2, 59
Bei kurzen Herausforderungen, bei denen Funktionen zulässig sind,
lambda
gewinnt in der Regel die Kürze , auch wenn sich der Code aufgrund der Unfähigkeit, Variablen zuzuweisen, wiederholen muss.Wir überprüfen, in welchem Fall wir uns befinden, und vergleichen die Zeichenfolgen
s>'C'
. Holen Sie sich dann das richtige Präfix mit dem List-Slicing-Trick'FBto'[s>'C'::2]
.Um die Nummer zu erhalten, müssen wir die Zeichen über die Sekunde hinaus auswerten und entweder tun
*2+1
oder tun/2-1
. Wir tun dies, indem wir einen dieser beiden Ausdrücke als Zeichenfolgen verwenden, die wiederum durch Aufteilen von Listen ausgewählt werden, das Ergebnis auswerten und diese Zahl in eine Zeichenfolge umwandeln.Bearbeiten: Ein Zeichen gespeichert (59):
Frag nicht mal ...
quelle
lambda a:(lambda b:b*b)(a+3)
. Es ist jedoch nicht besonders kurz.C ++ 11 Template Metaprogramming, 305 Bytes
Edit: Noch 100 Bytes übrig
Bekomme ich ein Handicap für meine Sprachwahl? : p
Beispiele:
quelle
CJam, 29 Bytes
Probieren Sie es online aus
Hier ist nichts sehr Aufwendiges. Berechnen der beiden möglichen Ergebnisse und Auswählen eines der beiden anhand des ersten Buchstabens in der Eingabe. Wird aktualisiert, wenn mir etwas Besseres einfällt.
Erläuterung:
quelle
CJam, 27 Bytes
Dies macht sich die Tatsache zunutze, dass
'B' ^ 'F' == 4
und'o' ^ 't' == 27
.Probieren Sie es online im CJam-Interpreter aus .
quelle
Javascript (ES6),
5047 ZeichenSehr einfache Lösung: (Dank undergroundmonorail zum Entfernen eines Bytes!)
Ungolfed:
Ausnahmsweise war meine Antwort nur ~ 2x so lang wie die beste Pyth-Antwort!
quelle
y/2+.5
mit-~y/2
zu speichern ein Byte.Haskell, 69 Bytes
Ziemlich unkompliziert.
quelle
Pyth - 31 Bytes
Ziemlich einfach, verwendet Reißverschluss und modulare Indizierung, um den Schalter zu erhalten. Die eigentliche Berechnung ist denkbar einfach.
Testsuite .
quelle
Julia, 63 Bytes
Ungolfed:
quelle
Matlab, 95 Bytes
Beispiele:
quelle
Powershell, 111
Die Wortgewandtheit von PowerShell und die erforderlichen Klammern sind erneut der Nachteil. Auch Golf spielen die
.Substring(0,2)
auf[0..1]-join''
nur speichert 2 Bytes jedem, und ein anderes Paar Bytes mit einer stillschweigenden gespeichertElse
dank desexit
Befehls. Naja. Gute Auffrischung beim Trennen von Saiten.Code:
Verwendung:
Erläuterung
quelle
Perl 5, 38 Bytes (37 + 1 für
-p
)Verwendung : Als 54768.pl speichern und ausführen als:
oder interaktiv:
quelle
-p
impliziert-n
. Du brauchst nicht beides.FSharp -
153143 BytesAktualisierung
if ... then ...
quelle
Rubin, 82 Bytes
Wird mit einem Argument aufgerufen, um ein paar Bytes abzuschlagen.
Erster Beitrag, Anregungen willkommen. :)
BEARBEITEN: 12 Bytes durch Ändern meiner Mathematik losgeworden. Da die Bo-Zahlen ungerade sind, haben sie nach der Division durch 2 immer eine Dezimalstelle, was bedeutet, dass ich nur 1 abschneiden und addieren kann, anstatt aufzurunden
ceil
.quelle
puts
.PHP,
857975 BytesVerwendung:
Rufen Sie das Skript mit einem Argument auf:
php -d error_reporting=0 script.php Bo5
quelle
Nicht so lächerlich kurz wie die anderen, aber das ist mein erster Beitrag:
JS, 143 Bytes
Ungolfed Version:
quelle
var
Schlüsselwort nicht und 3) Anweisungen können durch ein Semikolon oder eine neue Zeile getrennt werden, sodass Sie nicht beide benötigen. Weitere allgemeine Tipps finden Sie unter Tipps zum Golfen in JavaScript .R, 144 Bytes
Neu in Code-Golf, R und dieser Website. Also los geht's:
quelle
C #, 110 Bytes
quelle