Le triangle de Reuleaux est la forme formée par l'intersection de trois cercles, chaque cercle passant par les centres des autres. Quelle que soit la rotation, la largeur d'un triangle de Reuleaux sera toujours égale au rayon des cercles:
Image: Wolfram MathWorld
Écrivez un programme qui prend une largeur r
en entrée et affiche un triangle de Reuleaux de cette largeur (en pixels).
Vous devez afficher la forme de manière isolée, c'est-à-dire pleine, sans contour et sur fond plein.
code-golf - Le programme le plus court en octets gagne.
code-golf
graphical-output
geometry
darrylyeo
la source
la source
r
être en pixels ou simplement un facteur d'échelle?Réponses:
JavaScript + HTML,
164158+ 13 = 171 octetsJe ne sais pas pourquoi j'aime répondre à ces défis de dessin mathématique avec
<canvas>
autant ...la source
Love2D, 320 octets.
Probablement pas la solution optimale, il utilise les pochoirs de Love2D, en mettant en place les 3 cercles et en remplissant là où ils se croisent.
Appelez via la ligne de commande, comme
love tri.love 256
Exemple de sortie
la source
Python 2 , 111 octets
la source
Mathematica
10110098 octetsAdopter une approche différente de @MichaelSeifert, et probablement l'interpréter un peu plus littéralement en ce qui concerne la clause pixel:
Exemple d'utilisation:
10 pixels
50 pixels
100 pixels
Sauvegardé un octet grâce à @MartinEnder (notation infixe) et 2 autres octets en définissant d.
la source
PHP + SVG, 165 octets
Exemple de sortie pour l'entrée 128
la source
PostScript,
968685757372 octetsPrend l'entrée en tant que valeur sur la pile.
^^
et^@
représentent des caractères de contrôle littéraux.(^@^^Z<^@Z<)
est la chaîne de caractères avec les points de code 0, 30, 90, 60, 0, 90 et 60, respectivement. Ceux-ci sont ensuite interprétés comme des angles en degrés, car c'est évidemment à cela que servent les points de code.10 octets enregistrés car il
closepath
n'est pas nécessaire (à la foisclip
etfill
fermez implicitement le chemin).1 octet enregistré en utilisant
repeat
au lieu de définir une fonction.10 octets enregistrés en passant à une approche complètement différente.
Enregistré 2 octets en faisant des tours avec la pile.
1 octet enregistré en utilisant
0 1 2{}for
au lieu de3{}repeat
.la source
Mathematica,
134131 octetsNB Cette solution n'est plus valable, car la question a été modifiée par la suite pour exiger que r soit mesuré en pixels. Merci à Martin Ender de m'avoir aidé à raser quelques octets dans les commentaires.
La valeur d'entrée doit être mise à l'échelle entre 0 et 1 pour que ce code fonctionne. Notez que près d'un quart de ce code est nécessaire pour afficher la forme "isolément", car ce n'est pas la valeur par défaut de Mathematica.
la source
r Exp[2 I Pi n/3]
peut êtreExp[2I n/3Pi]r
de sauver quelques espaces. Et il est généralement plus court d'écrire une fonction sans nom, c'est-à-dire de supprimerr=Input[];
, de remplacerr
par#
et d'ajouter a&
.BBC BASIC, 58 octets
Téléchargez l'interprète sur http://www.bbcbasic.co.uk/bbcwin/download.html
Non golfé
la source
TeX / TikZ,
128121112 octetsLe code est basé sur cette réponse à TeX.se .
TeX est basé sur des vecteurs, donc ne fait pas de pixels. Le rayon est un flottant avec un maximum d'environ 15 avant qu'il ne touche le bord de la page. Il n'est pas non plus vraiment conçu pour la saisie en ligne de commande, donc doit être exécuté en tant que
où le code ci-dessus est enregistré dans
rt.tex
la source
.tex
;\footline{}
est tout aussi bon que\nopagenumbers
; utiliser~
comme nom de variable au lieu de\i
. Pour satisfaire l'exigence de «pixel», vous pouvez utiliser\r sp
; 1sp est le genre d'équivalent à un pixel pour TeX car c'est le meilleur emplacement que TeX puisse gérer (je ne sais pas si cela s'applique à tikz cependant).sp
mais je pense quept
c'est une bonne idée. Toutes vos autres idées ont fonctionné (certaines n'avaient pas semblé le faire dans mes tests). Merci~
pour enregistrer un octet de plus.\input tikz\footline{}\tikz\draw[draw=none,fill=red](0,1)\foreach~in{1,2,3}{[rotate=~*120]arc(0:60:\r sp)};\bye
travaille pour moi. Essayezpdftex "\def\r{2000000} \input rt.tex"
- à 2sp de trouver la forme visuellement serait difficile compte tenu de sa petite taille.GLSL,
298229 caractèresEssayez-le ici
Prime
r
variablela source
JavaScript (ES6) + HTML, 196 + 13 = 209 octets
Utilise une approche basée sur le chemin au lieu d'une approche de remplissage de pixels.
Afficher l'extrait de code
la source
Logo, 53 octets
utilise la
filled
commande pour remplir la forme en couleur 0 (noir.) Le code dans les crochets extérieurs est exécuté sans qu'aucune ligne ne soit dessinée, mais Logo garde une trace des mouvements de la tortue et remplit la forme une fois que le crochet est quitté.Logo,
6461 octetsPen Down, dessinez un arc de 60 degrés avec la tortue au centre, Pen Up, déplacez le stylo au début de l'arc, tournez à 120 degrés.
Répétez 3 fois, puis déplacez-vous à l'intérieur de la forme et remplissez-la.
Essayez à http://turtleacademy.com/playground/en
Appelez comme
cs ht t 100
(écran clair, cachez la tortue,t
avec r = 100.)la source
MATL , 35 octets
Cela produit un fichier appelé
image.png
. Pour la saisier
, la taille de l'image est2*r+1
et la largeur du triangle estr
telle que requise.Essayez-le sur MATL Online! L'interpréteur en ligne ouvre automatiquement le fichier créé et affiche l'image avec une mise à l'échelle arbitraire; cliquez dessus pour obtenir la version réelle.
Alternativement, voici deux exemples de sorties du compilateur hors ligne fonctionnant sur Matlab, avec les entrées
50
et100
. La dernière partie du code0YG
a été remplacée parIYG
afin que la figure soit directement affichée (avec la bonne taille) au lieu d'être écrite dans un fichier.Explication
la source
JavaScript (ES6) + SVG (HTML5), 28 + 102 = 130 octets
Le nombre d'octets exclut le code nécessaire pour une entrée utilisateur pratique de la taille souhaitée.
la source
n=>s.style.width=n
fonctionnerait aussi.MetaPost (
242226 octets)Il peut être possible de réduire quelque peu cela, je suis nouveau sur metapost.
la source
len * dir
et le point à la fin?k,
14110098 octetsL'entrée est prise
stdin
, la sortie eststderr
(oustdin
selon l'interpréteur) aupgm
format. Par exemple:Explication:
la source
05AB1E , 66 octets
Impossible d'utiliser TIO, car il ouvre une fenêtre et y dessine le triangle de Reuleaux.
Demande l'entrée, puis ouvre une fenêtre de tortue Python dessinant le triangle.
La réponse de Jonathan Allan m'a donné l'inspiration pour le faire, même si j'ai légèrement modifié son code.
Essentiellement, il s'agit d'une combinaison des capacités de compression de 05AB1E et de la facilité d'utilisation des graphiques de tortue par Python.
la source
OpenSCAD , 91 octets
Je ne sais pas à quel point cela est casher, car les pixels ne sont pas vraiment une unité bien définie dans les formats de grille de maillage que je connaisse. Au lieu de cela, le module
t
dessine un triangle de Reuleaux de rayon donnér
dans toutes les unités natives utilisées.Exemple de sortie d'aperçu pour
t(100)
:la source
SmileBASIC,
8786858382817978777675 octetsNon golfé:
la source