Einführung
In der Geometrie ist die Peano-Kurve das erste Beispiel für eine raumfüllende Kurve, die 1890 von Giuseppe Peano entdeckt wurde. Die Peano-Kurve ist eine surjektive, kontinuierliche Funktion vom Einheitsintervall bis zum Einheitsquadrat, jedoch nicht injektiv. Peano wurde von einem früheren Ergebnis von Georg Cantor motiviert, dass diese beiden Mengen die gleiche Kardinalität haben. Aufgrund dieses Beispiels verwenden einige Autoren den Ausdruck "Peano-Kurve", um sich allgemeiner auf jede raumfüllende Kurve zu beziehen.
Herausforderung
Das Programm nimmt eine Eingabe, die eine Ganzzahl ist n
, und gibt eine Zeichnung aus, die die n
Iteration der Peano-Kurve darstellt, beginnend mit der im linken Teil dieses Bildes gezeigten Seite 2:
Eingang
Eine Ganzzahl n
, die die Iterationsnummer der Peano-Kurve angibt. Optionale, zusätzliche Eingaben werden im Abschnitt Boni beschrieben.
Ausgabe
Eine Zeichnung der n
Iteration der Peano-Kurve. Die Zeichnung kann sowohl eine ASCII-Grafik als auch eine "echte" Zeichnung sein, je nachdem, was am einfachsten oder am kürzesten ist.
Regeln
- Die Ein- und Ausgabe kann in jedem beliebigen Format erfolgen (wählen Sie das für Ihre Sprache / Lösung am besten geeignete Format).
- Es müssen keine negativen Werte oder ungültige Eingaben verarbeitet werden
- Es ist entweder ein vollständiges Programm oder eine Funktion zulässig.
- Fügen Sie nach Möglichkeit einen Link zu einer Online-Testumgebung hinzu, damit andere Benutzer Ihren Code ausprobieren können!
- Standardlücken sind verboten.
- Dies ist Codegolf, daher gelten alle üblichen Golfregeln, und der kürzeste Code (in Byte) gewinnt.
Boni
Da dies kein Spaziergang im Park sein sollte (zumindest in den meisten Sprachen, die mir einfallen), werden Bonuspunkte für Folgendes vergeben:
- -100 Bytes, wenn Ihr Code ein GIF der Konstruktion der Peano-Kurven bis erzeugt
n
. - -100 Byte, wenn Ihr Code eine raumfüllende Kurve für eine rechteckige Form zeichnet (die Peano-Kurve funktioniert natürlich nur für Quadrate). Sie können davon ausgehen, dass die Eingabe dann die Form annimmt,
n l w
inn
der sie dieselbe Bedeutung wie zuvor hat (die Nummer der Iteration), aber wol
undw
in der Länge und Breite des Rechtecks, in dem die Kurve gezeichnet werden soll. Wennl == w
, wird dies zur regulären Peano-Kurve.
Negative Bewertungen sind erlaubt (aber möglich ...).
Bearbeiten
Bitte beziehen Sie die Ausgabe Ihres Programms in die Lösung für ein n == 3 (l == w == 1)
.
n
wenn verwendetl
undw
sind auch Eingänge ??????????? Und wäre die Peano-Kurve ein Sonderfall - es ist nicht die einzige raumfüllende Kurve, so dass einige Algorithmen sie möglicherweise als Sonderfall verwenden müssenAntworten:
Mathematica, Punktzahl 60 - 100 - 100 = -140
Funktion pur. Nimmt
n
und{l, w}
(Breite und Höhe) als Eingabe und gibt eine animierte Grafik als Ausgabe aus. Es wird zunächst eine Peano-Kurve n- ter Ordnung mit erstelltPeanoCurve
. Da der Fall l = w immer noch eine Peano-Kurve erzeugen muss, drehen wir den Ausdruck auf Stufe 3 um, ähnlich wie bei der Antwort von DavidC ; für l ≠ w geben wir nurScale
die Kurve zum Rechteck an. Diese Kurve wird immer noch raumfüllend sein und den zweiten Bonus erfüllen. Für den ersten Bonus haben wir es einfachAnimate
über alle Größen verteilt. Beachten Sie, dass OP vorschlug, dass sich dies ausreichend von DavidC unterscheidet, um seine eigene Antwort zu rechtfertigen. Das Ergebnis für n = 3, l = w = 1 ist wie folgt:quelle
GFA Basic 3.51 (Atari ST),
156134124 BytesEine manuell bearbeitete Liste im .LST-Format. Alle Zeilen enden mit
CR
, einschließlich der letzten.Erweitert und kommentiert
Beispielausgabe
quelle
Perl 6 , 117 Bytes
Probieren Sie es online!
0-indiziert. Gibt ein 2D-Array mit Unicode-Zeichen zurück. Die Grundidee ist, dass für untere Zeilen der Ausdruck
ergibt das Muster
Für obere Zeilen lautet der Ausdruck
Erläuterung
quelle
K (ngn / k) ,
372726 BytesProbieren Sie es online!
gibt eine boolesche Matrix zurück
|'y
ist syntaxspezifisch für ngn / k. andere Dialekte erfordern ein:
, um ein einzelnes Verb monadisch zu machen:|:'y
quelle
1
Wolfram Language
8336 Bytes (möglicherweise -48 Bytes mit Bonus)Ab Version 11.1
PeanoCurve
ist ein eingebautes.Meine ursprüngliche, unbeholfene Einreichung verschwendete viele Bytes auf
GeometricTransformation
undReflectionTransform.
Diese stark reduzierte Version wurde von Alephalpha vorgeschlagen .
Reverse
wurde benötigt, um die Ausgabe richtig zu orientieren.Beispiel 36 Bytes
Bonus
Wenn dies für den 100-Punkte-Bonus qualifiziert ist, wiegt es 52 - 100 = -48. Der Code
[5]
wurde nicht gezählt, nur die reine Funktion.quelle
Graphics[Reverse/@#&/@PeanoCurve@#]&
BBC BASIC, 142 ASCII-Zeichen (130 Bytes tokenisiert)
Laden Sie den Interpreter unter http://www.bbcbasic.co.uk/bbcwin/download.html herunter
quelle
HTML + SVG + JS,
224213 BytesDie Ausgabe wird horizontal gespiegelt.
Probieren Sie es online! (druckt das HTML aus)
Code-Snippet anzeigen
quelle
Logo, 89 Bytes
Port von @ Arnauld's Atari BASIC Antwort. Gebrauch, so etwas wie dies :
quelle
Stax , 19 Bytes
Führen Sie es aus, und debuggen Sie es
Ausgabe für 3:
quelle