Das Reuleaux-Dreieck ist die Form, die durch den Schnitt von drei Kreisen gebildet wird, wobei jeder Kreis durch die Zentren der anderen verläuft. Unabhängig von der Drehung entspricht die Breite eines Reuleaux-Dreiecks immer dem Radius der Kreise:
Bild: Wolfram MathWorld
Schreiben Sie ein Programm, das eine Breite r
als Eingabe verwendet und ein Reuleaux-Dreieck dieser Breite (in Pixel) anzeigt.
Sie müssen die Form isoliert anzeigen, dh gefüllt, ungestrichen und vor einem gefüllten Hintergrund.
Code-Golf - Kürzestes Programm in Bytes gewinnt.
code-golf
graphical-output
geometry
darrylyeo
quelle
quelle
r
in Pixel oder nur ein Skalierungsfaktor sein?Antworten:
JavaScript + HTML,
164158 + 13 = 171 ByteIch weiß nicht, warum es mir Spaß macht, diese mathematischen Zeichenherausforderungen
<canvas>
so oft zu beantworten ...quelle
Love2D, 320 Bytes.
Wahrscheinlich nicht die optimale Lösung, es werden Love2D-Schablonen verwendet, die die 3 Kreise aufbauen und dort ausfüllen, wo sie sich schneiden.
Rufen Sie über die Kommandozeile an, wie
love tri.love 256
Beispielausgabe
quelle
Python 2 , 111 Bytes
quelle
Mathematica
10110098 BytesGehen Sie anders vor als bei @MichaelSeifert und interpretieren Sie dies in Bezug auf die Pixel-Klausel wahrscheinlich ein wenig wörtlicher:
Anwendungsbeispiel:
10 Pixel
50 Pixel
100 Pixel
Speichert ein Byte dank @MartinEnder (Infixnotation) und weitere 2 Bytes durch Definieren von d.
quelle
PHP + SVG, 165 Bytes
Beispielausgabe für Eingabe 128
quelle
PostScript,
968685757372 BytesÜbernimmt die Eingabe als Wert auf dem Stapel.
^^
und^@
stellen wörtliche Steuerzeichen dar.(^@^^Z<^@Z<)
ist die Zeichenfolge mit den Codepunkten 0, 30, 90, 60, 0, 90 bzw. 60. Diese werden dann als Winkel in Grad interpretiert, denn dafür sind offenbar Codepunkte.10 Bytes gespart, da
closepath
nicht erforderlich (sowohlclip
als auchfill
implizit den Pfad schließen).1 Byte mit gespeichert
repeat
indem eine Funktion definiert wird.10 Bytes gespart durch Umstellung auf einen völlig anderen Ansatz.
2 Bytes gespart durch Tricks mit dem Stack.
1 Byte mit
0 1 2{}for
anstelle von gespeichert3{}repeat
.quelle
Mathematica,
134131 BytesHinweis: Diese Lösung ist nicht mehr gültig, da die Frage später so bearbeitet wurde, dass r in Pixeln gemessen werden muss. Vielen Dank an Martin Ender, der mir geholfen hat, ein paar Bytes in den Kommentaren zu entfernen.
Der Eingabewert muss zwischen 0 und 1 skaliert werden, damit dieser Code funktioniert. Beachten Sie, dass fast ein Viertel dieses Codes erforderlich ist, um die Form "isoliert" anzuzeigen, da dies nicht die Standardeinstellung von Mathematica ist.
quelle
r Exp[2 I Pi n/3]
kann seinExp[2I n/3Pi]r
, einige Leerzeichen zu sparen. Und es ist in der Regel kürzer eine unbenannte Funktion zu schreiben, also fallen dier=Input[];
, ersetzen Sier
mit#
und ein anhängen&
.BBC BASIC, 58 Bytes
Laden Sie den Interpreter unter http://www.bbcbasic.co.uk/bbcwin/download.html herunter
Ungolfed
quelle
TeX / TikZ,
128121112 BytesDer Code basiert auf dieser Antwort bei TeX.se .
TeX ist vektorbasiert, Pixel also nicht. Der Radius ist ein Gleitkomma mit maximal 15 Zeichen, bevor er den Seitenrand berührt. Es ist auch nicht wirklich für die Kommandozeilen-Eingabe gedacht, muss also als ausgeführt werden
wo der obige Code gespeichert ist
rt.tex
quelle
.tex
;\footline{}
ist genauso gut wie\nopagenumbers
; Verwenden Sie~
als Variablennamen anstelle von\i
. Um die "Pixel" -Anforderung zu erfüllen, können Sie verwenden\r sp
; 1sp ist die Art von Äquivalent zu einem Pixel für TeX, da es der beste Ort ist, den TeX verwalten kann (ich weiß jedoch nicht, ob es für Tikz gilt).sp
aber ich denke, daspt
ist eine gute Idee. Alle Ihre anderen Ideen funktionierten (einige schienen in meinen Tests nicht zu sein). Vielen Dank~
, um ein weiteres Byte zu speichern.\input tikz\footline{}\tikz\draw[draw=none,fill=red](0,1)\foreach~in{1,2,3}{[rotate=~*120]arc(0:60:\r sp)};\bye
funktioniert bei mir. Probieren Sie es auspdftex "\def\r{2000000} \input rt.tex"
- bei 2sp ist es schwierig, die Form visuell zu finden, wenn man bedenkt, wie klein sie ist.GLSL,
298229 ZeichenProbieren Sie es hier aus
Bonus
r
Variablen eingestellt werdenquelle
JavaScript (ES6) + HTML, 196 + 13 = 209 Byte
Verwendet einen pfadbasierten Ansatz anstelle eines pixelfüllenden Ansatzes.
Code-Snippet anzeigen
quelle
Logo, 53 Bytes
verwendet die
filled
Füllt die Form Befehl in Farbe 0 (Schwarz). Der Code in den äußeren eckigen Klammern wird ausgeführt, ohne dass eine Linie gezeichnet wird, aber Logo verfolgt die Bewegungen der Schildkröten und füllt die Form aus, sobald die Klammer verlassen wird.Logo,
6461 BytesStift nach unten, 60-Grad-Bogen mit Schildkröte in der Mitte zeichnen, Stift nach oben, Stift zum Bogenanfang bewegen, 120 Grad drehen.
Wiederholen Sie dies dreimal, bewegen Sie sich dann in die Form und füllen Sie sie aus.
Versuchen Sie es unter http://turtleacademy.com/playground/en
Rufe wie
cs ht t 100
(Bildschirm löschen, Schildkröte verstecken,t
mit r = 100.)quelle
MATL , 35 Bytes
Dies erzeugt eine Datei namens
image.png
. Für die Eingaber
ist die Größe des Bildes2*r+1
und die Breite des Dreiecksr
wie erforderlich.Probieren Sie es bei MATL Online! Der Online-Interpreter öffnet automatisch die erstellte Datei und zeigt das Bild in beliebiger Skalierung an. Klicken Sie darauf, um die aktuelle Version zu erhalten.
Alternativ dazu finden Sie hier zwei Beispielausgaben des auf Matlab ausgeführten Offline-Compilers mit Eingaben
50
und100
. Der letzte Teil des Codes0YG
wurde ersetzt,IYG
sodass die Figur direkt angezeigt wird (mit der richtigen Größe), anstatt in eine Datei geschrieben zu werden.Erläuterung
quelle
JavaScript (ES6) + SVG (HTML5), 28 + 102 = 130 Byte
Die Byteanzahl schließt den Code aus, der für die bequeme Benutzereingabe der gewünschten Größe benötigt wird.
quelle
n=>s.style.width=n
würde auch funktionieren.MetaPost (
242226 Bytes)Es könnte möglich sein, dies etwas zu reduzieren. Ich bin neu bei Metapost.
quelle
len * dir
und den Punkt am Ende entfernen ?k,
14110098 BytesDie Eingabe erfolgt von
stdin
, die Ausgabe erfolgtstderr
(oderstdin
je nach Interpreter) impgm
Format. Beispielsweise:Erläuterung:
quelle
05AB1E , 66 Bytes
TIO kann nicht verwendet werden, da es ein Fenster öffnet und dort das Reuleaux-Dreieck zeichnet.
Fordert zur Eingabe auf und öffnet dann ein Python-Turtle-Fenster, in dem das Dreieck gezeichnet wird.
Jonathan Allans Antwort hat mich dazu inspiriert, obwohl ich seinen Code ein wenig geändert habe.
Dies ist im Wesentlichen eine Kombination aus den Komprimierungsfunktionen von 05AB1E und der einfachen Turtle-Grafik von Python.
quelle
OpenSCAD , 91 Byte
Ich bin mir nicht sicher, wie koscher das ist, da Pixel in den mir bekannten Mesh-Grid-Formaten keine wirklich gut definierte Einheit sind. Stattdessen zeichnet das Modul
t
ein Regeldreieck mit einem bestimmten Radiusr
in den jeweils verwendeten nativen Einheiten.Beispielvorschau für
t(100)
:quelle
SmileBASIC,
8786858382817978777675 BytesUngolfed:
quelle