Tracez des lignes entre chaque paire de points distincts pour les n
points disposés en cercle, produisant quelque chose comme le résultat ci-dessous. Le code le plus court (en octets) gagne! Vos lignes ne doivent pas nécessairement être transparentes, mais elles ont l'air mieux ainsi. La sortie doit être un graphique vectoriel ou une image d’au moins 600 pixels par 600 pixels (enregistrée dans un fichier ou affichée à l’écran). Pour terminer le défi, vous devez tirer au moins 20.
code-golf
kolmogorov-complexity
graphical-output
J. Antonio Perez
la source
la source
n
et tracer des lignes pour lesn
points.n
ajouterait beaucoup de difficulté, car je m'attends à ce que la plupart des solutions fonctionnent avec un nombre, de toute façon, surtout parce que 37 est étrange et qu'il n'y a donc pas de symétrie miroir.n
comme entrée ou choisissons simplement un nombre arbitrairen
supérieur à 20?Réponses:
Mathematica, 13 octets
On dirait que cela ne fait que donner une circulaire
n=4
, mais la question ditn>=20
la source
n
(j'avais la réponse prête de la 37 fixe) :(MATL ,
1614 octetsComme je ne parle pas très bien MATL, je pense que c'est un peu plus golfable. (Ce serait bien de battre au moins Mathematica :-) C'est-à-dire que le flip
w
n'est pas optimal, il pourrait probablement être évité ...Testez-le en ligne! (Merci @Suever pour ce service, merci @DrMcMoylex pour -2 octets.)
Explication (pour
N=3
):Il convient de noter que vous pouvez utiliser la formule pour générer les N-ième racines de l' unité
exp(2*pi*i*k/N)
pourk=1,2,3,...,N
. Mais puisqueexp(pi*i/2) = i
vous pouvez aussi écrirei^(4*k/N)
pourk=1,2,3,...,N
ce que je fais ici.la source
XH:H
de:G
G
merci beaucoup!PICO-8 , 131 octets
Je n'étais pas vraiment sûr de ne pas enfreindre les règles, mais je l'ai quand même fait!
Golfé
Ungolfed
PICO-8 est une console fantastique basée sur Lua avec une résolution native de 128x128. J'ai fait le cercle aussi grand que possible ...
la source
Mathematica, 42 octets
Crée un ensemble de 37 points disposés en cercle, puis trace des lignes entre tous les sous-ensembles possibles de deux points. Quelqu'un a posté une réponse plus courte qui tire parti de CompleteGraph, mais je crois que c'est la réponse la plus courte en dehors de celles qui s'appuient sur CompleteGraph.
la source
Tuple
. Vous devez également mettre à jour ceci pour accepter arbitrairen
, mais cela ne vous coûtera aucun octet.Tuples
HTML + JS (ES6), 34 +
177164162 = 196 octetsEn utilisant le API HTML5 Canvas .
Voir sur CodePen .
-13 octets : supprimé
closePath()
, déplacéstroke()
intérieurbeginPath()
-2 octets : Variable définie à l'
a
intérieurrotate()
la source
Java,
346338322301 octetsCette solution fonctionne pour tous
n>1
, même si le message d'origine ne l'exigeait pas.Mon préféré est
n=5
, ne demandez pas pourquoi, aussi, si vous voulez une interface graphique plus cool, utilisez:int a=Math.min(this.getHeight(),this.getWidth())/2;
À la place du 300 codé en dur, il utilisera la largeur ou la hauteur du cadre comme diamètre.
Sauvegardé 8 octets grâce à Shooqie. Sauvé 21 octets grâce à Geobits.
Sortie pour
n=37
:la source
Frame x=
etfinal
(je pense?)Frame x
d'une autre solution qui impliquait un thread. Vous avez besoin de la version finale, car il s'agit d'une référence de classe interne à une variable externe de la classe propriétaire.int
déclarations en dehors desfor
bouclesPython 2,
258235229 octetsSortie pour
n=37
la source
from PIL import*
court?import *
, en fonction de la manière dont vous installez, vous pouvez sauter le PIL et importer Image / ImageDraw directementOctave,
8869 octetsSortie pour
N=37
:Sortie pour
N=19
:la source
gplot
aussi, mais je n'ai pas réussi à le rendre assez court ...Perl, 229 octets
Il utilise la même formule que la plupart des langues qui n'ont pas été intégrée de manière pratique pour ce défi (même si je ne les ai pas regardées pour le trouver, mais c'est une formule assez facile à trouver). Donc, pas très intéressant, mais il n’ya généralement pas beaucoup de réponses Perl à ce type de défis, je voulais donc en proposer un.
Et vous aurez besoin de
-MImager
(9 octets),-MMath::Trig
(fournissantpi
, 13 octets) et-n
(1 octet) ==> + 23 octets.Pour l'exécuter:
Cela créera un fichier nommé
t.png
contenant l'image.Vous aurez besoin d'installer
Imager
cependant, mais pas de soucis, c'est assez facile:(Le
echo
s vous configurera cpan si vous ne l’avez jamais utilisé auparavant (en fait, cela ne fonctionnera que si votre perl est assez récent, je pense que pour la plupart d’entre vous, ce sera le cas, et je suis désolé pour les autres!)) .Et la version la plus lisible (oui, c'est assez lisible pour un script Perl!):
-1 octet grâce à Titus.
la source
for
boucles, alors oui, elles sont obligatoires.y2
. Je parie que vous n'en avez pas besoin. Et pouvez-vous écrire à STDOUT?GeoGebra , 92 octets
Chaque ligne est entrée séparément dans la barre de saisie. Voici un gif montrant l'exécution:
Comment ça marche
La
polygon
commande crée un polygone à 20 côtés, avec les sommets de la ligne de base(0,0)
et(1,0)
. La commande suivante parcourt ensuite chaque sommet du polygone indexéi
, à l'aide des commandessequence
andvertex
, et pour chaque sommet indexéi
, trace un segment de droite sur chaque autre sommet indexéj
à l'aide de lasegment
commande.la source
PHP,
186184196 octetsécrit l'image sur STDOUT
panne
-12 octets pour fixe
n=20
Remplacer
$p=2*M_PI
par6
(-8),/=$argv[1]
par=M_PI/10
(-2) et$b>0
par$b
(-2)L'utilisation exacte de PI / 10 ne fait pas mal. Avec
.3142
, les erreurs d'arrondis de la version paramétrée sont restées, mais avecM_PI/10
elles ont disparu et je peux vérifier$b
(<> 0) au lieu de$b>0
. J'aurais pu économiser deux octets avec.314
, mais cela aurait compensé les points.La limite
$a<6
est suffisamment précise pour 20 points.174 octets pour fixe
n=314
En utilisant 314 points, on obtient un cercle rempli dans cette résolution (comme le font 136 140, chaque nombre pair supérieur à 317).
la source
NetLogo - 44 octets
la source
R,
127123 octetsProduit:
Les étiquettes de Nice Axe, euh?
-4 octets grâce à @Titus!
la source
for(i in 2:n){for(j in 1:i)...}
. Avez-vousR
besoin des accolades?BBC BASIC, 98 caractères ascii
Taille de fichier en jetons 86 octets
Téléchargez l'interprète à l' adresse http://www.bbcbasic.co.uk/bbcwin/bbcwin.html
Il n'y a rien de mal à tracer chaque ligne deux fois, l'apparence est identique :-P
Ungolfed
Sortie n = 21
Cela semble beaucoup mieux dans le rendu original que dans le navigateur.
la source
LINE
fonction. BeatsDRAW
...Octave,
50 48 4645 octetsC'est une fonction quelconque qui trace le graphique que nous recherchons.
Explication:
(k=0:2*pi/N:N)+k'
Crée uneN+1 x N+1
matrice d'adressage complète et définit simultanément le vecteurk
d'angles, que nous utilisons ensuite pour[cos(k);sin(k)]'
une matrice de coordonnées où chaque nœud de graphe est positionné.gplot
trace simplement le graphique que nous voulons.Pour
N = 29
nous obtenons:la source
JavaScript (ES5) / SVG (HTML5), 181 octets
Ne fonctionne que pour les nombres premiers, tels que la suggestion initiale de 37. Vous pouvez diviser par deux (arrondi) la valeur initiale de
i
pour obtenir une image plus pâle. Vous pouvez également constamment ajuster les1e3,2e3
valeurs sur d’autres goûts (j’ai commencé300,600
mais j’ai décidé que c’était trop grossier).la source
MATLAB, 36 octets
C'est une fonction anormale qui crée l'intrigue.
Exemple:
la source
graph
ne fasse pas partie de la boîte à outils bioinformatique ... je ne savais même pas qu'elle existait ... Nice :)QBasic 4.5,
398271 octetsL’écran de QBasic n’est que de 640x480, le cercle a donc un rayon de 230 px seulement, malheureusement. En outre, il y a des artefacts dus à la perte de précision float-to-int. Ressemble à ceci pour
N=36
:EDIT: Je n'ai pas eu besoin du stockage, de la déclaration de type ni de tout le bouclage. Le calcul de tous les Carthesians from Polars est 50% moins cher en nombre d'octets ...
la source
QBIC ,
9894 octetsJ'ai converti
ma réponse QBasic d'origine@LevelRiverSt en QBIC. Je pensais que cela reposerait trop sur des fonctions qui ne sont pas intégrées à QBIC pour être réalisables, mais il s'avère que cela économise 90 octets supplémentaires. En remplaçant leDRAW
pour, vousLINE
enregistrez 80 octets supplémentaires. Je savais que j'oubliais quelque chose de simple ...Lorsqu'il est exécuté avec un paramètre de ligne de commande de 36, il ressemble à ceci:
la source
Traitement, 274 octets (239 +
size
appel et appel de fonction)Honnêtement, je ne sais pas pourquoi, mais je
setup
devais être en deuxième ligne. j'ai utilisé https://en.wikipedia.org/wiki/Rotation_matrix pour m'aider à calculer le calcul de la rotation. Ce programme calcule les points et les place dans un tableau avec lequel nous utilisons pour tracer des lignes.Voici une image d'un polygone à 50 arêtes (celle des 100 arêtes était presque entièrement noire)
Vous pouvez ajouter
stroke(0,alpha);
des bords transparents, oùalpha
est l'opacité de la ligne. Voici le même polygone avecalpha
de20
.la source
Bash + Jelly + GraphViz, 52 caractères, 52 ou 63 octets
Étant donné que les programmes en question ne sont pas d’accord sur le codage de caractères à utiliser, le programme est rempli de caractères de contrôle. Voici à quoi cela ressemble en dessous
xxd
, en codage Latin-1 (qui représente chaque caractère sur un octet):Cependant, je ne pouvais pas exécuter le programme sans convertir l’entrée en UTF-8 pour une raison quelconque (ce qui lui donnerait une longueur de 63 octets). Logiquement, cela devrait fonctionner comme Latin-1 - aucun des caractères ne se trouve en dehors de la plage comprise entre 0 et 255 - mais je continue à avoir des erreurs "indice de chaîne hors de la plage", quelle que soit la configuration des variables d'environnement de codage de caractères. Il faudra donc compter 63 octets à moins que quelqu'un puisse trouver un moyen de l'exécuter sans le ré-encoder.
Le programme pourrait être légèrement plus lisible si nous l’interprétons dans le codage de Jelly:
Le programme prend le nombre de points sur l'entrée standard et génère une image PostScript sur la sortie standard. (Il peut être adapté de manière triviale à la sortie dans n’importe quel format pris en charge par GraphViz en modifiant le dernier
-Tps
; c’est simplement que PostScript porte le nom le plus court. On peut soutenir que vous pouvez enregistrer cinq caractères en supprimant le-Tps
, mais vous obtenez une sortie au format d’image interne de GraphViz. que rien d’autre ne prend en charge, ce qui ne compte probablement pas pour les besoins de la question.)Fondamentalement, il s’agit simplement d’un programme Jelly qui fait appel à GraphViz pour effectuer le dessin; Cependant, Jelly ne semble pas avoir de capacités pour exécuter des programmes externes, j'ai donc dû utiliser bash pour les lier ensemble. (Cela signifie également qu'il est moins coûteux de saisir manuellement les requêtes Jelly à partir de stdin; normalement, elles sont saisies à partir de la ligne de commande, mais cela signifierait des octets supplémentaires dans le wrapper bash.)
circo
Organisera automatiquement tous les points qu'il est demandé de dessiner en cercle. , le code Jelly doit donc lui demander de dresser une liste de points, qui sont tous connectés les uns aux autres. Voici comment cela fonctionne:L'utilisation de Jelly nous permet de compresser légèrement la chaîne qui configure la sortie GraphViz via son dictionnaire intégré. Le dictionnaire a
graph
,node
etpoint
. Ennuyeusement, il n'a passhape
(il aSHAPE
, mais GraphViz est sensible à la casse), nous devons donc encoder ce caractère par caractère.Voici le résultat pour l'entrée 21 (avec une légère modification du programme pour le rendre dans un format pouvant être téléchargé sur Stack Exchange):
la source
PHP + HTML SVG,
316263 octetsVersion golfée avec
n
points codés en dur et sansn
paramètre d' entrée :Version précédente avec paramètre d'entrée pour les
n
points, 316 octets:Utilisation: enregistrer dans un fichier et appeler depuis le navigateur:
Version non-golfée avec paramètre d'entrée pour les
n
points et les CSS:Impossible de joindre un extrait de code entièrement fonctionnel à 32 points en raison de la limite de 30 000 caractères pour un seul message. Voici une capture d'écran:
L'extrait joint est limité à 18 points en raison de la limite de 30 000 messages.
Afficher l'extrait de code
la source
R, 108 octets
Pourrais perdre 5 octets si je me débarrassais de l'argument
,as=1
qui force un rapport de forme de 1. Utiliséexpand.grid
pour créer une matrice avec toutes les paires de points possibles, et utiliseapply
pour le parcourir en boucle.R + igraph, 87 octets
Une autre solution utilisant package
igraph
.la source