Un tablero de Scrabble estándar es una cuadrícula de espacios de 15 × 15 para colocar fichas de letras. La mayoría de los espacios están en blanco, pero algunos son puntajes de palabras dobles (rosa), puntajes de palabras triples (rojo), puntajes de letras dobles (azul claro) y puntajes de letras triples (azul). Por lo general, hay una estrella en el centro (que cuenta como una puntuación de doble palabra).
Escriba un programa o función que genere una placa Scrabble vacía estándar en formato ASCII donde:
.
representa un espacio vacíoD
representa una puntuación de doble palabraT
representa una puntuación de tres palabrasd
representa una puntuación de doble letrat
representa una puntuación de tres letrasX
representa la estrella central
Es decir, su salida exacta debe ser
T..d...T...d..T
.D...t...t...D.
..D...d.d...D..
d..D...d...D..d
....D.....D....
.t...t...t...t.
..d...d.d...d..
T..d...X...d..T
..d...d.d...d..
.t...t...t...t.
....D.....D....
d..D...d...D..d
..D...d.d...D..
.D...t...t...D.
T..d...T...d..T
opcionalmente seguido de una nueva línea final.
El código más corto en bytes gana.
fuente
X
y no*
representar a la estrella? : o*
es demasiado alto y poderoso★
? : DRespuestas:
MATL ,
595452 bytesPruébalo en línea!
Explicación
El código sigue tres pasos principales:
Genera la matriz 8x8
Extiéndelo a la matriz 15x15
Indice la cadena
'DtdTX.'
con esa matriz para producir el resultado deseado.Paso 1
Ahora necesitamos completar las entradas no diagonales distintas de cero. Solo llenaremos los que están debajo de la diagonal y luego haremos uso de la simetría para llenar los otros.
Para completar cada valor usamos indexación lineal (vea esta respuesta , fragmento de longitud 12). Eso significa acceder a la matriz como si solo tuviera una dimensión. Para una matriz de 8 × 8, cada valor del índice lineal se refiere a una entrada de la siguiente manera:
Entonces, lo siguiente asigna el valor 4 a la entrada inferior izquierda:
El código para el valor 3 es similar. En este caso, el índice es un vector, porque necesitamos llenar varias entradas:
Y para 2:
Ahora tenemos la matriz
Para llenar la mitad superior, explotamos la simetría:
Paso 2
La pila ahora contiene la matriz 8 × 8 resultante del paso 1. Para extender esta matriz, usamos indexación, esta vez en las dos dimensiones.
Paso 3
La pila ahora contiene la matriz 15 × 15 resultante del paso 2.
fuente
Ruby,
10397 bytesGracias a Mitch Schwartz por una mejora de 6 bytes en las iteraciones.
Un enfoque similar pero significativamente diferente a mi respuesta original a continuación. Como antes, usamos el hecho de que una letra debe imprimirse si
i%7-j%7
es igual a 0 o 4. Pero aquí almacenamos esa diferenciad
y usamos la fórmulai+j+d*d/3
para dar un número entero que sea único (hasta la simetría) para ese cuadrado de color en particular. Luego lo buscamos en la cuerda mágica.Solo por diversión: versión C de este enfoque, 120 bytes
Ruby,
115113 bytes2 bytes guardados gracias a Value Ink.
Explicación
El origen se considera el centro del tablero.
Se debe imprimir una letra si las coordenadas x e y del cuadrado tienen magnitudes que son idénticas o difieren en 4. Las únicas excepciones están en el borde exterior del tablero, pero siguen el mismo patrón que la fila / columna central del bordo, por lo que podemos usar la misma condición si tomamos las coordenadas x e y módulo 7.
La elección de la letra que se muestra se basa en la coordenada de magnitud mínima. De esta manera, los dobles y triples en (1,5) y (2,6) siguen la misma regla que en (1,1) y (2,2) y se obtienen de la cadena de 7 caracteres
"#{formula}dtDDDD"
Esto no cubre todas las variaciones para los cuadrados de borde y línea central, por lo que el primer carácter de la cadena se calcula a partir de la fórmula'XdTdT'[(i+j)/3]
.fuente
(k=-7..7).map{|y|k.map{...
es 2 bytes más corto que tu-7.upto(7)
técnica doble .a=(-7..7).map &:abs;a.map{|i|puts a.map{|j|(d=i%7-j%7)%4<1?'X d t DTDdDdDtT d'[i+j+d*d/3]:?.}*''}
brainfuck ,
598596590 bytesConsejos de golf bienvenidos.
Explicación
Inicialice la cinta a [10 116 68 46 100 84 92] es decir [nl t D. d T \]
>-[++++[<]>->+]<[>++++>+++++>+++>++<<<<-]>[>>>>+>+>+<<<<<<-]<++++++++++[>+>>>>+>-<<<<<<-]>>+>->>-->++
Cada línea aquí imprime una línea del tablero.
La línea media también disminuye
92 to 88 i.e. \ to X
Pruébalo en línea!
fuente
PowerShell v2 +, 147 bytes
Aprovecha cómo el valor predeterminado
Write-Output
al final de la ejecución del programa maneja las matrices (es decir, inserta una nueva línea entre los elementos). Podría ser una mejor manera de generar el medio del tablero, todavía estoy trabajando en ello.La primera línea da salida a la línea superior de la placa, y también la almacena
$x
para su uso posterior.La siguiente línea genera todas las líneas de doble palabra tomando la "mitad" izquierda de cada una, reflejándolas (la
-join$_[6..0]
declaración) y almacenándolas como elementos en la matriz$y
.La siguiente línea es la fila del medio, con un
X
en el medio, gracias a-replace
.La siguiente línea sale
$y
en orden inverso, dándonos las líneas de doble palabra inferiores.La línea final es solo
$x
otra vez.fuente
> <> (Pez), 153 Bytes
Una forma horrible, horrible e ineficiente de hacer las cosas. Actualmente estoy buscando una forma de acortarlo reflejando tanto horizontal como verticalmente correctamente.
Pruébalo en línea! (Si no quieres estar allí todo el día, asegúrate de establecer la velocidad de ejecución al máximo o correr sin la animación).
fuente
C,
146145142138 bytesPruébalo en línea!
1 byte5 bytes guardados gracias a Level River StEsto explota el patrón diagonal de la placa para la codificación. En particular, si tomamos el cuadrante superior izquierdo del tablero y alineamos la diagonal, obtenemos:
... muchas de las columnas ahora se alinean. Si codificamos columnas en una línea de esta manera:
... entonces el patrón del tablero se puede plegar en una cadena de 15 caracteres:
T..12..0..12..0
; y simplemente necesitamos las asignaciones correctas para cada fila.Con eso en mente, aquí hay una versión ampliada con comentarios:
fuente
i,r,c;f()
está bien. 2.(i%16-7)%8
->i%16-7&7
3. Creo quec-48
->c%4
funciona, ¿no?f()
lo que requeriría un adicionali=0
dentro de la función para que no guarde nada.%8
usa los módulos negativos de la implementación para asignar% 16 valores 0..15 a -7..7; asignaría&7
esto a 0..7,0..7). Pero sí, 3 funcionará absolutamente ... se actualizará cuando tenga la oportunidad.05AB1E ,
5753 bytesCódigo
Utiliza la codificación CP-1252 . Pruébalo en línea!
Explicación (obsoleta)
El
•4ç“–šã&$W§ñçvßÖŠ_æá_VFÛÞýi~7¾¬ÏXôc•5B
descomprime a este número:Con
4ÝJ".TdtD"‡
, transcribimos lo siguiente en este gran número:Bifurcamos toda la cadena, dejando la cadena y la cadena invertidas en la pila y las unimos
"X"
usandoý
. Dividimos la cadena completa en pedazos de 15 usando el15ô
código th y unimos toda la matriz mediante líneas nuevas usando»
.fuente
û€û
debe ser un incorporado;).Python 3, 138 bytes
fuente
list(map(A))
a[*map(A)]
, guarda 3 bytes (requiere Python 3.5+).05AB1E ,
4944 bytesPruébalo en línea!
Explicado:
Empujar:
1003000104000200004000303004000300004000020002000030003010030005
Dividir en trozos de 8, palindromize cada uno.
Palindromizar de nuevo.
Reemplazar números con caracteres.
Otra idea (alguien intente esto en MATL)
Ya que TODO está comprometido a tener un período intermedio ...
Cuente el número de ceros entre cada pieza:
131424334342233135 => w\F6ß¿
Tomando los recuentos de ceros se ejecuta:
23134312344343123 => ì:¼˜¾
Entonces los descifraría y los transpondría juntos.
Usarlos en 05AB1E (resulta en un aumento de +5 bytes):
05AB1E , 27 bytes
Intentalo...
Entrada de meta-golf:
05AB1E , 104 bytes
¡Intentalo!
Meta-golfed usando mi meta-jugador de golf para el arte ASCII: https://tio.run/nexus/05ab1e#JY9NSgNBEIWvUo4/qAQxyfi30yAioiAiuBM6M9U9DT3doao7ccBFrhI3ooss3QguJniRXCR2x01RfK9479Xqtf2@XHy2H78/tw/L6aydq8VXr5sPsuX0LeP1jCwbJD3r54v3dp5mFGbZzWp1wXBPyLpE6@GRQj0C1spiCQJ4gjjSVgG@YBG8HiM4KpHAWbgiXYqmA1wF79ONrxCGa5nBOyCUQSEyCFuCi2LEklwNjGO0YAQpNA3cBTa6hsIF60kjd9Y@jAWhF9SAk1C5Gk1yiTSQ9g1MBKcKAp4q7RGuXWCMFlYioS3iKowBhf@9Kh2DNbEHGSIexhSZeDRIUcq4oTDxDS09aAsjZ3TRHGycb25tP@/s7@51e/386Pjk9OzwDw
fuente
Javascript (ES6), 150 bytes
Cómo funciona
La cadena
"T2d3T3d2T.D3t3t3D3D3d.d3D2d2D3d3D2d4D5D5t3t3t3t3d3d.d3d2T2d3"
describe el tablero desde su esquina superior izquierda hasta el cuadrado justo antes de la 'X', con cuadrados vacíos consecutivos codificados como dígitos. Lareplace()
función desempaqueta los cuadrados vacíos y crea la cadena de espejor
para la parte inferior del tablero. Luego se juntan ambas partes y se insertan retornos de carro cada 15 caracteres.Manifestación
fuente
JavaScript (ES6), 221 bytes
Desde que me tomé la molestia de crear esto, pensé en publicarlo de todos modos, aunque hay una solución claramente superior disponible.
fuente
C 234 bytes
Aquí está la salida:
fuente
Carbón , 33 bytes (sin competencia)
Todo el crédito por esta respuesta va a @DLosc .
Pruébalo en línea!
Verboso
Pruébalo en línea!
fuente
Haskell, 114 bytes
g
en una versión sin puntos esg x = x ++ (reverse (init x))
. Se aplica una vez por (media) línea y nuevamente sobre el resultado.fuente
sh + coreutils, 119 bytes
Este es un archivo binario. Mostrado como hexdump:
Aquí está el formulario base64 para que pueda copiarlo / pegarlo:
fuente
C
230228 Bytespruébalo en ideone
Este es un intento de mejorar la versión C original publicada que tenía un cuarto de placa almacenada en una matriz C. No tan corto como esperaba. Esta versión solo tiene un octavo de la placa almacenada.
Sin golf:
fuente
GNU sed,
219205bytesAprovechando la simetría de espejo del tablero, la segunda mitad es la primera que se almacenó en orden inverso en el espacio de espera.
fuente