Uma placa Scrabble padrão é uma grade de 15 × 15 para colocar blocos de letras. A maioria dos espaços está em branco, mas alguns são notas duplas de palavras (rosa), notas triplas de palavras (vermelho), notas duplas de letras (azul claro) e notas triplas de letras (azul). Geralmente, há uma estrela no centro (que conta como uma pontuação de duas palavras).
Escreva um programa ou função que produza uma placa Scrabble vazia e padrão no formato ASCII, onde:
.
representa um espaço vazioD
representa uma pontuação de palavra duplaT
representa uma pontuação tripla de palavrasd
representa uma pontuação de duas letrast
representa uma pontuação de três letrasX
representa a estrela central
Ou seja, sua saída exata deve 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 por uma nova linha à direita.
O código mais curto em bytes vence.
fonte
X
e não*
representar a estrela? : o*
é muito alto e poderoso.★
? : DRespostas:
MATL ,
595452 bytesExperimente online!
Explicação
O código segue três etapas principais:
Gere a matriz 8x8
Estenda-o para a matriz 15x15
Indexe a string
'DtdTX.'
com essa matriz para produzir o resultado desejado.Passo 1
Agora precisamos preencher as entradas fora de diagonal diferentes de zero. Apenas preencheremos os que estão abaixo da diagonal e usaremos simetria para preencher os outros.
Para preencher cada valor, usamos a indexação linear (consulte esta resposta , trecho de comprimento 12). Isso significa acessar a matriz como se tivesse apenas uma dimensão. Para uma matriz 8 × 8, cada valor do índice linear refere-se a uma entrada da seguinte maneira:
Portanto, o seguinte atribui o valor 4 à entrada inferior esquerda:
O código para o valor 3 é semelhante. Nesse caso, o índice é um vetor, porque precisamos preencher várias entradas:
E para 2:
Agora temos a matriz
Para preencher a metade superior, exploramos a simetria:
Passo 2
A pilha agora contém a matriz 8 × 8 resultante da etapa 1. Para estender essa matriz, usamos a indexação, desta vez nas duas dimensões.
etapa 3
A pilha agora contém a matriz 15 × 15 resultante da etapa 2.
fonte
Ruby,
10397 bytesAgradecemos a Mitch Schwartz por uma melhoria de 6 bytes nas iterações.
Uma abordagem semelhante, mas significativamente diferente da minha resposta original abaixo. Como antes, usamos o fato de que uma letra deve ser impressa se
i%7-j%7
for igual a 0 ou 4. Mas aqui armazenamos essa diferençad
e usamos a fórmulai+j+d*d/3
para fornecer um número inteiro único (até simetria) para esse quadrado colorido específico. Então nós apenas procuramos na corda mágica.Apenas por diversão: versão C dessa abordagem, 120 bytes
Ruby,
115113 bytes2 bytes salvos graças ao Value Ink.
Explicação
A origem é considerada o centro do quadro.
Uma letra deve ser impressa se as coordenadas xey do quadrado tiverem magnitudes idênticas ou diferentes de 4. As únicas exceções estão na borda externa do quadro, mas seguem o mesmo padrão que a linha / coluna central da para que possamos usar a mesma condição se usarmos o módulo 7 das coordenadas x e y.
A escolha da letra exibida é baseada na coordenada de magnitude mínima. Dessa maneira, os duplos e triplos em (1,5) e (2,6) seguem a mesma regra que em (1,1) e (2,2) e são obtidos a partir da sequência de 7 caracteres.
"#{formula}dtDDDD"
Isso não cobre todas as variações para os quadrados da aresta e da linha central, então o primeiro caractere da sequência é calculado a partir da fórmula'XdTdT'[(i+j)/3]
.fonte
(k=-7..7).map{|y|k.map{...
é 2 bytes menor que sua-7.upto(7)
técnica dupla .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 bytesDicas de golfe são bem-vindas.
Explicação
Inicialize a fita para [10 116 68 46 100 84 92] ou seja, [nl t D. d T \]
>-[++++[<]>->+]<[>++++>+++++>+++>++<<<<-]>[>>>>+>+>+<<<<<<-]<++++++++++[>+>>>>+>-<<<<<<-]>>+>->>-->++
Cada linha aqui imprime uma linha do quadro.
A linha do meio também diminui
92 to 88 i.e. \ to X
Experimente online!
fonte
PowerShell v2 +, 147 bytes
Aproveita como o padrão
Write-Output
no final da execução do programa lida com matrizes (ou seja, ele insere uma nova linha entre os elementos). Pode ser uma maneira melhor de gerar o meio do quadro - ainda estou trabalhando nisso.A primeira linha gera a linha superior da placa, também a armazena
$x
para uso posterior.A próxima linha gera todas as linhas de palavra dupla pegando a "metade" esquerda de cada uma, espelhando-as (a
-join$_[6..0]
instrução) e armazenando-as como elementos na matriz$y
.A próxima linha é a linha do meio, com um
X
no meio, graças a-replace
.A próxima linha é impressa
$y
na ordem inversa, fornecendo as linhas inferiores de duas palavras.A linha final é apenas
$x
novamente.fonte
> <> (Peixe), 153 bytes
Uma maneira horrível, terrivelmente ineficiente de fazer as coisas. Atualmente, procurando uma maneira de reduzi-lo, espelhando horizontal e verticalmente corretamente.
Experimente online! (Se você não quiser ficar lá o dia todo, defina a velocidade de execução como max ou execute sem a animação.)
fonte
C,
146145142138 bytesExperimente online!
1 byte5 bytes economizados graças ao Level River StIsso explora o padrão diagonal da placa para codificação. Em particular, se pegarmos o quadrante superior esquerdo do quadro e alinhar a diagonal, obtemos:
... muitas colunas agora estão alinhadas. Se codificarmos colunas em uma linha desta maneira:
... então o padrão de bordo podem ser recolhidas em uma seqüência de 15 caracteres:
T..12..0..12..0
; e simplesmente precisamos dos mapeamentos certos para cada linha.Com isso em mente, aqui está uma versão expandida com comentários:
fonte
i,r,c;f()
bem. 2.(i%16-7)%8
->i%16-7&7
3. Eu achoc-48
->c%4
funciona, não é?f()
isso exigiria um adicionali=0
dentro da função para não salvar nada.%8
usa os módulos negativos da implementação para mapear% 16 valores 0..15 a -7..7; mapeará&7
isso para 0..7,0..7). Mas, sim, 3 funcionará absolutamente ... será atualizado quando eu tiver uma chance.05AB1E ,
5753 bytesCódigo
Usa a codificação CP-1252 . Experimente online!
Explicação (desatualizada)
O
•4ç“–šã&$W§ñçvßÖŠ_æá_VFÛÞýi~7¾¬ÏXôc•5B
descompacta para este número:Com
4ÝJ".TdtD"‡
, transliteramos o seguinte neste grande número:Bifurcamos a string inteira, deixando a string e a string invertidas na pilha e juntando-as
"X"
usandoý
. Dividimos a sequência inteira em pedaços de 15 usando o15ô
código th e juntamos toda a matriz por novas linhas usando»
.fonte
û€û
deve ser um built-in;).Python 3, 138 bytes
fonte
list(map(A))
para[*map(A)]
, economiza 3 bytes (requer Python 3.5+).05AB1E ,
4944 bytesExperimente online!
Explicado:
Empurrar:
1003000104000200004000303004000300004000020002000030003010030005
Divida em pedaços de 8, palindromize cada um.
Palindromize novamente.
Substitua números por caracteres.
Outra idéia (alguém tente fazer isso em MATL)
Visto que TUDO é voluntário para ter um período entre ele ...
Conte o número de zeros entre cada peça:
131424334342233135 => w\F6ß¿
Tomando a contagem de zeros:
23134312344343123 => ì:¼˜¾
Então você os descriptografaria e transporia juntos.
Utilizando-os em 05AB1E (resulta em um aumento de +5 bytes):
05AB1E , 27 bytes
Tente...
Entrada com meta-golfe:
05AB1E , 104 bytes
Tente!
-Meta golfed usando a minha meta-golfista para a arte ASCII: https://tio.run/nexus/05ab1e#JY9NSgNBEIWvUo4/qAQxyfi30yAioiAiuBM6M9U9DT3doao7ccBFrhI3ooss3QguJniRXCR2x01RfK9479Xqtf2@XHy2H78/tw/L6aydq8VXr5sPsuX0LeP1jCwbJD3r54v3dp5mFGbZzWp1wXBPyLpE6@GRQj0C1spiCQJ4gjjSVgG@YBG8HiM4KpHAWbgiXYqmA1wF79ONrxCGa5nBOyCUQSEyCFuCi2LEklwNjGO0YAQpNA3cBTa6hsIF60kjd9Y@jAWhF9SAk1C5Gk1yiTSQ9g1MBKcKAp4q7RGuXWCMFlYioS3iKowBhf@9Kh2DNbEHGSIexhSZeDRIUcq4oTDxDS09aAsjZ3TRHGycb25tP@/s7@51e/386Pjk9OzwDw
fonte
Javascript (ES6), 150 bytes
Como funciona
A string
"T2d3T3d2T.D3t3t3D3D3d.d3D2d2D3d3D2d4D5D5t3t3t3t3d3d.d3d2T2d3"
descreve o quadro do canto superior esquerdo ao quadrado imediatamente antes do 'X', com quadrados vazios consecutivos codificados como dígitos. Areplace()
função descompacta os quadrados vazios e constrói a sequência de espelhosr
para a parte inferior do tabuleiro. Em seguida, ambas as peças são reunidas e os retornos de carro são inseridos a cada 15 caracteres.Demo
fonte
JavaScript (ES6), 221 bytes
Desde que tive o trabalho de criar isso, pensei em publicá-lo de qualquer maneira, mesmo que exista uma solução claramente superior disponível.
fonte
C 234 bytes
Aqui está a saída:
fonte
Carvão , 33 bytes (não competitivo)
Todo o crédito para esta resposta vai para @DLosc .
Experimente online!
Verbose
Experimente online!
fonte
Haskell, 114 bytes
g
em uma versão não pointfree ég x = x ++ (reverse (init x))
. É aplicado uma vez por (meia) linha e novamente no resultado.fonte
sh + coreutils, 119 bytes
Este é um arquivo binário. Mostrado como hexdump:
Aqui está o formulário base64 para que você possa copiá-lo / colá-lo:
fonte
C
230228 bytesexperimente ideone
Esta é uma tentativa de melhorar a versão C original postada que tinha um quarto de placa armazenado em uma matriz C. Não tão curto quanto eu esperava. Esta versão possui apenas um oitavo do quadro armazenado.
Ungolfed:
fonte
GNU sed,
219205 bytesAproveitando a simetria de espelho da placa, a segunda metade é a primeira que foi armazenada em ordem inversa no espaço de espera.
fonte