Contexte
Dans Boggle , un tour est marqué en additionnant les points pour chaque mot unique qu'un joueur a trouvé (c'est-à-dire que tout mot que plus d'un joueur a trouvé vaut 0 point). Les points sont calculés en fonction du nombre de lettres dans chaque mot, comme suit:
3 lettres: 1 point
4 lettres: 1 point
5 lettres: 2 points
6 lettres: 3 points
7 lettres: 5 points
8 lettres ou plus: 11 points
Défi
Dans ce défi, écrivez un programme ou une fonction qui prend une liste de listes de chaînes représentant les mots de chaque joueur et génère une liste des scores des joueurs. Vous pouvez supposer qu'il y aura au moins 2 joueurs et tous les mots seront de 3 lettres ou plus et seront tous en minuscules (ou en majuscules si vous préférez). Vous pouvez également supposer que chaque joueur n'utilisera chaque mot qu'une seule fois; c'est-à-dire qu'aucune liste de joueurs ne contiendra de doublons. C'est le golf de code, donc la réponse la plus courte en octets l'emporte.
Règles
L'entrée peut être prise dans n'importe quel format raisonnable. Les exemples incluent une liste de listes de chaînes, une liste de chaînes séparées par des virgules, une chaîne séparée par des virgules sur chaque ligne d'entrée, etc. La sortie peut être sous la forme d'une liste d'entiers (ou l'équivalent de votre langue) ou vous pouvez imprimer les valeurs à stdout en utilisant un séparateur de votre choix (comme une nouvelle ligne).
Cas de test
Entrée => Sortie
[["cat","dog","bird","elephant"],
["bird","dog","coyote"],
["dog","mouse"]] => [12,3,2]
[["abc","def","ghi"],
["ghi","def","abc"]] => [0,0]
[["programming","puzzles"],
["code","golf"],
[]] => [16,2,0]
la source
f
au lieu de-
R ,
142126121 121117 octetsEssayez-le en ligne!
Prend
L
comme une liste de vecteurs de chaînes; renvoie les valeurs.Premièrement, ce
unlist
sont les mots, trouve les doublons, puis les supprime des listes de mots des joueurs. Ensuite, il prend ces listes de mots uniques et calcule les scores de chacun, en utilisantpmin
pour s'assurer que les mots de plus de 8 obtiennent un score de 11.la source
function(L)sapply(L,function(x)sum(c(1,1,2,3,5,11)[pmin(6,nchar(x[!x%in%(l=unlist(L))[duplicated(l)]])-2)]))
JavaScript (ES6), 92 octets
Un peu similaire à la réponse de Rick Hitchcock mais créé principalement indépendamment; J'ai utilisé une méthode différente de sommation (
reduce
) et une méthode différente pour vérifier les termes répétés (filter
+includes
). Créditez-lui pour l'idée de vérifier l'article[1]
au lieu de vérifier.length>1
, cependant.Cas de test
Afficher l'extrait de code
la source
s+=
et en supprimant les parenthèses autour des ternaires. Et 3 de plus en utilisantmap
au lieu dereduce
: tio.run/##NY/…reduce
etincludes
rend votre réponse très différente de la mienne.JavaScript (ES6),
10693 octets[13 octets (!) Enregistrés grâce à Arnauld, Shaggy et JollyJoker.]
Cas de test:
Afficher l'extrait de code
la source
c[7]?11:c[6]?5:c[5]?3:c[4]?2:1
par'00011234'[c.length]||11
.[15,2,0]
au lieu du[16,2,0]
dernier cas de test, mais c'est probablement facilement corrigé. Fonctionnera un peu plus après le dîner, sauf si vous publiez une réponse géniale (comme vous le faites habituellement). Merci! :)'00011235'
.'11235'[c.length-3]||11
, non?Perl 6 , 64 octets
Essayez-le en ligne!
la source
Pyth , 26 octets
Utilise la formule de H.PWiz .
Vérifiez tous les cas de test.
La version initiale, 33 octets :
Vérifiez tous les cas de test.
Explication
la source
Haskell ,
7675 octetsEssayez-le en ligne!
la source
Japt ,
292524232120 octetsEssayez-le
Explication
Entrée implicite du tableau
U
.Mappez sur le tableau (
Ë
) et réduisez chaque sous-tableau par addition (x
) après avoir passé ses éléments à travers la fonction suivante, oùX
est le mot courant.Count (
è
) les élémentsU
qui contiennent (ø
)X
.Vérifiez si cela est égal à 1.
ET logique (
&&
).Soustrayez (
n
) 3 du minimum de (m
) 8 et de la longueur (Ê
) deX
.Factorielle, racine carrée et arrondie, respectivement.
la source
Python 2 ,
106105 1058884 octets-1 octet grâce à Jonathan Frech
-1 (17) octets grâce à reffu
Essayez-le en ligne!
la source
Gelée , 26 octets
Essayez-le en ligne!
la source
Java 8,
202200198 octetsOU (également 198 octets )
Peut certainement être joué au golf. Malheureusement, Java n'a pas de builds ou de méthodes courtes pour supprimer tous les éléments de toutes les listes qui sont présents dans plusieurs ..
Explication:
Essayez-le ici.
la source
R, 117 octets
Une approche complètement différente de l' autre réponse R :
Cas de test:
Prend les noms n'apparaissant qu'une seule fois dans la liste, convertit leur longueur en un facteur basé sur les points de coupure donnés et les traduit en scores qui sont ensuite additionnés.
la source
Perl 5 , 104 + 2 (-na) = 106 octets
Essayez-le en ligne!
la source
Clojure, 102 octets
next
renvoienil
s'il n'y a qu'un seul motw
:)la source
PHP , 226 octets
Je pense que cela pourrait encore être réduit un peu.
Non golfé:
Essayez-le en ligne!
la source
Scala , 242 octets
La fonction prend, comme paramètre
a
, unSeq[Set[String]]
et retourne unArray[Int]
. J'utilise un tableau pour qu'il soit mutable (perte de 4 caractères).Essayez-le en ligne!
Pourrait être optimisable, car je n'ai même pas travaillé sur le
partie. Merci pour ce défi!
la source
Swift 4 , 164 octets *
L'expression ci-dessus est techniquement correcte, Swift pure. Cependant, l'expression est si complexe que, en raison de l'explosion exponentielle dans le système d'inférence de type, ne peut pas être traitée avant que le compilateur n'abandonne après un certain délai arbitraire (comme 15s ou quelque chose).
Pour rendre cette expression compilable avec le compilateur actuel, elle peut être décomposée comme ceci:
Cas de test:
En panne:
la source
ASP + Python , 137 octets
Attend des données au format:
Besoin de clingo 5.2.1 avec le support python.
Non golfé:
La fonction python est fortement inspirée de la réponse python .
la source