Um Spirograph é um brinquedo que desenha hipotrocóides e epitrocóides. Para esse desafio, focaremos apenas os hipotrocóides.
Da Wikipedia :
Um hipotrocóide é uma roleta traçada por um ponto anexado a um círculo de raio r rolando ao redor de um círculo fixo de raio R , onde o ponto é uma distância d do centro do círculo interior.
As equações paramétricas para eles podem ser definidas como:
Onde θ é o ângulo formado pela horizontal e pelo centro do círculo rotativo.
Sua tarefa é escrever um programa que desenhe o caminho traçado pelo ponto definido acima. Como entrada, você será dado R , r , e d , todos os inteiros entre 1 e 200, inclusive.
Você pode receber essa entrada de stdin, argumentos ou entrada do usuário, mas não pode ser codificada no programa. Você pode aceitá-lo da forma que for mais conveniente para você; como cadeias, números inteiros etc.
Presumir:
- As unidades de entrada são fornecidas em pixels.
- R > = r
A saída deve ser uma representação gráfica do hipotrochoide definido pela entrada. Nenhuma saída ASCII ou outra baseada em texto é permitida. Esta imagem pode ser salva em um arquivo ou exibida na tela. Inclua uma captura de tela ou imagem da saída para uma entrada de sua escolha.
Você pode escolher as cores que desejar para o caminho / fundo, sujeito a uma restrição de contraste. As duas cores devem ter o componente 'Valor' do HSV com pelo menos metade da escala. Por exemplo, se você estiver medindo o HSV [0...1]
, deve haver pelo menos 0.5
diferença. Entre [0...255]
deve haver uma 128
diferença mínima .
Este é um código de golfe, o tamanho mínimo do código-fonte em bytes vence.
fonte
R > r
ouR ≥ r
? (Mesmo parar
ed
.)R>=r
, masd
não está restritor
e pode estar em qualquer lugar no intervalo de 1 a 200.R=200, r=1, d=200
. Você pode dimensionar a imagem para a entrada, se desejar, ou mantê-la em um tamanho constante, desde que tudo esteja visível.Respostas:
Mathematica, 120 bytes
Código não destruído e exemplo de saída:
Se eu puder incluir os eixos no gráfico, posso salvar outros 9 caracteres.
fonte
JavaScript (ECMAScript 6) -
312314 caracteresJSFIDDLE
Saída de exemplo
r = 1, R = 200, d = 30
fonte
Python: 579
Sumário
Isso não é nada competitivo, dada a resposta do Mathematica, mas decidi publicá-la de qualquer maneira, porque as imagens são bonitas e podem inspirar alguém ou ser útil a alguém. Por ser muito maior, eu o deixei basicamente não destruído. O programa espera a entrada da linha de comando de R, r, d.
Captura de tela
Aqui estão dois exemplos, um para (5,3,5) e outro para (10,1,7)
Código
fonte
Perl / Tk -
239227R = 120, r = 20, d = 40:
R = 128, r = 90, d = 128:
R = 179, r = 86, d = 98:
fonte
Processamento, 270
A entrada é inserida via console, um número por linha.
Screenshot para R = 65, r = 15, d = 24:
fonte
GeoGebra, 87
Ou seja, se você considera o GeoGebra um idioma válido.
Aceita entrada da barra de entrada GeoGebra, no formato
<variable>=<value>
, por exemploR=1000
.Observe que pode ser necessário alterar manualmente o tamanho do zoom para visualizar a imagem inteira.
(A coisa na parte inferior da janela é a barra de entrada que eu estava falando)
Experimente online aqui .
fonte
HTML + Javascript
256286303Editar Removida a 1ª chamada para moveTo, funciona de qualquer maneira. Poderia economizar mais beginPath de corte, mas funciona apenas na primeira vez
Edit2 30 bytes salvos thx @ ӍѲꝆΛҐӍΛПҒЦꝆ
Teste
Coloque a entrada na caixa de texto (separada por vírgula) e pressione tab.
fonte
R, 80 bytes
No entanto, se alguém quiser figuras 'limpas' (sem eixos, sem etiquetas etc.), o código terá que ser um pouco mais longo (88 caracteres):
Um exemplo de código usando a versão mais longa de f:
Alguns exemplos de saídas:
fonte
,
??C # 813, era 999
Precisa de algum trabalho para reduzir a contagem de bytes. Consegui reduzir um pouco. Ele aceita três números inteiros separados por espaço do console.
Amostra de saída:
fonte
shell script + gnuplot (153)
A maior parte do esforço é remover os eixos e tiques, definir o tamanho e o alcance e aumentar a precisão. Felizmente, o gnuplot é natural para o golfe, então a maioria dos comandos pode ser abreviada. Para salvar caracteres, a saída deve ser redirecionada para um arquivo de imagem manualmente.
Chamando o script com
spiro.sh 175 35 25>i.png
dáfonte
R, 169 caracteres
Recuado:
Exemplos:
fonte
SmileBASIC, 96 bytes
Entrada: 50,30,50:
fonte
Befunge-98, 113 bytes
Esse código se baseia na impressão digital FIXP (Fixed Point Maths) para alguns cálculos trigonométricos e no Turtle Graphics (TURT) impressão digital para desenhar o caminho do espirógrafo.
Os gráficos Turtle em Befunge são muito semelhantes no comportamento aos gráficos na linguagem de programação Logo . Você desenha com uma 'tartaruga' (servindo de caneta), que você orienta em torno da superfície de saída. Isso implica orientar a tartaruga em uma direção específica e instruí-la a avançar uma certa distância.
Para trabalhar com esse sistema, eu precisava ajustar as equações espirográficas originais em algo um pouco mais amigável para as tartarugas. Não tenho certeza se essa é a melhor abordagem, mas o algoritmo que criei funciona mais ou menos assim:
Observe que isso realmente desenha o caminho com um tipo de padrão em zigue-zague, mas você não percebe a menos que aumente o zoom na imagem.
Aqui está um exemplo usando os parâmetros R = 73, r = 51, d = 45.
Eu testei o código com CCBI e cfunge , os quais produzem saída na forma de uma imagem SVG. Como esse é um formato vetorial escalável, a imagem resultante não possui um tamanho de pixel como tal - apenas se ajusta ao tamanho da tela (pelo menos quando visualizada em um navegador). O exemplo acima é uma captura de tela que foi cortada e dimensionada manualmente.
Em teoria, o código também poderia funcionar no Rc / Funge , mas nesse caso você precisaria rodar em um sistema com o XWindows, pois tentaria renderizar a saída em uma janela.
fonte
wxMaxima : 110
Isso é chamado na sessão interativa via
f(#,#,#)
. Como uma amostra, consideref(3,2,1)
:fonte
Raquete
Resultado:
fonte