J'ai rencontré ce problème en travaillant sur un autre défi que je fais pour ce site. Dans ce défi, j'utilise " Mario Kart 8 Scoring ". Le nombre de points que le joueur en k ème place obtient est représenté par ce tableau à 1 index: [15,12,10,9,8,7,6,5,4,3,2,1]. Donc la 1ère place obtient 15 points, la 2ème place obtient 12 points, etc.
Il est assez facile d'attribuer des points comme celui-ci, mais la partie délicate vient de la façon dont je gère les liens. Ce que je fais, c'est donner à chaque joueur à égalité la moyenne des points accordés pour chaque lieu à égalité. Par exemple, si seulement le 1er et le 2e sont à égalité, les deux joueurs obtiennent (15 + 12) / 2 = 13,5 points. (Remarque: vous êtes autorisé à arrondir au nombre entier le plus proche, donc 13 ou 14 sont également acceptables.) Ensuite, les 3e - 12e places obtiennent le nombre normal de points pour leur position.
Défi
Étant donné 12 scores entiers non négatifs triés de manière décroissante, affichez le nombre de points que chaque joueur obtient. Vous pouvez également prendre la liste de points [15,12,10,9, ...] en entrée. Notez que le nombre de points que chaque joueur obtient ne dépend pas des valeurs réelles des scores, mais de la façon dont ils se comparent aux autres scores.
Cas de test
- [21,21,15,14,12,9,6,5,4,3,2,1] => [ 14,14 , 10,9,8,7,6,5,4,3,2, 1]
- [20,15,15,15,10,9,8,7,6,5,4,3] => [15, 10,10,10 , 8,7,6,5,4,3,2, 1]
- explication: (12 + 10 + 9) / 3 = 10,3333
- [1,1,1,1,1,1,1,1,1,1,1,1] => [ 7,7,7,7,7,7,7,7,7,7,7, 7 ]
- explication: (15 + 12 + 10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1) / 12 = 6,8333
- [20,20,20,20,10,10,10,9,8,7,6,5] => [ 12,12,12,12 , 7,7,7 , 5,4,3,2, 1]
- explication: (15 + 12 + 10 + 9) / 4 = 11,5, (8 + 7 + 6) / 3 = 7
- [100,99,98,95,95,95,94,93,93,92,91,91] => [15,12,10, 8,8,8 , 6, 5,5 , 3, 2, 2 ]
- explication: (9 + 8 + 7) / 3 = 8, (5 + 4) / 2 = 4,5, (2 + 1) / 2 = 1,5
la source
ave
) sinon c'est juste un extrait (ce qui n'est pas autorisé). Heureusement, cela vous fait économiser 5 octets.Perl 5 , 109 +1 (-a) = 110 octets
Essayez-le en ligne!
Comprend 17 octets pour coder en dur les valeurs en points.
la source
MATL ,
1210 octets2 octets de réduction grâce à @geokavel !
Les entrées sont un vecteur de colonne (
;
comme séparateur) de scores entiers et un vecteur de colonne avec les points. La sortie contient les résultats séparés par des retours à la ligne.Essayez-le en ligne! Ou vérifiez tous les cas de test .
Explication
la source
05AB1E , 12 octets
Essayez-le en ligne!
Explication
la source
C # (.NET Core) , 154 octets
Essayez-le en ligne!
C # (.NET Core) + en utilisant Linq, 170 + 23 octets
Essayez-le en ligne!
la source
J, 15 octets
Essayez-le en ligne!
Prend la liste des scores (
1 2 ... 12 15
) comme argument de droite et les valeurs à marquer comme argument de gauche. Si ce n'est pas une entrée logique, ajoutez 1 octet pour un~
-passif pour inverser l'ordre dans lequel les entrées sont prises.Il peut y avoir quelques choses au golf, notamment
Explication
Je vais diviser cela en deux fonctions.
avg_and_dupe
prend la moyenne d'une liste et la duplique autant de fois que la longueur de la listescore
note une entrée (argument de gauche) étant donné une liste de scores (argument de droite).avg_and_dupe
Cela fonctionne si bien car il est traité comme deux fourches . Si vous vous grattez toujours la tête (je sais que je l'étais au début), demandez et je peux fournir une explication plus approfondie de la raison pour laquelle cela fonctionne comme il le fait.
But
Si c'est toujours déroutant, je peux également ajouter une explication pour
/.
-key, mais je pense que la page wiki l' explique assez bien.la source
You can also take the points list [15,12,10,9,...] as input.
si cela vous fait gagner des octetsPython 2 , 66 octets
-8 octets grâce à Leaky Nun.
Essayez-le en ligne!
la source
Gelée , 11 octets
Essayez-le en ligne!
-3 octets grâce à Fireflame pour avoir remarqué les nouvelles fonctionnalités de Jelly: D
la source
S÷L
et moule au lieu dexL
, ce qui permet$
au lieu de deuxµ
.Python 3 , 67 octets
Essayez-le en ligne!
Python 2 ,
10870 octetsEssayez-le en ligne!
la source
Python 3 , 72 octets
Essayez-le en ligne!
la source
Proton , 62 octets
Essayez-le en ligne!
Proton , 63 octets
Essayez-le en ligne!
la source
Dyalog APL, 14 octets
Prend la liste des scores comme argument de gauche et la liste des points comme argument de droite. Ajoutez 2 octets pour l'encapsuler
()
s'il est appelé directement et non comme une fonction nommée.{
...}⌸
grouper l'argument droit par clé dans l'argument gauche et appliquer la fonction entre accolades à chaque groupe (opérateur clé).⊂≢⍴+/÷≢
est une fourchette où:+/÷≢
est la moyenne des points pour le groupe (somme divisée par le décompte)≢⍴
remodeler le pointage (reproduire la moyenne pour faire correspondre le nombre d'éléments dans le groupe)⊂
encadre le résultat (c'est pour contrecarrer le mélange du résultat que l'opérateur clé applique)∊
est enrôlé et aplatit le résultat de l'opérateur clé (qui est un vecteur imbriqué de vecteurs) dans une liste simple.TryAPL en ligne
la source
Haskell, 152 octets
C'est pénible à importer
groupBy
eton
j'ai donc dû faire le mien.La fonction de moyenne sera raccourcie sous peu.
Le besoin de la signature pourrait probablement être évité avec les drapeaux du compilateur.
la source