Fondo
En Boggle , una ronda se puntúa sumando los puntos por cada palabra única que haya encontrado un jugador (es decir, cualquier palabra que haya encontrado más de un jugador vale 0 puntos). Los puntos se calculan en función del número de letras en cada palabra, de la siguiente manera:
3 letras: 1 punto
4 letras: 1 punto
5 letras: 2 puntos
6 letras: 3 puntos
7 letras: 5 puntos
8 o más letras: 11 puntos
Reto
En este desafío, escriba un programa o función que incluya una lista de listas de cadenas que representen las palabras de cada jugador y genere una lista de las puntuaciones de los jugadores. Puede suponer que habrá al menos 2 jugadores y todas las palabras serán de 3 o más letras y todas estarán en minúsculas (o todas en mayúsculas si lo prefiere). También puede suponer que cada jugador solo usará cada palabra una vez; es decir, ninguna lista de jugadores contendrá duplicados. Este es el código de golf, por lo que la respuesta más corta en bytes gana.
Reglas
La entrada puede tomarse en cualquier formato razonable. Los ejemplos incluyen una lista de listas de cadenas, una lista de cadenas separadas por comas, una cadena separada por comas en cada línea de entrada, etc. La salida puede tener la forma de una lista de enteros (o el equivalente de su idioma) o puede imprimir los valores para stdout utilizando un separador de su elección (como una nueva línea).
Casos de prueba
Entrada => Salida
[["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]
fuente
f
lugar de-
R ,
142126121117 bytesPruébalo en línea!
Toma
L
como una lista de vectores de cadenas; Devuelve los valores.Primero, son
unlist
las palabras, encuentra los duplicados, luego los elimina de las listas de palabras de los jugadores. Luego toma estas listas de palabras únicas y calcula los puntajes de cada una,pmin
para asegurarse de que las palabras de más de 8 se califiquen como 11.fuente
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 bytes
Algo similar a la respuesta de Rick Hitchcock pero creada principalmente de forma independiente; Utilicé un método diferente de suma (
reduce
) y un método diferente para verificar términos repetidos (filter
+includes
). Sin embargo, le atribuimos la idea de verificar el artículo en[1]
lugar de verificarlo.length>1
.Casos de prueba
Mostrar fragmento de código
fuente
s+=
y eliminando los paréntesis alrededor de los ternarios. Y 3 más usando enmap
lugar dereduce
: tio.run/##NY/…reduce
yincludes
hace que su respuesta sea bastante diferente a la mía.JavaScript (ES6),
10693 bytes[Guardado 13 (!) Bytes, gracias a Arnauld, Shaggy y JollyJoker.]
Casos de prueba:
Mostrar fragmento de código
fuente
c[7]?11:c[6]?5:c[5]?3:c[4]?2:1
con'00011234'[c.length]||11
.[15,2,0]
lugar del[16,2,0]
último caso de prueba, pero eso probablemente se arregle fácilmente. Trabajará un poco más después de la cena, a menos que publique una respuesta genial (como suele hacer). ¡Gracias! :)'00011235'
.'11235'[c.length-3]||11
¿verdad?Perl 6 , 64 bytes
Pruébalo en línea!
fuente
Pyth , 26 bytes
Utiliza la fórmula de H.PWiz .
Verifique todos los casos de prueba.
La versión inicial, 33 bytes :
Verifique todos los casos de prueba.
Explicación
fuente
Haskell ,
7675 bytesPruébalo en línea!
fuente
Japt ,
292524232120 bytesIntentalo
Explicación
Entrada implícita de la matriz
U
.Asigne sobre el conjunto (
Ë
) y reduzca cada subconjunto mediante la suma (x
) después de pasar sus elementos a través de la siguiente función, dondeX
está la palabra actual.Cuenta (
è
) los elementosU
que contienen (ø
)X
.Compruebe si eso es igual a 1.
Lógico Y (
&&
).Reste (
n
) 3 del mínimo de (m
) 8 y la longitud (Ê
) deX
.Factorial, raíz cuadrada y redondeada, respectivamente.
fuente
Python 2 ,
1061058884 bytes-1 byte gracias a Jonathan Frech
-1 (17) bytes gracias a reffu
Pruébalo en línea!
fuente
Jalea , 26 bytes
Pruébalo en línea!
fuente
Java 8,
202200198 bytesO (también 198 bytes )
Definitivamente se puede jugar golf. Desafortunadamente Java no tiene complementos ni métodos cortos para eliminar todos los elementos de todas las listas que están presentes en múltiples ...
Explicación:
Pruébalo aquí
fuente
R, 117 bytes
Un enfoque completamente diferente de la otra respuesta R :
Casos de prueba:
Toma los nombres que aparecen solo una vez en la lista, convierte su longitud a un factor basado en los puntos de corte dados y los traduce en puntajes que luego se suman.
fuente
Perl 5 , 104 + 2 (-na) = 106 bytes
Pruébalo en línea!
fuente
Clojure, 102 bytes
next
vuelvenil
si solo hay una palabraw
:)fuente
PHP , 226 bytes
Creo que esto aún podría reducirse bastante.
Sin golf:
Pruébalo en línea!
fuente
Scala , 242 bytes
La función toma, como parámetro
a
, aSeq[Set[String]]
y devuelve unArray[Int]
. Utilizo una matriz para que sea mutable (pérdida de 4 caracteres).Pruébalo en línea!
Podría ser optimizable, ya que ni siquiera trabajé en el
parte. ¡Gracias por este desafío!
fuente
Swift 4 , 164 bytes *
La expresión anterior es técnicamente correcta, pura Swift. Sin embargo, la expresión es tan compleja que, debido a la explosión exponencial en el sistema de inferencia de tipos, no se puede procesar antes de que el compilador se rinda después de un tiempo de espera arbitrario (como 15 segundos o algo así).
Para hacer que esta expresión sea compatible con el compilador actual, puede desglosarse así:
Casos de prueba:
Desglosado:
fuente
ASP + Python , 137 bytes
Espera datos formateados como:
Necesita clingo 5.2.1 con soporte para python.
Sin golf:
La función de Python está muy inspirada en la respuesta de Python .
fuente