A tarefa é desenhar um polígono regular de n lados usando apenas uma bússola e uma régua não marcada.
A entrada (n) é um dos 10 números a seguir: 3, 4, 5, 6, 8, 10, 12, 15, 16, 17.
Método : Como você só tem uma régua e uma bússola, só pode desenhar pontos, linhas e círculos.
Uma linha só pode ser desenhada:
- através de dois pontos existentes.
Um círculo só pode ser desenhado:
- com um ponto como centro e com o perímetro passando por um segundo ponto.
Um ponto só pode ser desenhado:
na interseção de duas linhas,
na interseção (s) de uma linha e um círculo,
na interseção (s) de dois círculos,
desde o início, quando você pode desenhar 2 pontos para começar.
Através deste processo (e somente através deste processo), você deve desenhar as n linhas do n-gon solicitado, juntamente com qualquer trabalho necessário para chegar a esse estágio.
EDIT: A posição das interseções deve ser calculada, mas linhas e círculos podem ser desenhados por qualquer meio fornecido pelo idioma.
Saída é uma imagem de um polígono regular de n lados, mostrando o trabalho.
Graficamente, não há restrições quanto ao tamanho, formato, espessura da linha ou qualquer outra coisa não mencionada aqui. No entanto, deve ser possível distinguir visualmente linhas distintas, círculos e suas interseções. Além disso:
- As n linhas que compõem os lados do seu n-gon devem ter uma cor diferente do seu 'trabalho' (ou seja, pontos, círculos ou outras linhas) e uma cor diferente novamente para o seu plano de fundo.
- O trabalho pode deixar as bordas da área de desenho, exceto os pontos, que devem estar todos dentro dos limites visíveis da imagem.
- Um círculo pode ser um círculo completo ou apenas um arco (desde que mostre as interseções necessárias).
Uma linha é infinita (ou seja, sai da área de desenho) ou cortada nos dois pontos em que passa.EDIT: Uma linha pode ser desenhada a qualquer comprimento. Os pontos só podem ser criados onde a linha desenhada se cruza visualmente.- Um ponto pode ser desenhado como você desejar, incluindo a não marcação.
A pontuação é dupla, um envio recebe 1 ponto por entrada suportada, para um máximo de 10 pontos. Em caso de empate, a menor contagem de bytes vence.
O reconhecimento será concedido a envios que possam construir n-gons nas poucas etapas ou que sejam capazes de construir n-gons fora do intervalo especificado, mas isso não ajudará sua pontuação.
CIRCLE 0,0,500
ou preciso fazerR=SQRT(300^2+400^2): CIRCLE 0,0,R
? (BTW trabalhar fora postions de interseções é provavelmente mais difícil do que linhas e círculos.)Carl Friedrich Gauss in 1796 showed that a regular n-sided polygon can be constructed with straightedge and compass if the odd prime factors of n are distinct Fermat primes
Respostas:
BBC Basic, 8 polígonos: 3,4,5,6,8,10,12,15 lados (também 60 lados)
Faça o download do emulador em http://www.bbcbasic.co.uk/bbcwin/download.html
Decidi não incluir 16 lados, simplesmente porque minha pré-construção estava ficando um pouco confusa. Seriam necessários mais 2 círculos e uma linha. O BTW 17 lados é realmente muito complicado e talvez fosse melhor como um programa separado.
Recebi mais retorno por adicionar 2 círculos à minha construção original para fazer o pentágono, pois isso também me deu acesso aos lados 10,15 e 60.
O programa faz uma pré-construção antes de solicitar qualquer entrada do usuário. Isso é suficiente para definir pelo menos 2 pontos no círculo principal que correspondem aos vértices adjacentes de 3,4,5,6,8,10,12,15 ou figura de 60 lados. Os pontos são armazenados em um conjunto de matrizes de 99 elementos, nos quais os elementos de 0 a 59 são reservados para pontos igualmente espaçados ao redor da circunferência. Isto é principalmente para maior clareza, o octógono não se encaixa perfeitamente em 60 pontos, portanto é necessária alguma flexibilidade (e também para os 16 gon, se incluídos). A imagem se parece com a imagem abaixo, em branco e cinza, com apenas os dois círculos em amarelo sendo dedicados exclusivamente a formas com múltiplos de 5 lados. Veja http://en.wikipedia.org/wiki/Pentagon#mediaviewer/File:Regular_Pentagon_Inscrib_in_a_Circle_240px.gifpara o meu método preferido de desenho do pentágono. O ângulo alegre é evitar linhas verticais, pois o programa não pode lidar com gradientes infinitos.
O usuário digita um número
d
para o número de lados necessários. O programa procura na matriz o índice do primeiro dos dois pontos (o próximo fica a 60 / d no sentido horário).O programa então percorre o processo de desenhar um círculo centrado no segundo ponto que passa pelo primeiro e calcular a nova interseção para percorrer o círculo principal. Os círculos da construção são desenhados em azul e o polígono necessário é desenhado em vermelho. As imagens finais são assim.
Estou bastante satisfeito com eles. O BBC Basic realiza os cálculos com precisão suficiente. No entanto, é aparente (principalmente com 15 e 60 lados) que o BBC Basic tende a desenhar círculos com um raio um pouco menor do que deveria.
fonte
Mathematica,
234 polígonos, 759 bytesPontos aleatórios:
Switch
para selecionar os círculos e linhas relevantes para cada construção. Dessa forma, eu poderia reutilizar muitas primitivas entre elas.Aqui está o código não destruído:
E aqui estão as saídas:
fonte
Switch
. Isso provavelmente me permitiria reutilizar muito mais linhas e pontos de círculos.