Tarefa
A tarefa é agrupar polígonos, dada uma configuração de vértice.
Pontuação
Sua pontuação é igual ao "nível de complexidade" atingido pelo seu envio. Os níveis de complexidade são cumulativos, o que significa que, para atingir o número 3, você também deve oferecer suporte aos itens 1 e 2.
Os envios em um nível de complexidade igual são diferenciados pela contagem de bytes; vitórias mais baixas.
Entrada
Entrada é uma sequência que contém uma configuração de vértice, representando uma figura de vértice. Ou seja, uma lista de números inteiros separados por pontos, em que cada número inteiro (n) representa um n-gon regular, conectado por um vértice comum.
As seguintes configurações de vértice devem ser suportadas:
3.3.3.3.3.3
3.3.3.3.6
3.3.3.4.4
(observe que a ordem é refletida na figura do vértice, portanto, a tabela a seguir difere)3.3.4.3.4
3.12.12
3.4.6.4
3.6.3.6
4.4.4.4
4.6.12
4.8.8
6.6.6
Saída - Nível de complexidade # 1: figura do vértice
Nesse nível de complexidade, a saída é uma imagem que mostra a figura do vértice correspondente à entrada especificada.
A entrada é anexada com um F
para indicar que a figura do vértice deve ser impressa, e não a peça completa.
Por exemplo, F3.6.3.6
fornece esta figura de vértice:
Saída - Nível de complexidade # 2: lado a lado
Nesse nível de complexidade, a saída é uma imagem que mostra um lado a lado uniforme usando a figura de vértice correspondente à entrada especificada.
Por exemplo, 3.6.3.6
fornece esse ladrilho:
Não há restrições de cor ou formato (exceto brechas).
Saída - Nível de complexidade # 3: ladrilhos duplos
Nesse nível de complexidade, um "lado a lado duplo" pode ser formado a partir de cada lado a lado. Isso é obtido desenhando linhas do centro de cada polígono até o centro de cada polígono de fronteira.
A disposição dupla é especificada anexando a entrada com a V
.
Por exemplo, V3.6.3.6
esse ladrilho duplo (em vermelho):
3.3.3.4.4
3.3.4.4.3
3.4.4.3.3
4.4.3.3.3
4.3.3.3.4
. Temos que apoiar todos os sinônimos, ou apenas o mais baixo lexicamente (conforme indicado na pergunta)? Além disso,3.3.3.3.6
existe em duas formas de imagem invertida. Eu entendo que qualquer um é aceitável.3.3.3.4.4
está faltando, por exemplo. pt.wikipedia.org/wiki/… corresponde exatamente à sua lista. Entendo que o contorno ou polígonos preenchidos são aceitáveis (ou uma combinação dos dois?) Alguns duais já estão na lista. Por exemplo4.4.4.4
é a sua própria dupla e3.3.3.3.3.3
e6.6.6
são mutally dual. Como os duplos são exibidos independentemente de seus pais, entendo que não há necessidade de alinhamento correto com os pais.3.3.3.3.6
mas como você saberia qual é? :)Respostas:
BBC BASIC
Rev 1 Código de golfe, 655 caracteres ASCII, tamanho de arquivo tokenizado 614
Algumas melhorias importantes na tabela de dados, hash da string
A.B..N
em um número(1*A+2*B+..n*N)+n
antes de procurar e armazenando apenas um vetor de conversão (o outro é gerado pelo código). Mais explicações quando eu terminar o golfe.Rev 0 Código de golfe, 770 caracteres ASCII, tamanho de arquivo tokenizado 728
Tudo o que fiz aqui foi remover comentários, espaços em branco e aspas desnecessários e colocar tudo
DATA
em uma linha. Certamente há espaço para mais golfe.Explicação
Esta é uma continuação da minha resposta anterior de nível 1, mas decidi publicá-la separadamente, porque é bastante longa.
Nível 2
Isto é conseguido através da tradução dos meus modelos "nível 1.5" da minha resposta anterior. Os dois vetores de conversão para cada lado a lado são codificados. Aproveito o fato de que um triângulo isósceles de base 80 e altura 70 é uma aproximação muito boa de um triângulo equilátero, e um triângulo retângulo com vetor de hipotenusa
(56,56)
tem um comprimento de hipotenusa muito próximo de 80.Nível 3
Para plotar os duais, em vez de plotar uma aresta do polígono, plotamos um raio do meio dessa aresta até o centro do polígono. Está em ângulo reto com a aresta e possui comprimento de
1/TAN/(PI/n)
vezes do vetor (u, v) que, por sua vez, é metade do comprimento da aresta.Infelizmente, como certos polígonos em inclinações
3.3.3.3.6
e3.4.6.4
não são plotados explicitamente, eles não seriam plotados se fizéssemos isso. Portanto, o raio também se estende para fora do polígono. A extensão externa é controlada pela variávelo
.Por padrão, a extensão é suficiente para alcançar o centro de um triângulo, mas
3.4.6.4
precisa ser estendida mais para desenhar os duplos dos quadrados que não são plotados explicitamente. Portanto, a extensão suficiente para preencher os quadrados ausentes é aplicada quando hexágonos e triângulos são plotados explicitamente, mas a extensão normal é aplicada quando quadrados são plotados explicitamente, para evitar linhas espúrias nos triângulos adjacentes.Aqui está a aparência deles sem as extensões spoke. Os furos no padrão duplo podem ser vistos claramente. A saída correta pode ser vista na figura principal, na parte inferior da resposta.
Código comentado
As diferenças da minha resposta anterior são indicadas em linha
Resultado
O programa executa apenas um lado a lado ou duplo para cada execução. No entanto, traça os duplos em vermelho. Para economizar espaço, executei o programa duas vezes sem limpar a tela, a fim de sobrepor o dual em cima dos ladrilhos comuns.
fonte
Mathematica
O nível 1 contém os modelos básicos de bloco que são estampados repetidamente para colocar um plano em bloco.
O nível 2 faz a telha.
Ainda existem 2 inclinações que não consegui alcançar. Eles parecem exigir rotação e translação.
Nível 1: Figura do vértice (559 bytes)
Teste
Nível 2: lado a lado (690 bytes adicionais)
As regras retornam compensações e recuos lado a lado para cada configuração.
r
é a função básica que gera as inclinações.p
mostra o modelo e o respectivo ladrilho. Os espaços em branco correspondem àqueles não cobertos pelo modelo.Teste
Mosaico triangular
hexagonal
quadrado
desconhecido
quadrado truncado
trihexagonal
hexagonal truncado
sem nome
triangular alongado
Inclinações para descobrir
fonte
3.3.3.3.3.3
pela metade, para que as unidades se sobreponham, você poderá se livrar desses diamantes e corrigir o ladrilho. Você ainda tem mais o que fazer e3.3.3.3.6
, no entanto.3.4.6.4
4.6.12
4.6.12 anyone know what it should look like?
- Todas as inclinações necessárias estão em en.wikipedia.org/wiki/… . Veja meu comentário sobre a questão. Esta é uma página diferente da mencionada na pergunta. Mas4.6.12
também é mostrado nessa página de qualquer maneira.R
Passo 1
Aqui está o meu esforço na construção dos ladrilhos. Lado a lado para vir em seguida. Isso não valida a entrada; portanto, os inválidos desenharão alguns blocos estranhos. A entrada é digitada após a primeira linha
Etapa 1, 2 e 3: 1898
Finalmente voltei a isso. A maior parte disso é resolvida com compensações e tratamento de casos especiais :). Edit: V flag para duals agora são manipulados
O processo geral é:
Provavelmente ainda posso jogar isso um pouco mais.
fonte
BBC BASIC
Faça o download do emulador em http://www.bbcbasic.co.uk/bbcwin/bbcwin.html
Nível 1
Nível 1.5
O nível 1.5 é minha própria designação, mas é um marco importante no meu método.
Traduzir as figuras do vértice nem sempre leva à colocação correta. Em alguns casos, faltam linhas.
Minha solução para isso é contornar o maior polígono, desenhando a figura do vértice para cada segundo vértice desse polígono. Esta é uma solução geral para todos os casos. Observe que o maior polígono sempre tem um número par de lados e a figura do vértice geralmente alterna no sentido horário / anti-horário à medida que você percorre o polígono. Isso pode ser visto com mais clareza
4.6.12
, mas também é verdade para4.8.8
e3.12.12
: quando vistos de qualquer 8-gon ou 12-gon em particular, os vértices alternados são imagens em espelho um do outro. É também o que está acontecendo, um pouco menos obviamente, com3.3.3.4.4
e3.3.4.3.4
: quando vistos de um quadrado em particular, os vértices alternados são imagens espelhadas um do outro.O algoritmo que eu uso para mover dois lados do polígono é sempre fazer 14 iterações do loop de desenho de arestas, independentemente de quantas arestas o polígono possui. 8 é um fator de 16, portanto, ao desenhar octógonos, o cursor gráfico termina 16-14 = 2 vértices atrás de onde começou. 3- 4- 6- e 12-gons têm lados que são fatores de 12; portanto, o cursor gráfico termina 14-12 = 2 vértices à frente de onde começou.
As figuras podem ser vistas abaixo. Amanhã espero elaborar as traduções corretas para completar a lista. Em todos os casos, linhas suficientes são desenhadas para concluir o nível 2 apenas com traduções. Em alguns casos, é desenhado muito mais do que o mínimo necessário, mas não há problema com sobreposição: as regras não dizem nada sobre o desenho de linhas apenas uma vez :-)
Em geral, o maior polígono é o último da lista. Infelizmente, há um caso em que não é assim:
3.4.6.4
Portanto, a figura desenhada neste caso é centrada em um quadrado e não em um hexágono. Existem linhas suficientes para concluir o nível 2 usando apenas traduções, embora existam certos quadrados que não são desenhados explicitamente. Isso apresentará alguns problemas no nível 3 (felizmente acho que sei como resolver isso.) Da mesma forma,3.3.3.3.6
há linhas suficientes para concluir o nível 2 usando apenas traduções, mas haverá certos triângulos que não são desenhados explicitamente.Código
O código para o nível 1.5 é comentado, apenas o código para o nível 1 é ativado. Existem quatro linhas começando com a
REM
. Remova estesREM
s para ativar o nível 1.5.Níveis 2 e 3
Veja minha outra resposta.
fonte