Problema
Estás atrapado en una cabaña en medio del bosque, con solo un viejo juego de scrabble para entretenerte. Tras la inspección, verá que las letras de Scrabble están tan gastadas que solo los puntos de cada letra son visibles.
No obstante, decides jugar un juego. Sacas siete letras de la bolsa y las colocas en tu bandeja, tu desafío es determinar cuáles podrían ser esas letras.
Entonces, generalmente, dada una lista de puntos, conviértalo en cualquier posible cadena o lista de letras.
Scrabble Tiles y Distribuciones
- 2 fichas en blanco (puntuación de 0 puntos)
- 1 punto: E × 12, A × 9, I × 9, O × 8, N × 6, R × 6, T × 6, L × 4, S × 4, U × 4
- 2 puntos: D × 4, G × 3
- 3 puntos: B × 2, C × 2, M × 2, P × 2
- 4 puntos: F × 2, H × 2, V × 2, W × 2, Y × 2
- 5 puntos: K × 1
- 8 puntos: J × 1, X × 1
- 10 puntos: Q × 1, Z × 1
Entonces, si tiene una lista de puntos, [10,10,8,5,1,1,1]
entonces "QZJKEEE"
sería válido pero "QQJKEEE"
no sería válido (ya que solo hay 1 Q mosaico en la bolsa)
Reglas específicas del problema
- Puede suponer que todas las entradas son válidas y que siempre habrá 7 mosaicos (es decir, no será una lista de siete mosaicos de 10 puntos y no serán 9 mosaicos)
- Puede suponer que no se han extraído previamente fichas de la bolsa (por lo que la distribución es la distribución estándar de las fichas en inglés como se definió anteriormente)
- No tiene que generar una palabra válida, solo una cadena de letras válida.
- El orden de su cadena es irrelevante siempre que para cada mosaico haya una letra correspondiente.
- Los puntos se basan en los puntos de mosaico de Scrabble en inglés estándar como se definió anteriormente.
- Puede mostrar en mayúsculas o minúsculas, para un mosaico en blanco puede mostrar un carácter de espacio o un guión bajo '_'
- Su respuesta puede aparecer como cualquier representación razonable de los mosaicos, como una lista, cadena, matriz o secuencia
Reglas generales:
- Este es el código de golf , por lo que la respuesta más corta en bytes gana.
No permita que los lenguajes de código de golf lo desalienten de publicar respuestas con idiomas que no sean de codegolf. Trate de encontrar una respuesta lo más breve posible para 'cualquier' lenguaje de programación. - Las reglas estándar se aplican a su respuesta con las reglas de E / S predeterminadas , por lo que puede usar STDIN / STDOUT, funciones / método con los parámetros adecuados y programas completos de tipo retorno. Tu llamada.
- Las lagunas predeterminadas están prohibidas.
- Si es posible, agregue un enlace con una prueba para su código (es decir, TIO ).
- Además, se recomienda agregar una explicación para su respuesta.
Casos de prueba
Obviamente, dado que puede generar cualquier valor posible, es difícil definir casos de prueba estrictos.
Algunos casos con un posible valor de retorno válido :
[10,0,10,5,8,8,0] -> "Q ZKJX "
[1,1,1,1,1,1,1] -> "EEEEEEE"
[1,2,3,4,5,8,0] -> "NDBHKJ "
[2,2,2,2,2,2,2] -> "DGDGDGD"
Algunos casos con un valor de retorno no válido :
[10,0,10,5,8,8,0] -> "Q QKJX " - Too many Qs
[1,1,1,1,1,1,1] -> "EEEEEE " - Space is 0 points not 1
[1,2,3,4,5,8,0] -> "NDBH" - Too short
[1,2,3,4,5,8,0] -> "NDBHKJ I" - Too long
[1,2,3,4,5,8,0] -> "ÉDBHKJ1" - Contains none scrabble characters
[2,2,2,2,2,2,2] -> "GDGDGDG" - Contains too many Gs (case for invalid cycling)
[2,2,2,2,2,2,2]
(el único caso en el que es importante comenzar con un método de ciclismo enD
lugar de unoG
si se usa)Respuestas:
JavaScript (ES6), 72 bytes
Una variante más corta sugerida por @supercat
Pruébalo en línea!
JavaScript (ES6),
137 ... 84 78 7776 bytesAhorró 10 bytes usando el método de ciclismo de Neil
Devuelve una lista de mosaicos. Usos
_
para azulejos en blanco.Pruébalo en línea!
¿Cómo?
Para cada número de puntos, recorremos un grupo de exactamente 4 mosaicos, comenzando con el segundo mosaico de cada grupo (esto es importante para
G
vsD
):Todos estos grupos se almacenan como una sola cadena de 31 caracteres:
NB : No necesitamos para almacenar la final
"_"
en"_XJ_"
, ya que nunca se tendrá acceso de todos modos.El número de puntos se convierte al índice correcto en esta cadena con:n in
La posición actual en cada grupo se almacena en el objeto .o
fuente
a=>a.map(o=n=>('?ED?BWQ?_EG?CFZ?_EDJMH?K?EGXPV'[n*9.4+(o[n]=7-~o[n])&31]))
. Una versión más corta, "casi",a=>a.map(o=n=>("_EDBFK_EDCHJQEGMVXZEGPW"[n+(o[n]=5-~o[n])%24]))
pero ese enfoque necesitaría una forma compacta de mapear los valores 8 y 10 en 11 y 12, más un ligero ajuste a la cadena para solucionar un problema fuera de uno.'_??VKWZHQFP?M?CGBGXDJD'[(n*96+(o[n]=32-~o[n]))%68%33]||'E'
, con una cadena de búsqueda de solo 22 caracteres. Sin embargo, el código completo sigue siendo 2 bytes más largo que su solución.Carbón , 33 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
fuente
Gelatina ,
31 30 2726 bytesUn enlace monádico que acepta una lista de enteros que produce una lista de caracteres.
- una mezcla de mis anteriores, a continuación, y mi mejora de Nick Kennedy
Pruébalo en línea!
La salida no se da en el mismo orden que la entrada (esto está permitido).
¡Usar 2 de mis propias adiciones al idioma en una respuesta no sucede a menudo! (
ṃ
yɓ
aquí)¿Cómo?
anterior @ 30
Un enlace monádico que acepta una lista de enteros que produce una lista de caracteres.
Pruébalo en línea!
La salida de este también es mixta (esto está permitido).
¿Cómo?
fuente
' NWGMZQ'
después del índice multidimensional en sería una hazaña sin ningunoW
en la cadena. ;)Pyth -
9286838180756052494236 bytesRecorre la entrada, sacando las letras disponibles. Solo tengo una de cada letra que juntas da 7 para esa categoría de puntos. Ahora usando la codificación de cadena empaquetada.
Por cierto, esta es la cadena original de la carta antes de la codificación:
"_ E DG BCMP FHVW K JX QZ"
.Pruébalo en línea .
fuente
Perl 5 , 71 bytes
Pruébalo en línea!
fuente
05AB1E ,
70523938292625 bytes-18 bytes gracias a @ExpiredData .
-13 bytes mediante el uso de la misma se extienden a tamaño 7 de @Maltysen Pyth respuesta 's .
-9 bytes creando un puerto de la respuesta Jelly de @JonathanAllan , ¡así que asegúrate de votarlo!
-3 bytes gracias a @Emigna .
Da como resultado una lista de caracteres y utiliza letras minúsculas y un espacio para espacios en blanco.
Pruébelo en línea o verifique algunos casos de prueba más .
Explicación:
Ver este consejo 05AB1E mío (sección Cómo comprimir cadenas que no forman parte del diccionario? ) Para entender por qué
.•3Oû}α›ηö‡.ÝŽ{•
es"endgmpfykkzzzzjxzzqz "
.Respuesta anterior de 38 bytes:
Pruébelo en línea o verifique algunos casos de prueba más .
Explicación:
Ver este consejo 05AB1E mío (sección Cómo comprimir cadenas que no forman parte del diccionario? ) Para entender por qué
.•Mñ&Àû«ì{₆v*Å+µ-•
es"e dg bcmp fhvw k jx qz"
.fuente
" 0eeeeeee0ddddggg0bbccmmp0ffhhvvw0k000jx00qz"
?{v
lugar de7F
y eny
lugar deI{Nè
.C (gcc) , 110 bytes
Pruébalo en línea!
Utiliza la
_
matriz como un índice en la cadena estática"DDDDGGGBBCCMMPFFHHVVWKJXQZ"
dinámicamente con excepciones para 0 y 1.El argumento es una
-1
matriz de puntuaciones terminada que se transforma en el lugar en una-1
cadena terminada.fuente
C # (compilador interactivo de Visual C #) ,
10490 bytesPruébalo en línea!
fuente
Jalea ,
3432 bytesPruébalo en línea!
No había visto una respuesta Jelly más corta cuando escribí esto, y esto usa un enfoque diferente, así que pensé que valía la pena publicarlo también.
¡Gracias a @JonathanAllan por guardar 2 bytes!
fuente
ṃ
, puede guardar 2 bytesPython 3 ,
178,142,135,127,112,117 bytesPruébalo en línea!
-1 byte gracias a cdlane
correcto gracias a Mathmandan
fuente
d=list(map(list,"...".split('_')))
guardar otro bytef
probablemente no necesita ser identificado, lo que puede ahorrar 2 bytes. Sin embargo,f
consume las entradas ded
, por lo que no estoy seguro de que cumpla con el requisito de consenso de que "la función tiene que ser reutilizable de manera arbitraria a menudo, sin ... reiniciar ... ningún otro código que acompañe el envío". (Por ejemplo, ejecutarf([10,0,10,5,8,8,0])
más de una vez daría lugar a un error). Consulte la meta discusión aquí: codegolf.meta.stackexchange.com/a/7615/36885Python 2 , 102 bytes (¿o quizás 95?)
(También está bien para Python 3.)
Pruébalo en línea!
No creo que lo siguiente sea aceptable:
Esta segunda versión daría salida como
['__', 'JX', 'QZ', 'K']
. Entonces las letras serían correctas, pero se recogerían por valor de punto. (Si esto fuera aceptable, ahorraría 7 bytes).fuente
PHP , 101 bytes
Como un programa independiente, ingrese a través de la línea de comando:
Pruébalo en línea!
O 112 bytes como una función
Pruébalo en línea!
Salida
fuente
Ruby ,
7776 bytesPruébalo en línea!
fuente
Perl 6 , 63 bytes
Pruébalo en línea!
Por lo tanto, esencialmente mantiene una búsqueda de desplazamientos para cada valor de mosaico y los incrementa según sea necesario, utilizando el desplazamiento para extraer un carácter del conjunto disponible.
fuente