Dada la entrada n
, produzca una cuadrícula de palabras de tamaño n
, en el menor número de bytes posible.
Detalles
El número proporcionado siempre será impar. El cuadrado central de la cuadrícula siempre debe estar vacío (un carácter de espacio). Las letras que llenan la cuadrícula deben elegirse al azar de la distribución de letras en inglés Scrabble . Es decir, cada ficha debe elegirse al azar, con probabilidad uniforme, de los siguientes 100 caracteres:
??EEEEEEEEEEEEAAAAAAAAAIIIIIIIIIOOOOOOOONNNNNNRRRRRRTTTTTTLLLLSSSSUUUUDDDDGGGBBCCMMPPFFHHVVWWYYKJXQZ
donde ?
denota mosaicos en blanco.
Al igual que con un tablero de Scrabble, algunas fichas en este tablero también serán fichas de bonificación para una puntuación más alta. Estas fichas solo son visibles en un tablero con un tamaño de 9 o más. y debe ser visible cada 3 filas desde el cuadrado central en un patrón que emana hacia afuera, pero nunca debe aparecer en las letras más externas. Los cuadrados de bonificación se denotan con letras minúsculas, con mosaicos en blanco identificados como en !
lugar de ?
. Consulte esta demostración visual o la implementación de referencia para obtener más ejemplos sobre cómo distribuir correctamente los mosaicos de bonificación.
Ejemplos
Entrada: 5
Salida:
VNZNT
IFOSN
UD VD
ZIOO?
KTLED
Entrada: 9
Salida:
UWDESTKPW
ItDBaDEdI
TERMDYSTR
ROANJLEFT
EkCI OOsT
IPAJPGM?Y
MZLORETVI
G!EGgPUeI
MNROYOEER
Implementación de referencia .
Reglas
Este es el código de golf, por lo que gana el código más corto en bytes.
- Se puede usar cualquier formato razonable para E / S, suponiendo que sea coherente.
- Debe poder manejar cuadrículas de al menos hasta 999.
- Todas las lagunas estándar están prohibidas.
Respuestas:
Gelatina ,
67 65 64 66 6463 bytesUn enlace monádico que toma un número y devuelve una lista de caracteres, o un programa completo que imprime el resultado.
Pruébalo en línea! (Prefiero usarlo en
G
lugar de hacerlo,Y
ya que es más cuadrado )¿Cómo?
fuente
?
con!
cuando están en la posición de baldosas de bonificación, me encontré con un par de conjuntos (más fácil de detectar en los9
s!) Lo siento ...⁾?!y
significa exactamente eso, pero parece fallar.?
s) Lo arreglaré ahora ...R ,
288281267257225214 bytesgracias a @cole por -1 byte, reordenando el
?
para colapsar el 2 enrep(2,10)
-10 bytes dándose cuenta de que
row(m) == t(col(m))
-41 bytes gracias al usuario 2390246 por reconfigurar los pesos, jugar golf por la indexación y algunos consejos R más habituales
Pruébalo en línea!
Devuelve una matriz. Implementación bastante simple; muestra n ^ 2 valores con la distribución adecuada, se almacena como una
nxn
matriz.K
Es el índice del centro.L=col(m)
es una matriz que indica el número de columna de cada elemento en la matriz. Por lo tanto, calculamos!(L-K)%%3
para obtener las posibles columnas (incluidos los bordes), es decir, aquellas a un múltiplo de 3 de la columna central. Para eliminar los bordes, consideramosL-1
yL-n
.L-1
es0
(falso) para la primera columna yL-n
es0
para la última columna. La aplicación&
(elemento booleanoAND
) a estos tres produce una matriz conTRUE
en esas columnas un múltiplo de tres fuera del centro, excluyendo los bordes. Almacenamos este resultado comox
.Si tomamos la transposición de
x
,t(x)
obtenemos la misma matriz, pero para las filas, porx&t(x)
lo tanto, es una matriz que guardamos como quei
contiene:TRUE
índices para las celdas requeridas y enFALSE
todas partes.Luego, usamos
chartr
para realizar la transformación requeridam[i]
y guardar el resultado comom[i]
, cambiar la celda central a un espacio y devolver la matriz.Es importante destacar que, como señaló el usuario 2390246 , no necesitamos hacer una prueba
n>=9
porquen<7
, para , no hay celdas a un múltiplo de 3 del centro (aparte del centro que se cambia a un espacio de todos modos), y paran==7
, las únicas celdas un múltiplo de 3 desde el centro están en el borde, por lo que están excluidos. ¡Ordenado!fuente
?
a la parte de la cadena correspondiente arep(2,9)
y simplemente aumentar eso arep(2,10)
?2,
y gana 1 para10
.rep(c(12,8,9,6,4:1),c(1,1:4,1,10,5))
ahorra 10 bytes. (Deberá cambiar el orden de las letras a EOAI ...)JavaScript (ES6),
247242bytes-5 bytes con ayuda de @Shaggy
Fragmento de prueba
Mostrar fragmento de código
fuente
c
una de las llamadas ag
.Perl 6 ,
162161154153 bytesPruébalo en línea!
Toma (n-3) / 2 como entrada, devuelve una lista de listas de letras.
Explicación:
fuente
Perl 5 ,
246244+ 1 (-n
) =247245bytesPruébalo en línea!
fuente
[C64 básico v2,
210209 bytes]Una entrada
n
5 se puede especificar comoEse "5" hasta el final debe cambiarse a cualquier número impar. No dé más de 25, entonces el programa se sobrescribirá.
Cómo probarlo: google para "vice c64 emulator", instálalo y copia y pega este código básico en él. Para iniciar el programa, escriba:
RUN
. Para borrar la pantalla, presione shift / home.Y el resultado:
fuente
FOR
se tokenzied comofO
. OGOTO
comogO
. Podría haberlo hecho también interactivo, pero desafortunadamente elINPUT
comando es una excepción, no tiene un token. Es por eso que la entrada se debe dar con elDATA
comando, cuyo token esdA
.Python 3 ,
214236240 bytesPruébalo en línea!
La multiplicidad de cada personaje se expresa como la suma de las potencias de dos, por ejemplo
12 = 8 + 4 => "E"*12 = "E"*2*2*2 + "E"*2*2
.((i-n//2)%3+(j-n//2)%3<1)*(i*j>0)*(i<n-1)*(j<n-1)
Probablemente pueda jugar al golf.fuente
i<n
siempre fue cierto, incluso cuandoi=n-1
(abajo). Lo mismo paraj
.