O objetivo desse código de golfe é desenhar um polígono regular (um com comprimentos laterais iguais), dado o número de lados e o raio (distância do centro ao vértice).
- O número de lados e o raio podem ser inseridos por meio de um arquivo STDIN ou apenas uma variável antiga simples. Use o que for mais curto no seu idioma.
- -25% do total de caracteres / bytes se a imagem for realmente desenhada em vez da arte ASCII.
Respostas:
LOGOTIPO 37 - 25% = 27,75 (com variáveis)
LOGO 49 - 25% = 36,75 (em função)
Triângulo
Chamado com variáveis
Usado como uma função
P 100 3
Quadrado
Chamado com variáveis
Usado como uma função
P 100 4
Pentágono
Chamado com variáveis
Usado como uma função
P 100 5
Decágono
Chamado com variáveis
Usado como uma função
P 100 10
Círculo
Chamado com variáveis
Usado como uma função
P 100 360
fonte
Mathematica, 40 - 25% = 30
fonte
Graphics
.Graphics@RegularPolygon
é permitido?Java 8:
533322 - 25% = 241,5Bem, é Java: / Apenas desenha linhas, ponto a ponto. Deve funcionar para qualquer polígono de tamanho arbitrário. Corte um pouco do tamanho original. Muito crédito a Vulcan (nos comentários) pela lição de golfe.
Quebras de linha:
Entrada é argumentos [raio] [lados]:
Saída:
fonte
java.awt.image.*
em vez dejava.awt.image.BufferedImage
Short.valueOf
vez deInteger.valueOf
para salvar quatro bytes, pois a entrada nunca deve exceder o intervalo de curtos. 2)y[]=x.clone()
economiza um bytey[]=new int[s]
. 3) Use o obsoleto emf.show();
vez def.setVisible(1>0);
para salvar uma adição de nove bytes. 4) Use em6.28
vez deMath.PI*2
, pois a estimativa é precisa o suficiente para essa finalidade, economizando três bytes. 5) Declare emGraphics g
vez deGraphics2D g
criar a instância de gráficos para salvar dois bytes.BufferedImage
eGraphics
completamente e apenas jogando tudopaint()
). Ele mudou a cor da imagem, embora ainda pareça boa IMO. Obrigado por me fazer tomar um outro olhar para este :)Frame
variável local, removendo od
número inteiro e usando / abusando do loop for para salvar alguns caracteres, principalmente ponto-e-vírgula. Aqui está uma versão com espaço em branco também.drawPolygon
vez dedrawLine
. Versão em espaço em branco .TeX / TikZ (60 - 80,25)
Arquivo
polygon.tex
:(80 bytes)
O raio e o número de lados são fornecidos como variáveis / macros
\r
e\n
. Qualquer unidade TeX pode ser fornecida para o raio. Sem unidade, a unidade padrãocm
é usada. Exemplos:(16 bytes sem valores)
Se o número da página for suprimido, isso poderá ser feito por
(11 bytes)
Exemplos para gerar arquivos PDF:
Ponto:
Não está claro o que precisa ser contado. O intervalo para a pontuação seria:
O código base é 80 bytes menos 25% = 60
Ou tudo incluído (definições de variáveis de entrada, sem número de página): (80 + 16 + 11) menos 25% = 80,25
Se a conexão entre o primeiro e o último ponto não precisar ser suave, ela
--cycle
poderá ser removida, economizando 7 bytes.fonte
Geogebra , 42 - 25% = 31,5 bytes
Se você contar em caracteres em vez de bytes, seria de 41 a 25% = 30,75 caracteres.
(Ou seja, se você considera o Geogebra um idioma ...)
Assume que o raio está armazenado na variável
r
e o número de lados armazenados na variávels
.Isso usa o teorema do cosseno c 2 = a 2 + b 2 - 2 ab cos C para calcular o comprimento do lado do raio fornecido.
Saída de amostra para
s
= 7,r
= 5fonte
C:
229180(r é o raio do círculo)
Por favor, execute no terminal ANSI
Editar:
compilar:
fonte
#include
s. Além disso, você pode declararv
como global foramain
e declararu
como um parâmetro demain
, então não precisaint
(iev;main(u){//...
). Finalmente, você pode alterar o últimofor
loop parafor(j=0;j<s;)/*...*/x=j++-s/2.,//...
C, 359 caracteres
Minha primeira tentativa de jogar golfe. Pelo menos, supera a solução Java ;-)
ungolfed:
E é o único programa que gera o polígono em ASCII em vez de desenhá-lo. Devido a isso e a alguns problemas de arredondamento de ponto flutuante, a saída não parece particularmente bonita (os caracteres ASCII não são tão altos quanto a largura).
fonte
int
pode ser removido, pois eles são assumidosint
pelo compilador. Além disso, o últimofor
loop pode ser alterado parafor(j=0;j<r;){x=p+u*j;y=q+z*j++;//...
if(i<0)
pode ser alterado paraif(i)
. O que ainda é necessário apenas em uma iteração, mas não foi possível encontrar uma maneira eficiente deMathematica, 54 * 75% = 40,5
Eu nem acho que há um ponto para uma versão não destruída. Ele conteria apenas mais espaços em branco.
Espera o raio na variável
r
e o número de lados na variáveln
. O raio é um pouco sem sentido sem exibir eixos, porque o Mathematica dimensiona todas as imagens para caber.Exemplo de uso:
fonte
Graphics@Polygon@Array[r{Sin@#,Cos@#}&,n+1,{0,2π}]
Array
.HTML / JavaScript:
215 - 25% = 161.25, 212 - 25% = 159Versão não destruída:
fonte
i=S=5;
efor(;i-->0;)
.i-->0
parte? É o mesmo quei-- > 0
. Algumas pessoas também chamam o operador seta ou vai para operador ;)c=document.currentScript.parentNode;
e substituindo<canvas>
por<canvas id="c">
Postscript 156 - 25% = 117
Passe o raio, número de lados e ponto central na linha de comando
ou acrescentar à fonte
Traduzir para o centro, escalar até o raio, mover para (1,0); depois repita n vezes: gire 360 / n, desenhe a linha para (1,0); desenhe a linha final, toque e emita a página.
fonte
Sábio , 44 - 25% = 33
Assume que o número de lados é armazenado na
s
variável e o raio é armazenado nar
variável.Saída de amostra:
s
= 5,r
= 3s
= 5,r
= 6s
= 12,r
= 5fonte
regular_polygon
função sempre gera polígonos com o primeiro vértice em (0,1). Uma correcção seria a de não mostrar os eixos com um adicional de 7 bytes (,axes=0
depoisfigsize=r
)bc + ImageMagick + xview + bash, 104.25 (139 bytes - 25%)
Esse desafio seria incompleto sem uma resposta do ImageMagick ...
Por exemplo,
./polygon.sh 8 100
produz esta imagem:fonte
JavaScript 584 (867 não jogado)
Esse código usa N Raízes complexas da unidade e converte os ângulos em pontos X, Y. Em seguida, a origem é movida para o centro da tela.
Golfe
Saída de amostra:
Ungolfed
Esse código requer o elemento de tela HTML5, c é um objeto de tela, r é um raio en é um número de lados.
fonte
PHP 140 - 25% = 105
Assume duas variáveis predefinidas:
$p
o número de pontos e$r
o raio em pixels. Como alternativa, pode-se acrescentarlist(,$r,$p)=$argv;
e usar argumentos de linha de comando. A saída será um png, que deve ser canalizado para um arquivo.Saída
$r=100; $p=5;
$r=100; $p=6;
$r=100; $p=7;
$r=100; $p=50;
fonte
TI-80 BASIC, 25 bytes - 25% = 18,75
Assume que todas as configurações estão definidas com os valores padrão. Execute o programa como
5:PRGM_POLYGON
(para um pentágono)Ele funciona desenhando um círculo com um número muito baixo de etapas. Por exemplo, um pentágono teria etapas de 2π / 5 radianos.
As configurações da janela são boas o suficiente por padrão, e
TMIN
eTMAX
são definidas como0
e2π
, portanto, tudo o que precisamos alterar éTSTEP
.fonte
SmileBASIC 3,
183159 - 25% = 119,25 bytesPega os lados e o raio de
INPUT
, calcula e armazena os pontos e os desenha usandoGLINE
.Eu sinto que isso poderia ser mais curto, mas é como 01:00, tanto faz.Pressupõe um ambiente de exibição limpo e padrão; portanto, você pode precisarACLS
executá-lo a partir do DIRECT.fonte
OpenSCAD: 31 menos 25% = 23,25
Primeiro post aqui! Eu sei que estou atrasado para a festa, mas isso parecia uma pergunta tão boa quanto qualquer outra para começar. Ligue usando
p(n,r)
.fonte
ActionScript 1, Flash Player 6: 92 - 25% = 69
fonte
C # em LINQPAD
O crédito pela parte da matemática vai para Geobits (espero que você não se importe!) Com a resposta Java. Eu sou inútil em matemática :)
Eu fiz isso no LINQPAD, pois ele tem uma janela de saída integrada. Então, basicamente, você pode arrastar e soltar o seguinte para que ele desenhe o polígono. Apenas mude para 'C # Program' e importe a lib System.Drawing para as propriedades da consulta.
fonte
Matlab 58 bytes - 25% = 43,5
Não vi nenhuma solução Matlab, então aqui está uma que é bem direta:
Você pode cortar alguns bytes se r e n já estiverem no espaço de trabalho.
Chamada de exemplo:
fonte
Python 2, 222 bytes
Verifica se um pixel está no lado interno de todos os hiperplanos (linhas) do polígono. O raio é tocado porque, na verdade, o apótema é usado.
fonte
Mathematica 27 (= 36 - 25%)
Quando enviamos o código do Mathematica, muitas vezes esquecemos as novas funções que continuam sendo incorporadas ao idioma, com o vocabulário atual do idioma acumulando cerca de 5.000 funções principais . O vocabulário grande e em expansão da linguagem é bastante útil para o golfe de código. Os CirclePoints foram introduzidos na versão atual 11.X. Um exemplo específico de raio de 7 lados 5 é:
Além disso, você só precisa inserir o parâmetro angle para controlar a orientação do seu polígono:
fonte
Python 2, 74 bytes - 25% = 55,5
A entrada está nas variáveis
r,n
. Se incluído na contagem, seriar,n=input()
, por mais 12 bytes.Experimente online - (usa código diferente, pois
exec
não é implementado no intérprete online)fonte
SmileBASIC,
8575 - 25% = 56.25 bytesAs variáveis S e R são usadas para entrada.
Explicado:
Os lados são desenhados usando a cor
-I
, que geralmente é próxima de -1 (& HFFFFFFFF branco) (exceto quandoI
é 0, quando é transparente).Você também pode desenhar um polígono preenchido usando em
GTRI N,M,X,Y,R,R,-I
vez deGLINE...
fonte
Tikz, 199 bytes
Esta solução usa a biblioteca tikz
shapes.geometric
.Aqui está a aparência de um polígono com
5
lados e raio8in
quando visto em evince .fonte