Wenn Sie nur ein Lineal und einen Kompass haben, schreiben Sie eine Raute in das gegebene Rechteck und teilen Sie zwei gegenüberliegende Punkte.
Eingang
Eingabe sind die Abmessungen des Rechtecks. Im gezeigten Beispiel wäre das 125, 50
. Sie können Eingaben auf die bequemste Weise vornehmen (als zwei Ganzzahlen, Liste, Zeichenfolgen usw.).
Die größere Abmessung beträgt mindestens 100, während die kleinere mindestens 25 beträgt. Beide Cap bei 200.
Ausgabe
Die Ausgabe erfolgt in Form eines Bildes (auf dem Bildschirm angezeigt oder als Datei gespeichert)
- Das Eingaberechteck
- Alle "arbeitenden" Linien / Kreise
- Die eingeschriebene Raute
in verschiedenen Farben. Im obigen Bild ist das Rechteck schwarz, die Arbeitslinien blau und die Raute orange. Die Linien sollten in der in der Liste angegebenen Reihenfolge gezeichnet werden (z. B. Rhombus überschreibt Arbeitslinien und Rechtecke).
Das Ausgabebild muss groß genug sein, um alles zu enthalten. Beispielsweise können die angezeigten Kreise nicht außerhalb der Grenzen liegen.
Methode
Die im obigen Beispielbild verwendete Methode lautet:
- Zeichnen Sie einen Kreis mit der linken unteren Ecke als Mittelpunkt und der rechten oberen Ecke als Punkt auf dem Umfang. Geben Sie dabei einen Radius an, der der Diagonale des Rechtecks entspricht.
- Gehen Sie genauso vor, tauschen Sie jedoch die Mittelpunkt- und Umfangspunkte aus.
- Zeichnen Sie eine Linie zwischen den Schnittpunkten der beiden Kreise und geben Sie der Diagonale des Rechtecks eine senkrechte Halbierung.
- Verwenden Sie die Schnittpunkte der neuen Linie und des neuen Rechtecks, um die Raute zu zeichnen.
Dies funktioniert, weil die Innendiagonalen einer Raute sich immer senkrecht halbieren. Ich lege hier jedoch keinen vollständigen Beweis dafür bei.
Dies ist nicht die einzige Methode, um Ihre Raute zu erhalten, und Sie können eine andere verwenden, vorausgesetzt, Sie erklären, was Sie tun. Ich glaube, es ist wahrscheinlich das einfachste.
Regeln
Sie können nur Kreise und Linien (bzw. Liniensegmente) zeichnen. Ein Kreis wird mit einem Mittelpunkt und einem Umfangspunkt definiert. Eine Linie wird durch zwei beliebige Punkte definiert. Linien müssen keine festgelegte Länge haben, aber sie müssen mindestens die definierenden Punkte abdecken (beachten Sie das Beispielbild: Die Linie verläuft ein Stück über die Kreiskreuzungen hinaus, jedoch nicht bis zur Kante). Bei Kreisen gilt der Radius vom Mittelpunkt zum gewählten Umfangspunkt als Arbeitslinie und muss angezeigt werden.
Um die Zeilen zu rastern, können Sie einen beliebigen anerkannten Algorithmus (z. B. Bresenham) verwenden oder sich auf die in Ihrer Sprache enthaltenen Funktionen verlassen. Wenn Ihre Ausgabe vektorbasiert ist, stellen Sie bitte sicher, dass sie mit einer Auflösung angezeigt wird, die mindestens so groß ist wie das Eingaberechteck in Pixel. Außerdem werden Sie auf einer einfachen Leinwand zeichnen, also unterdrücken Sie bitte alle Gittermarkierungen oder überflüssigen Ausgaben.
Kein Schummeln! Sie können die Platzierung von Punkten / Linien / Kreisen nur anhand der bisher festgelegten Werte bestimmen. Wenn Sie nicht erklären können, wie Sie Ihre Arbeitslinien / -kreise verwenden, um zu zeigen, dass es sich um eine Raute handelt, machen Sie es falsch.
Sie können jedes beliebige Paar von gegenüberliegenden Punkten verwenden, und das Rechteck muss nicht achsenausgerichtet gezeichnet werden, solange die Ausgabe korrekt ist.
Die Eingabe wird immer ein nicht quadratisches Rechteck sein. Machen Sie sich also keine Gedanken über die Sondergehäuse.
Schließlich ist dies Standard-Code-Golf, so dass die niedrigste Größe in Bytes gewinnt.
quelle
Antworten:
HTML + JavaScript (ES6), 34 + 353 = 387 Byte
Die Eingabe sollte im Format erfolgen
[125,50]
.Nur eine Menge Mathe und Zeichnen ... Das Rechteck wird seitlich gezeichnet, wenn die Höhe größer als die Breite ist, was ich für zulässig halte.
quelle
444
: P400
;-)Mathematica,
157148158 BytesVielen Dank an Martin Ender für Kommentare in gewohnt hoher Qualität! In diesem Fall werden 9 Bytes gespeichert.
Wurde bearbeitet, nachdem klargestellt wurde, dass die Argumente in beliebiger Reihenfolge kommen können. 10 Bytes hinzugefügt, um dies zu kompensieren.
Auch hier brilliert Mathematica: Hochwertige Grafikausgabe mit mathematischen Berechnungen. Der gleiche Code mit Leerzeichen und Zeilenumbrüchen für die menschliche Lesbarkeit:
Unbenannte Funktion eines einzelnen Arguments, das ein geordnetes Paar positiver Zahlen ist; Das letzte
@@ Sort@# &
konvertiert dieses Paar in zwei numerische Argumente, wobei die erste Zahl die kleinere ist.Line
Erzeugt einen polygonalen Pfad von Punkt zu Punkt, der sich in ein geschlossenes Polygon verwandelt, wenn der erste und der letzte Punkt identisch sind.Circle
Erzeugt einen Kreis mit gegebenem Mittelpunkt und Radius. Spezielle Punkteo
undc
(die untere linke und die obere rechte Rechteckecke),p
(eine dritte Raute, die durch eine mathematische Formel angegeben wird) undk
(die beim Zeichnen der senkrechten Winkelhalbierenden hilfreich ist) werden auf dem Weg benannt, um beim erneuten Aufrufen Bytes zu speichern , genau wie das besondere Punktepaarl = {o,c}
. Mathematica fügt gerne Punkte direkt hinzu, multipliziert beide Koordinaten mit demselben Faktor, berechnet das Skalarprodukt usw., was den Code vereinfacht.Beispielausgabe mit Argumenten
125
und50
:quelle
{0,0}
. Da die Verwendung von Blau und Orange nicht erforderlich ist, können Sie Bytes sparen, indem SieRed
anstelle von verwendenOrange
. Sie verwendenLine
vier Mal, was mehr als genug ist, um Bytes zu speicherni=Line;
(als Faustregel gilt: Wenn der Ausdruckn
Zeichen enthält und Sie siem
benötigen(m-1)*(n-1) > 4
, weniger, wenn Sie die Variable bei der ersten Verwendung ohne Klammern zuweisen können).0{,}
Trick ist fantastisch: D@@Sort@#&
und tauschen#
und#2
über den gesamten Code oder alternativ es an die Arbeit mit dem Porträt-Orientierung Rechtecke statt Anpassung.MetaPost, 473 (mit Farbe) 353 (ohne Farbe)
Farbig (473 Bytes):
Nicht gefärbt (353 Bytes):
Nie zuvor verwendet, und ich bin sicher, ich habe es geschlachtet ...
Aber wenn Sie das auf dieser Website ausführen:
http://www.tlhiv.org/mppreview/
Es verwendet den Schnittpunkt der Kreise, um die zweite Achse zu zeichnen, und verwendet dann den Schnittpunkt der Achse und des Rechtecks, um die endgültige Raute zu zeichnen. Obwohl ich hätte schummeln und nur eine Linie senkrecht zur ersten Achse zeichnen können, haha.
Um die Abmessungen zu ändern, ändern Sie einfach A und B.
Unabhängig davon erhalten Sie (für L = 170, H = 100):
quelle
Desmos, 375 (oder 163) Bytes
w
undh
sind die Eingänge. Probieren Sie es auf Desmos!Alternative 163-Byte-Version:
Diese Version erfordert, dass jede Zeile kopiert und in jede separate Zeile in Desmos eingefügt wird. Meta muss noch entscheiden, ob dies eine gültige Zählmethode ist, aber die erstere Methode ist definitiv in Ordnung.
quelle
ImageMagick Version 7.0.3 + Bash + Sed, 496 Bytes
Ergebnis mit "rhombus.sh 180 120"
Genauer gesagt (6400 x 6400 Zeichenfläche anstelle von 800 x 800), 570 Byte
Die Schnittpunkte sind nicht genau; Die "strokewidth" -Direktive macht die Linien breit genug, um sicherzustellen, dass mindestens ein ganzes Pixel nur mit den Farben der beiden sich kreuzenden Linien gemischt wird. Im schlimmsten Fall (25x200 und 200x25) befinden sich die Kreuzungen jedoch in einem kleinen Winkel, sodass die Wolke Die Anzahl der gemischten Pixel beträgt mehrere Pixel, und da wir das erste und das letzte gemischte Pixel auswählen, liegt ein kleiner Fehler vor. Wenn Sie eine 8x größere Zeichenfläche mit derselben Strichstärke verwenden und das Ergebnis dann verkleinern, wird der Fehler auf weniger als ein Pixel reduziert, jedoch mit einer 64x Zeitstrafe.
Ergebnisse von normalen 800x800 im Vergleich zu präzisen 6400x6400:
Ungolfed:
quelle
R 290 Bytes
Anonyme Funktion, Ausgabe wird auf dem Bildschirm angezeigt. Etwas ungolfed, mit Kommentaren:
Beispielausgabe für (120,100):
quelle
LibreLogo , 270 Bytes
Code:
Ergebnis:
Erläuterung:
quelle
Python 3.5 + Tkinter, 433 oder 515 Bytes
Nicht gefärbt (433 Bytes):
Farbig (515 Bytes):
Eine benannte Funktion, die Eingaben als 2 durch Kommas getrennte Zahlen akzeptiert. Die Ausgabe wird in einem separaten Fenster angezeigt, dessen Größe Sie möglicherweise ändern müssen, um die vollständige Ausgabe anzuzeigen. Hier ist ein Beispiel für eine farbige Ausgabe für
V(180,130)
:quelle
SmileBASIC, 280 Bytes
(Screenshot / Erklärung wird in Kürze veröffentlicht) Hintergrundfarbe ist schwarz, Rechteck ist rot, Kreise und Linien sind weiß und die Raute ist gelb.
quelle