Défi:
Prenez une chaîne de lettres majuscules ou minuscules comme entrée (facultatif) et calculez le score que cette chaîne obtiendrait dans un jeu de Scrabble en anglais.
Règles:
Le score de chaque lettre est le suivant (utilisez-le même s'il existe d'autres versions du jeu):
1 point: E, A, I, O, N, R, T, L, S, U
2 points: D, G
3 points: B, C, M, P
4 points: F, H, V, W, Y
5 points: K
8 points: J, X
10 points: Q, Z
Le score d'une chaîne est simplement la somme des scores de chacune des lettres utilisées. Vous pouvez supposer que vous avez beaucoup de tuiles disponibles, donc des mots longs et des mots avec beaucoup des mêmes lettres sont des entrées valides.
Cas de test:
ABC -> 7
PPCG -> 11
STEWIE -> 9
UGPYKXQ -> 33
FIZZBUZZ -> 49
ABCDEFGHIJKLMNOPQRSTUVWXYZ -> 87
La réponse la plus courte dans chaque langue gagne! Les formats d'entrée et de sortie sont flexibles, vous pouvez donc utiliser l'entrée comme un tableau de caractères (majuscules ou minuscules) si vous le souhaitez.
Réponses:
sed 4.2.2 , 81
La sortie est unaire .
Réduit chaque lettre à une combinaison de lettres ayant un score inférieur jusqu'à ce que toutes les lettres soient un marqueur. Puis remplace ceux avec
1
s pour donner un compte unaire.Essayez-le en ligne!
la source
Haskell ,
8684 octetsEssayez-le en ligne!
Explication
La plupart des lettres donnent un score de 1 et nous n’avons donc pas besoin de les suivre. Nous décrémentons simplement chaque score (enregistre 1 octet sur
10
), puis ajoutons la longueur de la chaîne au score obtenu.Merci @nimi pour -2 octets (en réarrangeant les mots et en utilisant
[1..]
au lieu de[4,3..]
)!la source
zip[1..]$words"DG BCMP FHVWY K . . JX . QZ"
donne une autre alternative d'égale longueurOctave , 50 octets
Essayez-le en ligne!
Défi accepté. Explication:
la source
-47
mais c'est du code-golf pour vous!==
comme ça dans Octave. Ne fonctionne pas dans MATLAB. Bon à savoir.bsxfun
) est également plus courte: 61 octets: essayez-le en ligne!Beatnik , 733 octets
Puisque cela devait vraiment être fait, le voici. C’était vraiment désagréable de déboguer et fournissait quelques défis.
Les entrées doivent être en majuscules seulement. La sortie est unaire (espérons que c'est OK?)
Essayez-le en ligne!
Le processus général est:
Se termine par une erreur.
Une explication plus complète:
la source
Brain-Flak ,
210, 204, 198, 184, 170 octetsEssayez-le en ligne!
Merci à @JoKing d'avoir économisé 14 octets!
Version lisible:
la source
Pyth, 40 octets
Essayez ici
Explication
la source
Python 2 , 78 octets
Essayez-le en ligne!
Version abrégée, réponse de DanielIndie ,
7170 octets-1 octet grâce à Sunny Patel
Essayez-le en ligne!
la source
JavaScript (Node.js) ,
71666362 octetsEssayez-le en ligne!
la source
Java 8,
757170 octets-1 octet en changeant
"02210313074020029000033739".charAt(c-65)-47
en non imprimables (et deux\n
) pour-47
pouvoir les supprimer. Inspiré par la réponse octave @Sanchises .Essayez-le en ligne.
la source
Octave / MATLAB, 85 octets
Essayez-le en ligne!
la source
Gelée , 19 octets
Un lien monadique acceptant une liste de caractères majuscules qui renvoie un entier
Essayez-le en ligne! Ou voir la suite de tests .
Comment?
la source
R ,
9063 octetsEssayez-le en ligne!
Prend l'entrée en tant que chaîne majuscule. R gère les chaînes non imprimables et multilignes sans problèmes, ce qui est bien. Maintenant, nous sommes presque deux fois plus nombreux que le paquet externe!
Et parce que CRAN a tellement de goodies aléatoires:
R + ScrabbleScore 31 octets
Essayez-le en ligne!
Malheureusement,
sws
vérifie la validité par défaut.la source
utf8ToInt
place dematch
et réussi à obtenir un peu plus bas!Emojicode , 358 octets
Essayez-le en ligne!
Explication:
J'ai remplacé les noms de variables par des lettres uniques par des mots plus significatifs, et développé certaines parties de mon code afin de le rendre plus lisible pour les personnes non familiarisées avec la langue. Vous pouvez tester le programme étendu ici .
la source
05AB1E , 21 octets
Prend les entrées sous forme de liste de caractères minuscules.
Essayez-le en ligne! ou en tant que suite de tests
la source
Octave , 73 octets
Essayez-le en ligne!
Utilise
ismember
pour mapper chaque caractère dans le flux d'entréex
sur son index dans la chaîne de recherche'QZJXKFHVWYBCMPDG'
. Tout élément non trouvé sera associé à un index de 0 (ceci inclura les caractères à 1 point).Ensuite, nous ajoutons 1 à l'index pour que les 0 deviennent des références 1-index valides et recherchent la chaîne
'09977433333222211'
. C'est un élément plus long que la première chaîne de recherche. Les chiffres représentent la valeur en points de chaque élément de la chaîne d’origine, moins 1, l’élément supplémentaire étant un «0» au début.beginning
.Enfin, la chaîne résultante est convertie en nombres entiers en soustrayant
47
('0'-1
), ce qui donne la valeur en points de chaque lettre. Toutes les valeurs en points sont ensuite additionnées.la source
C ++, 95 octets
Essayez-le en ligne (désolé, pas un lien TIO)
Explication:
m
, un tableau des valeurs de chaque lettre dans l'ordre, moins 1. Le moins 1 est dû à Q et Z: je ne pouvais pas avoir un nombre à deux chiffresp
jusqu'à atteindre le caractère nul et ajoute le score du nombre (*p
nous donne la lettre et-65
nous pouvons ainsi correctement indexer le tableau). Puisqu'ilm
estchar*
converti en unchar
, nous le renvoyons48
donc à 0, mais add1
puisquem
est déclaré avec un score de moins pour chaque personnage.Je ne suis pas un passionné d’affiche ici, alors j’espère que c’est bien passé. Je crois qu'ils retournent
n
compte comme impression de la valeur, et que déclarer une fonction est bien.la source
Haskell , 66 octets
Essayez-le en ligne! Même approche que la réponse JavaScript de DanielIndie .
Haskell ,
8281 octetsEssayez-le en ligne!
la source
PowerShell , 60 octets
Essayez-le en ligne!
la source
Japt , 36 octets
Prend l'entrée en tant que chaîne en minuscule, retourne un nombre.
Brève explication:
Essayez-le en ligne!
la source
Ruby , 60 octets
Essayez-le en ligne!
Un lambda, acceptant les entrées sous forme de tableau de caractères (majuscules) et renvoyant un entier.
la source
Perl 5
-pF
, 50 octetsEssayez-le en ligne!
la source
Gforth , 109 octets
L'entrée doit être en majuscule:
C PPCG 11 OK
Lisible
Essayez-le en ligne!
la source
Perl 6 , 52 octets
Essayez-le en ligne!
Mappe chaque caractère à un chiffre et les résume. Et ajoute 1 pour chaque caractère car il n'y a pas de chiffre 10 sans encourir d'octets Unicode.
la source
Retina 0.8.2 , 41 octets
Essayez-le en ligne! Le lien inclut des cas de test. Explication: comme dans la réponse Haskell, les lettres non triviales sont traduites en 1 moins que leur score, et 1 est ajouté plus tard lorsque les caractères sont convertis en unaires. Mettre en
FHVWY
dernier leur permet de mapper à 3 + 1.la source
C (gcc),
7872 octetsIl y a actuellement 26 caractères dans cette chaîne. Voir le code rendu correctement et l'exécuter ici .
Merci à gastropner pour avoir au golf 6 octets.
Version non-golfée:
la source
Excel, 91 octets
Explication:
A1
{ }
aux deux extrémités.MID(A1,ROW(A:A),1)
extrait chaque caractère à son tour (et beaucoup de valeurs vides, aussi, car il retournera autant de valeurs qu'il y a de lignes dans la feuille)CODE(MID(~)&"z")
extrait la valeur ASCII pour chaque caractère. Le&"z"
ajoute unz
à la fin duMID()
résultat carCODE()
n'aime pas les entrées vides. La valeur ASCIIz
est supérieure à chaque lettre majuscule, donc elle est ignorée ultérieurement.MID("02210313074020029000033739",CODE(~)-64,1)
extrait une lettre de la chaîne de partition basée sur sa valeur ASCII ajustée de 64 pour que les lettres s'exécutent de 1 à 26 au lieu de 65 à 90."0"&MID(~)
ajoute un zéro auMID()
résultat car Excel ne vous laissera pas faire de maths avec des chaînes vides, dont il y en aura plusieurs.0+("0"&MID(~))
transforme toutes ces chaînes en nombres.SUM(0+("0"&MID(~)))
ajoute toutes ces chaînes qui sont maintenant des nombres.LEN(A1)+SUM(~)
ajoute la longueur de l'entrée à la somme car toutes les valeurs de la chaîne de score (02210313074020029000033739
) ont été réduites d'un chiffre afin qu'elles aient toutes un chiffre.Il existe une solution très similaire dans Google Sheets, mais elle compte 97 octets, car elle
ArrayFromula()
est plus longue que{}
(mais au moins, elle peut gérer0 + "" = 0
).la source
SUBSTITUTE()
, à venir à une lourde 527 octets.Wolfram Language (Mathematica) , 74 octets
Bien sûr, Wolfram | Alpha supporte le scrabble! Ceci est une fonction anonyme.
Cela ne fonctionne pas sur TIO.
Pour exécuter, allez ici , faites défiler et cliquez sur "Créer un nouveau cahier» ". Le code à utiliser dans le cahier est dans ce programme TIO afin que vous puissiez le copier. Collez chaque appel de fonction dans son propre bloc de code. Si vous en exécutez trop dans un seul bloc, l'exécution ne sera pas terminée.
Notez que
WolframAlpha
envoie une demande en utilisant Internet. Bien qu'il existe d'autres réponses sur PPCG qui l'utilisent, j'ai pensé que vous devriez savoir.Ce programme utilise la fonction plus courte ci-dessous, mais l'appelle sur chaque caractère de l'entrée (en envoyant un appel séparé à Wolfram | Alpha à chaque fois!)
Cela ne fonctionne que pour une longueur maximale de 15, la largeur d'un tableau de Scrabble. (49 octets)
Comme ci-dessus, mais affichera le résultat dans une case, en indiquant si le mot saisi est un mot Scrabble valide. (45 octets)
la source
C # (.NET Core) , 50 + 18 = 68 octets
+18 octets pour
using System.Linq;
Essayez-le en ligne!
la source
K (oK) ,
6038 octetsSolution:
Essayez-le en ligne!
Explication:
Index dans les scores, résume le résultat.
la source
Japt
-x
,43393530 octetsEssayez-le en ligne!
Solution de 35 octets:
Courez en ligne
la source