Dado o número de vértices n ≥ 3
e o "tamanho da etapa" 1 ≤ m < n/2
(indicando a distância entre dois vértices conectados), produza uma representação gráfica do polígrama regular correspondente . Se o polígrama consistir em vários loops fechados, cada loop deverá ser renderizado em uma cor de linha diferente. (Se isso parecer confuso, os exemplos abaixo devem esclarecer as coisas.)
Regras
Qualquer solução razoável para o problema provavelmente satisfará essas regras automaticamente - elas existem apenas para colocar algumas restrições nos parâmetros da saída, a fim de evitar respostas como "Este bloco preto é totalmente um polígono, mas você não pode vê-lo porque Defino a largura da linha para mais de 9000 ".
- Você pode renderizar o polígono em um arquivo (que pode ser gravado em disco ou no fluxo de saída padrão) ou exibi-lo na tela.
- Você pode usar gráficos vetoriais ou raster. Se sua saída for rasterizada, sua imagem deverá ter dimensões de 400x400 pixels ou mais, e o raio do polígrama (a distância do centro a cada vértice) deverá estar entre 35% e 50% do comprimento lateral.
- A proporção do polígono deve ser 1 (para que seus vértices fiquem em um círculo adequado) - a tela da imagem pode ser retangular.
- As linhas do polígono não devem ter mais que 5% do raio (e, é claro, devem ter uma espessura diferente de zero para serem visíveis).
- Você pode renderizar eixos ou um quadro além do polígrama, mas nada mais.
- Você pode escolher qualquer cor de fundo (sólida).
- Para polígramas que consistem em vários loops fechados, você deve suportar pelo menos 6 cores visualmente distintas , todas diferentes do plano de fundo. (A escala de cinza é boa, desde que as tonalidades estejam suficientemente espalhadas pelo espectro.) Seu código ainda deve funcionar por mais de 6 loops, mas as cores não precisam ser distinguíveis para quaisquer loops adicionais (ou seja, você também pode reutilizar cores dos loops anteriores nesse ponto).
Isso é código de golfe, então a resposta mais curta (em bytes) vence.
Exemplos
Aqui estão todas as saídas até n = 16
(onde a coluna corresponde n
e a linha a m
):
Como exemplos para maiores n
, aqui estão (n, m) = (29, 11)
e (30, 12)
:
fonte
Respostas:
MATLAB,
8581A função exibe uma plotagem na tela.
Resultado para n = 30, m = 12:
fonte
hold all
do próximo gráfico são desenhados no topo do primeiro ... Não sei se temos um consenso sobre a reutilização das funções a serem executadas. honesto.hold on
para salvar um byte de qualquer maneira; se você adicionar quatro bytes, ele se tornará reutilizável (clf\n
)hold
.hold all
paraclf\nhold on
, isso resolve o problema?CJam, 114
Ele gera a imagem no formato ASCII PGM.
Você pode experimentá-lo online , mas a saída é bastante longa. Você pode mudar
400
e199
para números menores para reduzir o tamanho da imagem.Como o CJam não possui conceito de imagens, desenhos, linhas ou formas, geramos a imagem em uma matriz quadrada, pixel por pixel (um número representando uma sombra cinza para cada pixel).
É assim que o resultado é
30 12
:fonte
Mathematica, 70 bytes
Bem ... esta é a minha implementação de referência que supera os dois envios até agora. Não tenho a intenção de vencer meu próprio desafio, então espero que alguém consiga vencer isso.
A saída é como as parcelas do próprio desafio, exceto que não estou removendo os eixos aqui:
fonte