Dada a entrada n
, produza uma grade de palavras de tamanho n
, no menor número possível de bytes.
Detalhes
O número fornecido sempre será ímpar. O quadrado central da grade sempre deve estar vazio (um caractere de espaço). As letras que preenchem a grade devem ser escolhidas aleatoriamente na distribuição das letras em inglês Scrabble . Ou seja, cada bloco deve ser escolhido aleatoriamente, com probabilidade uniforme, dos 100 caracteres a seguir:
??EEEEEEEEEEEEAAAAAAAAAIIIIIIIIIOOOOOOOONNNNNNRRRRRRTTTTTTLLLLSSSSUUUUDDDDGGGBBCCMMPPFFHHVVWWYYKJXQZ
onde ?
indica peças em branco.
Assim como em um tabuleiro de Scrabble, algumas peças deste tabuleiro também serão peças de bônus para uma pontuação mais alta. Esses blocos são visíveis apenas em um tabuleiro com um tamanho de 9 ou mais. e deve estar visível a cada 3 linhas do quadrado central em um padrão que emana para fora, mas nunca deve aparecer nas letras mais externas. Quadrados de bônus são indicados usando letras minúsculas, com blocos em branco identificados como em !
vez de ?
. Consulte esta demonstração visual ou a implementação de referência para obter mais exemplos de como distribuir corretamente os blocos de bônus.
Exemplos
Entrada: 5
Resultado:
VNZNT
IFOSN
UD VD
ZIOO?
KTLED
Entrada: 9
Resultado:
UWDESTKPW
ItDBaDEdI
TERMDYSTR
ROANJLEFT
EkCI OOsT
IPAJPGM?Y
MZLORETVI
G!EGgPUeI
MNROYOEER
Regras
Isso é código-golfe, portanto o código mais curto em bytes vence.
- Qualquer formato razoável pode ser usado para E / S, assumindo que seja consistente.
- Você deve ser capaz de lidar com grades de pelo menos até 999.
- Todas as brechas padrão são proibidas.
Respostas:
Geléia ,
67 65 64 66 6463 bytesUm link monádico que pega um número e retorna uma lista de caracteres ou um programa completo que imprime o resultado.
Experimente online! (Eu prefiro usar
G
, em vez deY
uma vez que é mais quadrado )Quão?
fonte
?
com!
quando eles estão na posição telha bônus, eu corri alguns conjuntos (mais fácil de detectar nas9
s!) Desculpe ...⁾?!y
significa exatamente isso, mas parece falhar.?
)) Vou consertar isso agora ...R ,
288281267257225214 bytesgraças a @cole por -1 byte, reordenando o
?
para recolher o 2 emrep(2,10)
-10 bytes percebendo que
row(m) == t(col(m))
-41 bytes, graças ao user2390246 por reconfigurar os pesos, reduzir a indexação e algumas dicas R mais comuns
Experimente online!
Retorna uma matriz. Implementação bastante simples; amostras n ^ 2 valores com a distribuição adequada, armazena como uma
nxn
matriz.K
é o índice do centro.L=col(m)
é uma matriz que indica o número da coluna de cada elemento na matriz. Portanto, calculamos!(L-K)%%3
para obter as possíveis colunas (incluindo as arestas), ou seja, aquelas com um múltiplo de 3 de distância da coluna central. Para remover as arestas, consideramosL-1
eL-n
.L-1
é0
(falso) para a primeira coluna eL-n
é0
para a última coluna. A aplicação&
(booleano por elementosAND
) a esses três produz uma matriz comTRUE
nessas colunas um múltiplo de três distante do centro, excluindo as arestas. Armazenamos esse resultado comox
.Se tomarmos a transposição de
x
,t(x)
obteremos a mesma matriz, mas, para as linhas,x&t(x)
é uma matriz que salvamos comoi
contendo:TRUE
índices para as células necessárias e emFALSE
qualquer outro lugar.Em seguida, usamos
chartr
a execução da transformação necessáriam[i]
e salvamos o resultadom[i]
, alteramos a célula central para um espaço e retornamos a matriz.É importante ressaltar que user2390246 apontou que não precisamos testar
n>=9
porquen<7
, para , não há nenhuma célula a um número múltiplo de 3 distante do centro (além do centro que é alterado para um espaço de qualquer maneira) en==7
, para , as únicas células um múltiplo de 3 do centro está na aresta e é excluído. Arrumado!fonte
?
parte da string correspondenterep(2,9)
e apenas aumentá-la pararep(2,10)
?2,
e ganha 1 por10
.rep(c(12,8,9,6,4:1),c(1,1:4,1,10,5))
salva 10 bytes. (Você precisa mudar a ordem das cartas para EOAI ...)JavaScript (ES6),
247242 bytes-5 bytes com a ajuda de @Shaggy
Snippet de teste
Mostrar snippet de código
fonte
c
dentro de uma das chamadas parag
.Perl 6 ,
162161154153 153 bytesExperimente online!
Pega (n-3) / 2 como entrada, retorna uma lista de listas de letras.
Explicação:
fonte
Perl 5 ,
246244+ 1 (-n
) =247245bytesExperimente online!
fonte
[C64 básico v2,
210209 bytes]Uma entrada
n
5 pode ser especificada comoEsse "5" até o final deve ser alterado para qualquer número ímpar. Não dê mais de 25, o programa substituirá a si próprio.
Como experimentá-lo: pesquise no google por "vice c64 emulator", instale-o e copie e cole esse código básico nele. Para iniciar o programa, digite:
RUN
. Para limpar a tela, pressione Shift / Página inicial.E o resultado:
fonte
FOR
é tokenzied comofO
. OuGOTO
comogO
. Eu poderia ter feito isso também interativo, mas infelizmente oINPUT
comando é uma exceção, não possui um token. É por isso que a entrada deve ser fornecida com oDATA
comando, cujo token édA
.Python 3 ,
214236240 bytesExperimente online!
A multiplicidade de cada caractere é expressa como soma de potências de dois, por exemplo
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)
provavelmente pode ser jogado golfe.fonte
i<n
sempre foi verdade, mesmo quandoi=n-1
(embaixo). O mesmo paraj
.