O Tangram é um quebra-cabeça de dissecação feito de sete formas: cinco triângulos de tamanhos diferentes, um paralelogramo e um quadrado. Dada uma forma, o objetivo é recriar a forma usando todas as peças e sem sobreposição. Obviamente, existem infinitas maneiras de organizar esse conjunto de peças no plano. Um subconjunto interessante é o
Tangrams de grade
Podemos desenhar o quadrado "padrão" do Tangram em um quadrado maior, subdividido por uma grade em 16 quadrados menores. Os tangramas de grade são apenas formas compostas das peças do tangram, de modo que todos os vértices das peças estão nos pontos da grade.
Esses são os tipos de quebra-cabeças do Tangram que queremos considerar neste desafio, pois provavelmente são mais fáceis de manusear do que os mais gerais.
Como observação lateral: os matemáticos chineses Chuan-Chin Hsiung e Fu Traing Wang provaram em 1942 que existem apenas 13 tangramas convexos. Eles primeiro mostraram que o problema pode ser reduzido a tangramas de grade e, em seguida, usaram alguns argumentos combinatórios e geométricos. Estes são todos esses 13:
Desafio
Dado um tangram de grade solucionável, produza uma dissecção do tangram de grade nas sete partes do tangram.
IO
Um tangram é dado como uma imagem em preto e branco (a forma é em preto, o fundo em branco), com os dois lados múltiplos de 50px. A grade tem uma largura de exatamente 50 px. As linhas de grade são paralelas aos lados da imagem.
EDIT: A imagem pode ser aceita como entrada e retornada como saída em qualquer formato de imagem rasterizada conveniente, como PNG, TIFF, PBM, etc.
A saída deve ter novamente o mesmo tamanho e a mesma forma, mas com cada peça uma cor diferente ou, alternativamente, com linhas brancas separando todas as peças. Vale ressaltar que o quadrilátero não retangular pode ser invertido.
Os pixels na borda das peças não precisam exatamente coincidir com o da forma, também se houver efeitos de alias ou outro efeito difuso, isso ainda está ok.
Exemplo de entrada e saída:
Exemplos:
Soluções possíveis:
Respostas:
BBC BASIC,
570 514490 bytes ASCIIFaça o download do intérprete em http://www.bbcbasic.co.uk/bbcwin/download.html
435 bytes tokenizados
O programa completo exibe uma entrada
L.bmp
na tela e a modifica para encontrar uma solução.Explicação
Observe que no básico da BBC uma distância de 1 pixel = 2 unidades, a grade de 50x50 pixels se torna uma grade de 100x100.
Usamos uma função recursiva para colocar os 2 triângulos grandes, triângulo médio, quadrado e paralelogramo na forma. A forma anterior da lista é desenhada antes da próxima chamada recursiva. se uma chamada recursiva retornar sem encontrar uma solução, a forma anterior será substituída em preto e uma nova posição da forma anterior será tentada.
Depois que essas cinco formas são desenhadas, colocar os dois pequenos triângulos é apenas uma formalidade. É necessário desenhar um deles, no entanto, para distingui-los se eles compartilham uma vantagem comum. Nós colorimos apenas um dos dois pequenos triângulos. O outro é deixado em preto natural.
A colocação de cada forma é tentada em diferentes coordenadas x, y e em 4 rotações diferentes. Para testar se há espaço livre para desenhar uma forma, usamos o modelo abaixo, com ângulos de 45 graus. As rotações são feitas em torno dos
*
8 pixels testados e estão em 2 semicírculos dos raios 9 e 81 unidades e caem nas linhas radiantes em múltiplos ímpares de 22,5 graus para os eixos xe y.Para um triângulo grande, todos os 8 espaços devem estar limpos. Para outras formas, apenas algumas das células devem estar limpas para que uma máscara seja aplicada.
Uma vez estabelecido que uma forma se encaixa, ela deve ser desenhada. Se é um triângulo com o qual é plotado
PLOT 85
, se é um paralelogramo, o número é 32 maior (observe que, paraPLOT
fins, consideramos um quadrado um paralelogramo especial). Nos dois casos, três vértices consecutivos devem ser dados. O segundo vértice é a origem da forma (marcada*
na tabela acima), exceto no caso do triângulo grande, onde (antes da rotação) ele é.-1,-1.
Os outros 2 vértices podem ter coordenadas x e y-1,0 or 1
extraídas da base 3 números codificados e, em seguida, redimensionados por 99 e rotacionados conforme necessário pela transformação comc
es
.Código ungolfed
Saída
Esta é uma montagem das soluções encontradas pelo programa para os casos de teste. O uso de 99 em vez de 100 por razões de golfe deixa algumas pequenas lacunas negras. Como as formas são redesenhadas durante as pesquisas, pode demorar alguns segundos para executar em alguns casos, e é fascinante assistir.
fonte