Está provado que os 13 azulejos quadrados Wang a seguir sempre ladrilham o avião de forma periódica . Isso significa que, quando os quadrados são organizados em uma grade com todos os lados vizinhos da mesma cor, uma tradução do padrão nunca coincide com ela mesma.
Representaremos cada bloco textualmente por uma grade 3 × 3 preenchida com espaços no centro e nos cantos, e os números de 1 a 5 em vez das cores vermelho, verde, azul, amarelo, cinza, nas bordas:
2 2 2 1 1 1 4 3 2 2 4 3 2
1 2 1 3 2 3 2 1 3 1 3 2 4 4 4 4 4 5 4 5 5 5 5 5 5 4
3 2 3 2 3 2 1 2 1 4 1 2 2
Objetivo
Sua tarefa é escrever um programa que inclua largura e altura e produza uma grade de blocos Wang válida com essas dimensões. Uma peça válida é aquela em que todas as arestas adjacentes têm a mesma cor (ou número). O menor programa em bytes vence.
Sua entrada deve vir de argumentos stdin ou de linha de comando e a saída deve ir para stdout. O formato exato de entrada pode ser algo razoavelmente óbvio, como >>> wangtiler 3 2
. A largura e a altura são sempre números inteiros positivos.
Exemplo (largura = 3, altura = 2)
Observe que, quando projetamos os blocos de texto, as bordas vizinhas formam os pares de dígitos redundantes necessários:
1 2 1
2 11 22 1
2 3 2
2 3 2
4 55 55 4
1 2 2
(Este NÃO é o formato de saída adequado.)
Podemos compactá-los horizontal e verticalmente para obter:
1 2 1
2 1 2 1
2 3 2
4 5 5 4
1 2 2
Esse formato compactado é o formato de saída adequado que você deve usar. As linhas numeradas ímpares devem incluir seu espaço à direita.
Bônus Gráfico
Em vez de ter qualquer saída de texto, seu programa pode gerar uma imagem da grade lado a lado. Os ladrilhos gráficos devem ser compostos de quatro triângulos 45-45-90 dispostos em um quadrado e usar cinco cores facilmente distinguíveis, como os ladrilhos acima. As bordas pretas não são necessárias. Os blocos gráficos devem ter pelo menos 32 × 32 pixels de tamanho. Nenhuma "compressão" é aplicada a eles.
Exemplo de imagem de bônus: (mesma grade do exemplo acima)
O bônus vale menos 150 bytes.
Notas
- Você deve usar este conjunto de 13 peças.
- Os ladrilhos não podem ser girados.
- As peças podem aparecer várias vezes (incluindo nenhuma).
- Você pode assumir que é possível um ladrilho válido com todas as dimensões.
fonte
Respostas:
GolfScript, 200 caracteres
Versão ASCII sem saída gráfica. Dê a entrada no STDIN - tente aqui . O código usa uma abordagem simples de retorno e preenche o espaço linha por linha.
Exemplos:
Bônus gráfico, pontuação 122, 272 caracteres - 150 bônus
O mesmo código básico com um formatador de saída diferente. A saída é uma imagem no formato PPM (ou seja, basta redirecionar a saída para um arquivo
image.ppm
). As cores são ligeiramente diferentes dos ladrilhos da pergunta, mas são claramente distinguíveis (1-> azul, 2-> verde, 3-> ciano, 4-> vermelho, 5-> magenta).Exemplo 16x12:
fonte
Python (565 - 150 = 415)
Aliás ... parece que não podemos decidir ingenuamente apenas o próximo ladrilho pelo ladrilho esquerdo e superior. Há uma combinação de peças que se encaixam.
Essa solução preenche as forças brutas esquerda> direita, de cima para baixo através de todas as combinações e trilhas possíveis, se um ladrilho não puder caber.
Para obter mais informações sobre a prova de 13 peças : um conjunto aperiódico de 13 peças Wang
Largura e Altura são especificados por
W
eH
Vermelho, verde, azul, amarelo e Noir especificado por
R
,G
,B
,Y
eN
Saída. Não é o esquema de cores real ... porque muito gritante. Isso pode fazer alguns padrões interessantes de decoração de interiores ...:
fonte
Haskell, 208 bytes
Nenhuma pesquisa, apenas matemática. Exemplo de execução: dado
(8,5)
em stdin, saídasCorra online em Ideone
fonte