Reto:
Tome una cadena de letras mayúsculas o minúsculas como entrada (opcional) y calcule la puntuación que esa cadena obtendría en un juego de Scrabble en inglés.
Reglas:
El puntaje de cada letra es el siguiente (use esto incluso si hay otras versiones del juego):
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
La puntuación de una cadena es simplemente la suma de las puntuaciones de cada una de las letras utilizadas. Puede suponer que tiene muchos mosaicos disponibles, por lo que las palabras largas y las palabras con muchas de las mismas letras son entradas válidas.
Casos de prueba:
ABC -> 7
PPCG -> 11
STEWIE -> 9
UGPYKXQ -> 33
FIZZBUZZ -> 49
ABCDEFGHIJKLMNOPQRSTUVWXYZ -> 87
¡La respuesta más corta en cada idioma gana! Los formatos de entrada y salida son flexibles, por lo que puede tomar la entrada como una matriz de caracteres (mayúsculas o minúsculas) si lo desea.
Respuestas:
sed 4.2.2 , 81
La salida es en unario .
Reduce cada letra a una combinación de letras de menor puntaje hasta que todas las letras sean de 1 puntaje. Luego reemplaza aquellos con
1
s para dar un recuento unario.Pruébalo en línea!
fuente
Haskell ,
8684 bytesPruébalo en línea!
Explicación
La mayoría de las letras dan un puntaje de 1 y, por lo tanto, no necesitamos hacer un seguimiento de estas, en lugar de eso solo disminuimos cada puntaje (también guardamos 1 byte
10
) y luego agregamos la longitud de la cadena al puntaje resultante.¡Gracias @nimi por -2 bytes (reorganizando las palabras y usando en
[1..]
lugar de[4,3..]
)!fuente
zip[1..]$words"DG BCMP FHVWY K . . JX . QZ"
da otra alternativa con la misma duraciónOctava , 50 bytes
Pruébalo en línea!
Desafío aceptado. Explicación:
fuente
-47
pero eso es un código de golf para ti!==
así en Octave. No funciona en MATLAB. Bueno saber.bsxfun
) también es más corta a 61 bytes: ¡ Pruébelo en línea!Beatnik , 733 bytes
Como realmente tenía que hacerse, aquí está. Fue realmente desagradable depurar y proporcionó algunos desafíos.
La entrada debe ser solo letras mayúsculas. La salida es unaria (¿espero que esté bien?)
Pruébalo en línea!
El proceso general es:
Termina con un error.
Una explicación más completa:
fuente
Brain-Flak ,
210, 204, 198, 184, 170 bytesPruébalo en línea!
¡Gracias a @JoKing por guardar 14 bytes!
Versión legible:
fuente
Pyth, 40 bytes
Pruébalo aquí
Explicación
fuente
Python 2 , 78 bytes
Pruébalo en línea!
Versión más corta, puerto de la respuesta de Daniel Indie ,
7170 bytes-1 byte gracias a Sunny Patel
Pruébalo en línea!
fuente
JavaScript (Node.js) ,
71666362 bytesPruébalo en línea!
fuente
Java 8,
757170 bytes-1 byte cambiando
"02210313074020029000033739".charAt(c-65)-47
a no imprimibles (y dos\n
) para que-47
se pueda eliminar. Inspirado por la respuesta Octave de @Sanchises .Pruébalo en línea.
fuente
Octava / MATLAB, 85 bytes
Pruébalo en línea!
fuente
Jalea , 19 bytes
Un enlace monádico que acepta una lista de caracteres en mayúscula que devuelve un entero
Pruébalo en línea! O vea el conjunto de pruebas .
¿Cómo?
fuente
R ,
9063 bytesPruébalo en línea!
Toma la entrada como una cadena en mayúscula. R maneja cadenas no imprimibles y multilíneas sin problemas, así que eso es bueno. ¡Ahora somos casi el doble del paquete externo!
Y porque CRAN tiene tantas cosas al azar:
R + ScrabbleScore 31 bytes
Pruébalo en línea!
Lamentablemente,
sws
verifica la validez por defecto.fuente
utf8ToInt
lugar de hacerlomatch
y pude conseguir algunos más!Emojicode , 358 bytes
Pruébalo en línea!
Explicación:
Cambié los nombres de las variables de letras simples a palabras más significativas, y expandí algunas partes de mi código para que sea más legible para las personas que no están familiarizadas con el idioma. Puede probar el programa ampliado aquí .
fuente
05AB1E , 21 bytes
Toma la entrada como una lista de caracteres en minúscula.
Pruébalo en línea! o como un conjunto de pruebas
fuente
Octava , 73 bytes
Pruébalo en línea!
Se utiliza
ismember
para asignar cada carácter en la secuencia de entradax
en su índice en la cadena de búsqueda'QZJXKFHVWYBCMPDG'
. Cualquier elemento no encontrado se asignará a un índice de 0 (esto incluirá los caracteres de 1 punto).A continuación, agregamos 1 al índice para que los 0 se conviertan en referencias válidas de 1 índice y busquemos en la cadena
'09977433333222211'
. Este es un elemento más largo que la primera cadena de búsqueda. Los dígitos representan el valor en puntos de cada elemento en la cadena original, menos 1, con el elemento extra como un '0' en elbeginning
.Finalmente, la cadena resultante se convierte en enteros restando
47
('0'-1
), produciendo el valor de punto para cada letra, y todos los valores de punto se suman.fuente
C ++, 95 bytes
Pruébelo en línea (no es un enlace TIO lo siento)
Explicación:
m
, una matriz de los valores de cada letra en orden, menos 1. El menos 1 se debe a Q y Z: no podría tener un número de dos dígitos allíp
hasta llegar al carácter nulo, y agrega la puntuación del número (*p
nos da la letra, y-65
así podemos indexar correctamente la matriz). Dado quem
es a,char*
se convierte en a,char
por lo tanto, menos,48
así que devuélvelo a 0, pero suma1
ya quem
se declara como un puntaje menos para cada personaje.No soy un aficionado ávido aquí, así que espero haberlo hecho correctamente. Creo que devolverlos
n
cuenta como imprimir el valor, y que declarar una función está bien.fuente
Haskell , 66 bytes
Pruébalo en línea! El mismo enfoque que la respuesta JavaScript de DanielIndie .
Haskell ,
8281 bytesPruébalo en línea!
fuente
PowerShell , 60 bytes
Pruébalo en línea!
fuente
Japt , 36 bytes
Toma la entrada como una cadena en minúscula, devuelve un número.
Breve explicación:
Pruébalo en línea!
fuente
Rubí , 60 bytes.
Pruébalo en línea!
Una lambda, que acepta la entrada como una matriz de caracteres (mayúsculas) y devuelve un entero.
fuente
Perl 5
-pF
, 50 bytesPruébalo en línea!
fuente
Gforth , 109 bytes
La entrada debe ser mayúscula:
C PPCG 11 OK
Legible
Pruébalo en línea!
fuente
Perl 6 , 52 bytes
Pruébalo en línea!
Asigna cada carácter a un dígito y los suma. Y agrega 1 para cada carácter porque no hay un dígito 10 sin incurrir en bytes unicode.
fuente
Retina 0.8.2 , 41 bytes
Pruébalo en línea! El enlace incluye casos de prueba. Explicación: Al igual que la respuesta de Haskell, las letras no triviales se traducen a 1 menos que su puntaje, y 1 se agrega más tarde cuando los caracteres se convierten en unarios. Poner el
FHVWY
último les permite a todos mapear a una puntuación de 3 + 1.fuente
C (gcc),
7872 bytesEn realidad hay 26 caracteres en esa cadena. Vea el código representado correctamente y ejecútelo aquí .
Gracias a gastropner por jugar al golf 6 bytes.
Versión sin golf:
fuente
Excel, 91 bytes
Explicación:
A1
{ }
a ambos extremos.MID(A1,ROW(A:A),1)
extrae cada carácter por turno (y también muchos valores vacíos, ya que devolverá tantos valores como filas en la hoja)CODE(MID(~)&"z")
extrae el valor ASCII para cada carácter. El&"z"
anexa unaz
al final delMID()
resultado porqueCODE()
no le gusta entradas vacías. Sinz
embargo, el valor ASCII para es más alto que cada letra mayúscula, por lo que se ignora efectivamente más adelante.MID("02210313074020029000033739",CODE(~)-64,1)
extrae una letra de la cadena de puntuación en función de su valor ASCII ajustado por 64 para que las letras corran 1-26 en lugar de 65-90."0"&MID(~)
antepone un cero alMID()
resultado porque Excel no le permitirá hacer cálculos matemáticos con cadenas vacías, de las cuales habrá varias.0+("0"&MID(~))
convierte todas esas cadenas en números.SUM(0+("0"&MID(~)))
suma todas esas cadenas que ahora son números.LEN(A1)+SUM(~)
agrega la longitud de la entrada a la suma porque todos los valores en la cadena de puntuación (02210313074020029000033739
) se ajustaron en uno para que todos tengan un dígito de longitud.Hay una solución muy similar en Google Sheets, pero viene en 97 bytes porque
ArrayFromula()
es más larga que{}
(pero al menos puede manejar0 + "" = 0
).fuente
SUBSTITUTE()
, llegando a un considerable 527 bytes.Wolfram Language (Mathematica) , 74 bytes
¡Por supuesto, Wolfram | Alpha admite la puntuación Scrabble! Esta es una función anónima.
Esto no funciona en TIO.
Para ejecutar, vaya aquí , desplácese hacia abajo y haga clic en "Crear un cuaderno nuevo» ". El código para usar en la computadora portátil está en este programa TIO para que pueda copiarlo. Pegue cada llamada de función en su propio bloque de código. Si ejecuta demasiados en un solo bloque, la ejecución no se completará.
Tenga en cuenta que
WolframAlpha
envía una solicitud a través de Internet. Aunque hay otras respuestas sobre PPCG que lo usan, pensé que debería saberlo.Este programa utiliza la siguiente función más corta, pero la invoca en cada carácter individual de la entrada (¡envía una llamada por separado a Wolfram | Alpha cada vez!)
Esto solo funciona para entradas de hasta 15 de longitud, el ancho de una placa Scrabble. (49 bytes)
Igual que el anterior, pero mostrará el resultado en un cuadro, junto con si la entrada es una palabra Scrabble válida. (45 bytes)
fuente
C # (.NET Core) , 50 + 18 = 68 bytes
+18 bytes para
using System.Linq;
Pruébalo en línea!
fuente
K (oK) ,
6038 bytesSolución:
Pruébalo en línea!
Explicación:
Indice los puntajes, resuma el resultado.
fuente
Japt
-x
,43393530 bytesPruébalo en línea!
Solución de 35 bytes:
Ejecútalo en línea
fuente