J'ai passé toute la journée à un tournoi Super Smash Bros., et j'ai commencé à penser à une partie de la terminologie que nous utilisons pour décrire les sets. Ce sont les trois types de sets que je vois joués lors des tournois:
- Le meilleur des 3 (Bo3)
- Trois matchs sont joués. Le gagnant de l'ensemble est le joueur qui a remporté la majorité des matchs.
- Si un seul joueur remporte deux matchs du set, il est immédiatement déclaré vainqueur, car il serait impossible à l'adversaire de rattraper son retard.
- Le meilleur des 5 (Bo5)
- Cinq matchs sont joués. Le gagnant de l'ensemble est le joueur qui a remporté la majorité des matchs.
- Si un seul joueur remporte trois matchs du set, il est immédiatement déclaré vainqueur, car il serait impossible à l'adversaire de rattraper son retard.
- Premier à 5 (Ft5)
- D'accord, j'ai un peu triché avec ma formulation plus tôt. Ce genre d'ensemble ne fait pas partie d'un tournoi, mais vous les verrez souvent se produire sur le site. C'est traditionnellement le genre de set que vous jouerez si vous avez défié un autre joueur et que l'argent est en jeu.
- C'est aussi simple que cela puisse paraître: les joueurs jouent à plusieurs reprises jusqu'à ce que l'un d'eux en remporte cinq, et ce joueur est déclaré vainqueur.
Évidemment, Bo3 et Bo5 sont très similaires, ne différant que par le nombre de parties jouées. Mais Ft5 est clairement différent ... non? Pas vraiment! Peu importe comment un ensemble Bo3 descend, le vainqueur aura remporté exactement deux matchs. Le vainqueur d'un set Bo5 aura remporté exactement 3 matchs. Pourquoi ne pas les appeler Ft2 ou Ft3? La même logique, appliquée à l'envers, montrera que Ft5 est exactement le même que Bo9.
L'objectif de ce défi est de déterminer le synonyme d'un format défini.
spécification
Votre programme ou fonction prendra une seule chaîne d' entrée . Les deux premiers caractères seront Bo
ou Ft
, et ils seront suivis d'un nombre. Le programme / fonction affichera une chaîne avec le préfixe opposé et un nombre tel que les chaînes d'entrée et de sortie signifient la même chose.
Toute chaîne commençant par Bo
se terminera par un nombre impair.
Vous pouvez supposer que le nombre dans la chaîne d'entrée ne sera jamais supérieur à 200. Vous pouvez également supposer que vous ne recevrez jamais d'entrée pour laquelle la sortie correcte inclurait un nombre supérieur à 200. De même, les numéros d'entrée et de sortie corrects seront toujours être supérieur à 0.
Exemples
Bo3 -> Ft2
Ft2 -> Bo3
Bo5 -> Ft3
Ft3 -> Bo5
Bo9 -> Ft5
Ft5 -> Bo9
Bo51 -> Ft26
Ft26 -> Bo51
Bo199 -> Ft100
Ft100 -> Bo199
Réponses:
Pyth, 23 octets
Suite de tests.
Comment ça fonctionne:
Tout d'abord, pour trouver le
Bo
ouFt
, le programme filtre les caractères dans l'entrée à partir deBoFt
, avec-"BoFt"z
.Ceci est immédiatement imprimé avec
p
.p
renvoie également son entrée. Cette chaîne est convertie en un nombre interprétant les octets comme la base 256. Le résultat est 17007 si la chaîne étaitBo
, et 18036 si la chaîne étaitFt
.Ensuite, il calcule les résultats possibles,
num * 2 - 1
et(num + 1)/2
et met cela dans une liste d'entrée 2. Ensuite, le programme indexe dans cette liste avec le numéro ci-dessus, 17007 ou 18036. En raison de l'indexation modulaire de Pyth, cela sélectionne le numéro approprié. Le résultat est ensuite imprimé automatiquement.Etant donné que les
p
impressions sans nouvelle ligne de fin, mais l'impression implicite ont la nouvelle ligne de fin, les deux impressions successives sortent exactement au bon format.la source
Python 2, 59
Dans les défis courts où les fonctions sont autorisées, la brièveté de l'
lambda
emporte généralement même lorsque le code doit se répéter en raison de l'impossibilité d'affecter des variables.Nous vérifions dans quel cas nous sommes en comparant les chaînes
s>'C'
. Ensuite, obtenez le bon préfixe avec l'astuce de découpage de liste'FBto'[s>'C'::2]
.Pour obtenir le nombre, nous devons évaluer les caractères au-delà du second et faire soit
*2+1
ou/2-1
pour lui. Pour ce faire, nous plaçons l'une de ces deux expressions sous forme de chaînes, choisies à nouveau par le découpage de liste, en évaluant le résultat et en transformant ce nombre en chaîne.Edit: enregistré un caractère (59):
Ne demandez même pas ...
la source
lambda a:(lambda b:b*b)(a+3)
. Ce n'est pas particulièrement court cependant.Métaprogrammation de modèle C ++ 11, 305 octets
Edit: 100 autres octets de réduction
Est-ce que j'obtiens une sorte de handicap pour mon choix de langue? : p
Exemples:
la source
CJam, 29 octets
Essayez-le en ligne
Rien de très élaboré ici. Calculer les deux résultats possibles et choisir l'un des deux en fonction de la première lettre de l'entrée. Mettra à jour si je trouve quelque chose de mieux.
Explication:
la source
CJam, 27 octets
Cela utilise le fait que
'B' ^ 'F' == 4
et'o' ^ 't' == 27
.Essayez-le en ligne dans l' interpréteur CJam .
la source
Javascript (ES6),
5047 caractèresSolution très simple: (Merci à undergroundmonorail pour avoir supprimé un octet!)
Non golfé:
Pour une fois, ma réponse n'était que de 2x la longueur de la meilleure réponse Pyth!
la source
y/2+.5
par-~y/2
pour enregistrer un octet.Haskell, 69 octets
Assez simple.
la source
Pyth - 31 octets
Assez simple, utilise l'indexation zip et modulaire pour obtenir le commutateur. Le calcul réel est vraiment facile.
Suite de tests .
la source
Julia, 63 octets
Non golfé:
la source
Matlab, 95 octets
Exemples:
la source
Powershell, 111
La verbosité de PowerShell et les parenthèses requises sont à nouveau sa chute. Golf Même le
.Substring(0,2)
à[0..1]-join''
arrêts seulement 2 octets chacun, et un autre couple d' octets enregistrés avec un impliciteElse
grâce à laexit
commande. Tant pis. Bon recyclage sur les cordes de séparation.Code:
Usage:
Explication
la source
Perl 5, 38 octets (37 + 1 pour
-p
)Utilisation : enregistrez sous 54768.pl et exécutez comme:
ou de manière interactive:
la source
-p
implique-n
. Vous n'avez pas besoin des deux.FSharp -
153143 octetsMises à jour
if ... then ...
la source
Rubis, 82 octets
Appelé avec un argument pour faire tomber quelques octets.
Premier post, suggestions bienvenues. :)
EDIT: Je me suis débarrassé de 12 octets en modifiant mes calculs. Étant donné que les nombres Bo sont impairs, ils auront toujours une décimale après la division par 2, ce qui signifie que je peux simplement tronquer et ajouter 1 au lieu d'utiliser
ceil
pour arrondir.la source
puts
.PHP,
857975 octetsUtilisation:
appelez le script avec un argument:
php -d error_reporting=0 script.php Bo5
la source
Pas ridiculement court comme les autres, mais c'est mon premier post:
JS, 143 octets
Version non golfée:
la source
var
mot - clé et 3) les instructions peuvent être séparées par un point-virgule ou une nouvelle ligne, vous n'avez donc pas besoin des deux. Pour des conseils plus généraux, consultez Conseils pour jouer au golf en JavaScript .R, 144 octets
Nouveau sur le golf de code, R et ce site. Alors voilà:
la source
C #, 110 octets
la source