Un spirographe est un jouet qui dessine des hypotrochoïdes et des épitrochoïdes. Pour ce défi, nous allons nous concentrer uniquement sur les hypotrochoïdes.
De Wikipédia :
Un hypotrochoïde est une roulette tracée par un point attaché à un cercle de rayon r roulant autour de l'intérieur d'un cercle fixe de rayon R , où le point est à une distance d du centre du cercle intérieur.
Les équations paramétriques pour elles peuvent être définies comme:
Où θ est l'angle formé par l'horizontale et le centre du cercle de roulement.
Votre tâche consiste à écrire un programme qui dessinera le chemin tracé par le point défini ci-dessus. En entrée, vous recevrez R , r et d , tous les entiers compris entre 1 et 200 inclus.
Vous pouvez recevoir cette entrée depuis stdin, des arguments ou une entrée utilisateur, mais elle ne peut pas être codée en dur dans le programme. Vous pouvez l'accepter sous la forme qui vous convient le mieux; sous forme de chaînes, entiers, etc.
Présumer:
- Les unités d'entrée sont données en pixels.
- R > = r
La sortie doit être une représentation graphique de l'hypotrochoïde définie par l'entrée. Aucune sortie ASCII ou autre texte n'est autorisée. Cette image peut être enregistrée dans un fichier ou affichée à l'écran. Inclure une capture d'écran ou une image de la sortie pour une entrée de votre choix.
Vous pouvez choisir toutes les couleurs que vous souhaitez pour le chemin / arrière-plan, sous réserve d'une restriction de contraste. Les deux couleurs doivent avoir un composant HSV «Value» à au moins la moitié de l'échelle. Par exemple, si vous mesurez le HSV à partir de [0...1]
, il devrait y avoir au moins une 0.5
différence. Entre [0...255]
il devrait y avoir une 128
différence minimale .
Il s'agit d'un code golf, la taille minimale du code source en octets gagne.
la source
R > r
ouR ≥ r
? (Idem pourr
etd
.)R>=r
, maisd
n'est pas limité àr
, et peut être n'importe où dans la plage 1-200.R=200, r=1, d=200
. Vous pouvez redimensionner l'image à l'entrée si vous le souhaitez, ou la conserver à une taille constante, tant qu'elle est entièrement visible.Réponses:
Mathematica, 120 octets
Code non généré et exemple de sortie:
Si je peux inclure les axes dans l'intrigue, je peux enregistrer 9 autres caractères.
la source
JavaScript (ECMAScript 6) -
312314 caractèresJSFIDDLE
Exemple de sortie
r = 1, R = 200, d = 30
la source
Python: 579
Sommaire
Ce n'est pas du tout compétitif compte tenu de la réponse de Mathematica, mais j'ai quand même décidé de la poster car les photos sont jolies et cela peut inspirer quelqu'un ou être utile à quelqu'un. Parce qu'il est tellement plus grand, je l'ai laissé fondamentalement non golfé. Le programme attend une entrée de ligne de commande de R, r, d.
Capture d'écran
Voici deux exemples, un pour (5,3,5) et un pour (10,1,7)
Code
la source
Perl / Tk -
239227R = 120, r = 20, d = 40:
R = 128, r = 90, d = 128:
R = 179, r = 86, d = 98:
la source
Traitement, 270
L'entrée est entrée via la console, un numéro par ligne.
Capture d'écran pour R = 65, r = 15, d = 24:
la source
GeoGebra, 87
Autrement dit, si vous considérez GeoGebra comme une langue valide.
Accepte les entrées de la barre de saisie GeoGebra, au format
<variable>=<value>
, par exempleR=1000
.Notez que vous devrez peut-être modifier manuellement la taille du zoom pour afficher l'image entière.
(La chose en bas de la fenêtre est la barre d'entrée dont je parlais)
Essayez-le en ligne ici .
la source
HTML + Javascript 256
286 303Modifier le premier appel supprimé de moveTo, cela fonctionne quand même. Pourrait économiser plus de coupe beginPath, mais cela ne fonctionne que la première fois
Edit2 30 octets enregistrés thx @ ӍѲꝆΛҐӍΛПҒЦꝆ
Tester
Mettez la saisie dans la zone de texte (séparée par des virgules) puis appuyez sur tab
la source
R, 80 octets
Cependant, si l'on veut des chiffres «propres» (pas d'axes, pas d'étiquettes, etc.), alors le code devra être légèrement plus long (88 caractères):
Un exemple de code utilisant la version longue de f:
Quelques exemples de sorties:
la source
,
??C # 813, était 999
Nécessite un peu de travail pour réduire le nombre d'octets. J'ai réussi à le réduire un peu. Il accepte trois entiers séparés par des espaces de la console.
Échantillon de sortie:
la source
script shell + gnuplot (153)
La majeure partie de l'effort consiste à supprimer les axes et les tics, à définir la taille et la plage et à augmenter la précision. Heureusement, gnuplot est naturel pour le golf, donc la plupart des commandes peuvent être abrégées. Pour enregistrer des caractères, la sortie doit être redirigée manuellement vers un fichier image.
Appeler le script avec
spiro.sh 175 35 25>i.png
donnela source
R, 169 caractères
Dentelé:
Exemples:
la source
SmileBASIC, 96 octets
Entrée: 50,30,50:
la source
Befunge-98, 113 octets
Ce code s'appuie sur l' empreinte digitale FIXP (Fixed Point Maths) pour certains calculs trigonométriques et sur Turtle Graphics (TURT) empreinte digitale pour tracer le chemin du spirographe.
Les graphiques Turtle dans Befunge sont très similaires dans leur comportement aux graphiques du langage de programmation Logo . Vous dessinez avec une «tortue» (servant de plume), que vous dirigez autour de la surface de sortie. Cela implique d'orienter la tortue dans une direction particulière, puis de lui demander d'avancer d'une certaine distance.
Afin de travailler avec ce système, j'avais besoin d'ajuster les équations du spirographe d'origine en quelque chose d'un peu plus convivial pour les tortues. Je ne sais pas si c'est la meilleure approche, mais l'algorithme que j'ai trouvé fonctionne quelque chose comme ceci:
Notez que cela dessine en fait le chemin avec une sorte de motif en zig-zag, mais vous ne le remarquez vraiment que si vous zoomez de près sur l'image.
Voici un exemple utilisant les paramètres R = 73, r = 51, d = 45.
J'ai testé le code avec CCBI et cfunge , qui produisent tous deux une sortie sous la forme d'une image SVG. Comme il s'agit d'un format vectoriel évolutif, l'image résultante n'a pas de taille de pixel en tant que telle - elle est simplement mise à l'échelle pour s'adapter à la taille de l'écran (au moins lorsqu'elle est affichée dans un navigateur). L'exemple ci-dessus est une capture d'écran qui a été recadrée et mise à l'échelle manuellement.
En théorie, le code pourrait également fonctionner sur Rc / Funge , mais dans ce cas, vous devrez exécuter sur un système avec XWindows, car il essaiera de rendre la sortie dans une fenêtre.
la source
wxMaxima : 110
Ceci est appelé dans la session interactive via
f(#,#,#)
. À titre d'exemple, considérezf(3,2,1)
:la source
Raquette
Production:
la source