Desenhe linhas entre cada par de pontos distintos para n
pontos dispostos em círculo, produzindo algo como o resultado abaixo. O código mais curto (em bytes) vence! Suas linhas não precisam ser transparentes, mas parece melhor assim. A saída deve ser um gráfico vetorial ou uma imagem com pelo menos 600 pixels por 600 pixels (salvos em um arquivo ou exibidos na tela). Para completar o desafio, você deve desenhar pelo menos 20.
code-golf
kolmogorov-complexity
graphical-output
J. Antonio Perez
fonte
fonte
n
e desenhar linhas para ganharn
pontos.n
traria muito mais ao desafio, pois espero que a maioria das soluções funcione com qualquer número de qualquer maneira, especialmente porque 37 é ímpar e, portanto, não há simetrias de espelho.n
como entrada ou apenas escolhe um arbitrárion
acima de 20?Respostas:
Mathematica, 13 bytes
Parece que isso apenas não fornece uma incorporação circular para
n=4
, mas a pergunta afirman>=20
fonte
n
(eu tinha a resposta pronta dos 37 fixos) :(MATL ,
1614 bytesComo não sou muito fluente com o MATL, espero que isso seja um pouco mais fácil de jogar. (Seria bom, pelo menos, vencer o Mathematica :-) Ou seja, o flip
w
não é o ideal, provavelmente poderia ser evitado ...Teste on-line! (Obrigado @Suever por este serviço, obrigado @DrMcMoylex por -2 bytes.)
Explicação (para
N=3
):Vale a pena notar que, para gerar as enésimas raízes da unidade, você pode usar a fórmula
exp(2*pi*i*k/N)
parak=1,2,3,...,N
. Mas desde queexp(pi*i/2) = i
você também pode escreveri^(4*k/N)
para ok=1,2,3,...,N
que é o que estou fazendo aqui.fonte
XH:H
para:G
G
muito obrigado!PICO-8 , 131 bytes
Eu não tinha muita certeza se infringiria alguma regra, mas fiz de qualquer maneira!
Golfe
Ungolfed
PICO-8 é um console de fantasia baseado em Lua com uma resolução nativa de 128x128. Eu fiz o círculo o maior que pude ...
fonte
Mathematica, 42 bytes
Cria um conjunto de 37 pontos organizados em um círculo e desenha linhas entre todos os subconjuntos possíveis de dois pontos. Alguém postou uma resposta mais curta que tira proveito do CompleteGraph, mas acredito que este seja o mais curto, além daqueles que dependem do CompleteGraph.
fonte
Tuple
. Você também precisa atualizar isso para aceitar arbitrariamenten
, mas convenientemente isso não lhe custará bytes.Tuples
HTML + JS (ES6), 34 +
177164162 = 196 bytesUsando a API Canvas do HTML5 .
Veja no CodePen .
-13 bytes : removido
closePath()
, movido parastroke()
dentrobeginPath()
-2 bytes : variável definida
a
dentrorotate()
fonte
Java,
346338322301 bytesEsta solução funciona para todos
n>1
, mesmo que a postagem original não exija isso, ela exige.O meu favorito é
n=5
não perguntar por que, também, se você quiser uma GUI mais legal, use:int a=Math.min(this.getHeight(),this.getWidth())/2;
No lugar dos 300 codificados, ele usará a largura ou a altura do quadro como diâmetro.
Economizou 8 bytes graças ao Shooqie. Economizou 21 bytes graças ao Geobits.
Saída para
n=37
:fonte
Frame x=
efinal
(eu acho?)Frame x
era de outra solução que envolvia um thread. Você precisa da final, pois é uma referência de classe interna a uma variável externa na classe proprietária.int
declarações fora dofor
loops dePython 2,
258235229 bytesSaída para
n=37
fonte
from PIL import*
mais curto?import *
, dependendo de como instalar, você pode pular o PIL e importar o Image / ImageDraw diretamenteOitava,
8869 bytesSaída para
N=37
:Saída para
N=19
:fonte
gplot
também, mas eu não conseguem fazê-lo curto o suficiente ...Perl, 229 bytes
Ele usa a mesma fórmula que a maioria dos idiomas que não possuem recursos convenientes para esse desafio (mesmo que eu não os tenha encontrado, mas é uma fórmula bastante fácil de encontrar). Portanto, não é muito interessante, mas geralmente não há muitas respostas de Perl para esse tipo de desafio, então eu só queria propor uma.
E você precisará
-MImager
(9 bytes),-MMath::Trig
(fornecendopi
, 13 bytes) e-n
(1 byte) ==> + 23 bytes.Para executá-lo:
Ele criará um arquivo chamado
t.png
que contém a imagem.Você precisará instalar
Imager
, mas não se preocupe, é bastante fácil:(O
echo
s irá configurá-lo cpan se você nunca o usou antes. (Na verdade, isso só funcionará se o seu perl for recente o suficiente, acho que para a maioria de vocês será e sinto muito pelos outros!)) .E a versão mais legível (sim, é bastante legível para um script Perl!):
-1 byte graças a Titus.
fonte
for
loops, sim, eles são obrigatórios.y2
. Aposto que você não precisa disso. E você pode escrever para STDOUT?GeoGebra , 92 bytes
Cada linha é inserida separadamente na barra de entrada. Aqui está um gif mostrando a execução:
Como funciona
O
polygon
comando cria um polígono de 20 lados, com os vértices da linha de base em(0,0)
e(1,0)
. O próximo comando itera sobre cada vértice do polígono com índicei
, usando os comandossequence
evertex
, e para cada vértice com índicei
, desenha um segmento de linha para todos os outros vértices com índicej
usando osegment
comandofonte
PHP,
186184196 bytesgrava a imagem em STDOUT
demolir
-12 bytes para fixo
n=20
Substitua
$p=2*M_PI
por6
(-8),/=$argv[1]
por=M_PI/10
(-2) e$b>0
por$b
(-2)Usar PI / 10 exato não dói. Com
.3142
, os erros de arredondamento da versão parametrizada permaneceram, mas comM_PI/10
eles desapareceram e posso verificar$b
(<> 0) em vez de$b>0
. Eu poderia ter salvo dois bytes com.314
, mas isso teria compensado os pontos.O limite
$a<6
é suficientemente exato para 20 pontos.174 bytes para fixo
n=314
Usar 314 pontos resulta em um círculo preenchido nessa resolução (como 136.140, todos os números pares acima disso e tudo acima de 317).
fonte
NetLogo - 44 bytes
fonte
R,
127123 bytesProduz:
Etiquetas do eixo legal, não é?
-4 bytes graças a @Titus!
fonte
for(i in 2:n){for(j in 1:i)...}
. Será queR
exigem as chaves?BBC BASIC, 98 caracteres ascii
Tamanho do arquivo tokenizado 86 bytes
Intérprete Dowload em http://www.bbcbasic.co.uk/bbcwin/bbcwin.html
Não há nada errado em desenhar cada linha duas vezes, a aparência é idêntica :-P
Ungolfed
Saída n = 21
Isso parece muito melhor na renderização original do que no navegador.
fonte
LINE
função. BeatsDRAW
...Oitava,
50 48 4645 bytesEssa é uma função anônima que plota o gráfico que estamos procurando.
Explicação:
(k=0:2*pi/N:N)+k'
Cria umaN+1 x N+1
matriz de adjecência completa e define simultaneamente o vetork
de ângulos, para o qual usamos então[cos(k);sin(k)]'
, uma matriz de coordenadas em que cada nó do gráfico está posicionado.gplot
apenas plota o gráfico que queremos.Pois
N = 29
temos:fonte
JavaScript (ES5) / SVG (HTML5), 181 bytes
Funciona apenas para números primos, como a sugestão original de 37. Você pode reduzir pela metade (arredondado para cima) o valor inicial de
i
para obter uma imagem mais fraca. Você também pode ajustar consistentemente os1e3,2e3
outros valores a gosto (comecei com,300,600
mas decidi que era muito grosseiro).fonte
MATLAB, 36 bytes
Essa é uma função anômala que cria o enredo.
Exemplo:
fonte
graph
não é parte da caixa de ferramentas de bioinformática ... nem sabia que existia ... agradável :)QBasic 4.5,
398271 bytesA tela no QBasic pode ser apenas 640x480, portanto o círculo tem um raio de apenas 230 px, infelizmente. Além disso, há alguns artefatos por causa da perda de precisão de flutuação para int. É assim
N=36
:Edição: Eu não precisava do armazenamento, a declaração de tipo e todo o loop. Calcular todos os cartesianos de Polars no local é 50% mais barato na contagem de bytes ...
fonte
QBIC ,
9894 bytesEu converti
minha resposta QBasic original da resposta de@LevelRiverSt para QBIC. Eu pensei que isso dependeria muito de funções que não são incorporadas ao QBIC para serem viáveis, mas, como se vê, ele salva outros 90 bytes. A substituição deDRAW
forLINE
salva outros 80 bytes. Eu sabia que estava esquecendo algo simples ...Quando executado com um parâmetro de linha de comando 36, fica assim:
fonte
Processamento, 274 bytes (239 +
size
chamada e chamada de função)Sinceramente, não sei por que, mas
setup
tinha que estar na segunda linha. eu usei https://en.wikipedia.org/wiki/Rotation_matrix para me ajudar a calcular a matemática para rotação. Este programa calcula os pontos e os empurra para uma matriz, com a qual estamos usando para desenhar linhas.Aqui está uma foto de um polígono com 50 arestas (as 100 arestas eram quase completamente pretas)
Você pode adicionar
stroke(0,alpha);
para ter arestas transparentes, ondealpha
está a opacidade da linha. Aqui está o mesmo polígono comalpha
de20
.fonte
Bash + Jelly + GraphViz, 52 caracteres, 52 ou 63 bytes
Dado que os programas em questão discordam sobre qual codificação de caracteres usar, o programa está cheio de caracteres de controle. Aqui está o que parece embaixo
xxd
, na codificação Latin-1 (que representa cada caractere em um byte):Na verdade, não consegui executar o programa sem converter a entrada em UTF-8 por algum motivo (o que tornaria 63 bytes de comprimento). Logicamente deveria funcionar como Latin-1 - nenhum dos caracteres está fora do intervalo de 0 a 255 -, mas continuo recebendo erros de "índice de string fora do intervalo", não importa como eu configure as variáveis de ambiente de codificação de caracteres. Portanto, isso terá que ser contado como 63 bytes, a menos que alguém possa descobrir uma maneira de executá-lo sem recodificá-lo.
O programa pode ser um pouco mais legível se o interpretarmos na codificação de Jelly:
O programa pega o número de pontos na entrada padrão e gera uma imagem PostScript na saída padrão. (Ele pode ser adaptado trivialmente para produzir em qualquer formato que o GraphViz suporte, alterando o
-Tps
no final; é apenas que o PostScript tem o nome mais curto. É possível salvar cinco caracteres removendo o-Tps
, mas obtém o resultado no formato de imagem interno do GraphViz que nada mais suporta, o que provavelmente não conta para os propósitos da pergunta.)Fundamentalmente, este é apenas um programa Jelly que chama o GraphViz para fazer o desenho; no entanto, o Jelly não parece ter recursos para executar programas externos, então tive que usar o bash para vinculá-los. (Isso também significa que é mais barato fazer com que o Jelly solicite a entrada do stdin manualmente; normalmente ele recebe a entrada da linha de comando, mas isso significaria bytes extras no wrapper do bash.)
circo
Organizará automaticamente todos os pontos solicitados a desenhar em um círculo , portanto, o código Jelly precisa solicitar que ele desenhe uma lista de pontos, todos conectados entre si. Veja como funciona:O uso do Jelly permite compactar levemente a string que configura a saída do GraphViz por meio de seu dicionário embutido. O dicionário tem
graph
,node
epoint
. Irritantemente, ele não possuishape
(possuiSHAPE
, mas o GraphViz faz distinção entre maiúsculas e minúsculas), portanto, precisamos codificar esse caractere por caractere.Aqui está a saída da entrada 21 (com uma ligeira modificação no programa para torná-lo em um formato que pode ser carregado no Stack Exchange):
fonte
PHP + HTML SVG,
316263 bytesVersão golfed com
n
pontos codificados e semn
parâmetro de entrada :Versão golfada anterior com parâmetro de entrada para
n
pontos, 316 bytes:Uso: salve em um arquivo e ligue no navegador:
Versão ungolfed com parâmetro de entrada para
n
pontos e CSS:Não foi possível anexar um snippet totalmente funcional de 32 pontos devido ao limite de 30k caracteres para uma única postagem. Aqui está uma captura de tela:
O snippet anexado é limitado a 18 pontos por causa do limite de postagem única de 30k.
Mostrar snippet de código
fonte
R, 108 bytes
Poderia raspar 5 bytes se eu me livrasse do argumento
,as=1
que força uma proporção de 1. Usaexpand.grid
para criar uma matriz com todo o possível par de pontos e usaapply
para fazer um loop através dela.Gráfico R +, 87 bytes
Outra solução usando o pacote
igraph
.fonte