Aufgabe
Die Aufgabe besteht darin, Polygone bei einer Scheitelpunktkonfiguration zu kacheln.
Wertung
Ihre Punktzahl entspricht dem "Komplexitätsgrad", den Ihre Einreichung erreicht. Die Komplexitätsstufen sind kumulativ, was bedeutet, dass Sie auch # 1 & # 2 unterstützen müssen, um # 3 zu erreichen.
Einreichungen mit gleicher Komplexität werden durch die Anzahl der Bytes unterschieden. niedrigste Gewinne.
Eingang
Die Eingabe ist eine Zeichenfolge, die eine Scheitelpunktkonfiguration enthält und eine Scheitelpunktfigur darstellt. Das heißt, eine durch Punkte getrennte Liste von ganzen Zahlen, wobei jede ganze Zahl (n) ein reguläres n-Gon darstellt, das durch einen gemeinsamen Scheitelpunkt verbunden ist.
Die folgenden Scheitelpunktkonfigurationen müssen unterstützt werden:
3.3.3.3.3.3
3.3.3.3.6
3.3.3.4.4
(Beachten Sie, dass sich die Reihenfolge in der Scheitelpunktzahl widerspiegelt, daher unterscheidet sich die folgende Reihenfolge.)3.3.4.3.4
3.12.12
3.4.6.4
3.6.3.6
4.4.4.4
4.6.12
4.8.8
6.6.6
Ausgabe - Komplexitätsstufe 1: Scheitelpunktfigur
Bei dieser Komplexitätsstufe ist die Ausgabe ein Bild, das die Scheitelpunktzahl zeigt, die der gegebenen Eingabe entspricht.
Der Eingabe wird ein vorangestellt, F
um anzuzeigen, dass die Scheitelpunktzahl ausgegeben werden soll und nicht die vollständige Kachelung.
Zum Beispiel F3.6.3.6
gibt diese Scheitelpunktzahl:
Ausgabe - Komplexitätsstufe 2: Kacheln
Bei dieser Komplexitätsstufe ist die Ausgabe ein Bild, das eine gleichmäßige Kachelung unter Verwendung der Scheitelpunktzahl zeigt, die der gegebenen Eingabe entspricht.
Zum Beispiel 3.6.3.6
gibt diese Kachelung:
Es gibt keine Einschränkungen hinsichtlich Farbe oder Format (mit Ausnahme von Lücken).
Ausgabe - Komplexitätsstufe 3: Dual Tiling
Auf dieser Komplexitätsstufe kann aus jeder Kachelung eine "doppelte Kachelung" gebildet werden. Dies wird erreicht, indem Linien von der Mitte jedes Polygons zur Mitte jedes angrenzenden Polygons gezogen werden.
Die doppelte Kachelung wird angegeben, indem der Eingabe ein vorangestellt wird V
.
Zum Beispiel V3.6.3.6
gibt diese doppelte Kachelung (in rot):
3.3.3.4.4
3.3.4.4.3
3.4.4.3.3
4.4.3.3.3
4.3.3.3.4
. Müssen wir alle Synonyme unterstützen oder nur das lexikalisch niedrigste (wie in der Frage angegeben)? Auch3.3.3.3.6
existiert in zwei spiegelbildlichen Formen. Ich verstehe, dass beides akzeptabel ist.3.3.3.4.4
fehlt zum Beispiel. en.wikipedia.org/wiki/… passt genau zu Ihrer Liste. Ich verstehe, dass Umrisse oder gefüllte Polygone akzeptabel sind (oder eine Kombination aus beiden?). Einige Duals sind bereits in der Liste enthalten. Zum Beispiel4.4.4.4
ist es ein eigenes Dual und3.3.3.3.3.3
und6.6.6
sind gegenseitig dual. Da die Duals unabhängig von ihren Eltern angezeigt werden, ist meines Erachtens keine korrekte Ausrichtung auf die Eltern erforderlich.3.3.3.3.6
aber woher wissen Sie, welches es ist? :)Antworten:
BBC BASIC
Rev 1 Golfed Code, 655 ASCII-Zeichen, tokenisierte Dateigröße 614
Einige wichtige Verbesserungen an der Datentabelle, indem der String vor dem Nachschlagen
A.B..N
auf eine Zahl(1*A+2*B+..n*N)+n
gehasht und nur ein Übersetzungsvektor gespeichert wird (der andere wird durch Code generiert). Weitere Erklärungen, wenn ich mit dem Golfen fertig bin.Rev 0 Golfed Code, 770 ASCII-Zeichen, tokenisierte Dateigröße 728
Alles, was ich hier getan habe, ist, Kommentare, unnötige Leerzeichen und Anführungszeichen zu entfernen und alles
DATA
in eine Zeile zu setzen. Es gibt sicherlich Platz für mehr Golf.Erläuterung
Dies ist eine Fortsetzung meiner vorherigen Antwort auf Stufe 1, aber ich habe beschlossen, sie separat zu veröffentlichen, da sie ziemlich lang ist.
Level 2
Dies wird durch die Übersetzung meiner "Level 1.5" -Vorlagen aus meiner vorherigen Antwort erreicht. Die zwei Translationsvektoren für jede Kachelung sind fest codiert. Ich nutze die Tatsache, dass ein gleichschenkliges Dreieck der Basis 80 und der Höhe 70 eine sehr gute Annäherung an ein gleichseitiges Dreieck darstellt und ein rechtwinkliges Dreieck mit Hypotenusenvektor
(56,56)
eine Hypotenusenlänge sehr nahe bei 80 hat.Stufe 3
Um die Duals zu zeichnen, zeichnen wir anstelle einer Kante des Polygons eine Speiche von der Mitte dieser Kante bis zur Mitte des Polygons. Dieser ist rechtwinklig zur Kante und hat die Länge des
1/TAN/(PI/n)
Vektors (u, v), der wiederum halb so lang ist wie die Kante.Unglücklicherweise werden bestimmte Polygone in Pflasterungen
3.3.3.3.6
und3.4.6.4
nicht explizit aufgetragen sind, würden sie nicht aufgetragen werden , wenn wir dies nur tat. Daher erstreckt sich die Speiche auch vom Polygon nach außen. Die Ausdehnung nach außen wird von der Variablen gesteuerto
.Standardmäßig reicht die Erweiterung aus, um die Mitte eines Dreiecks zu erreichen.
3.4.6.4
Sie muss jedoch weiter erweitert werden, um die Dualen der Quadrate zu zeichnen, die nicht explizit dargestellt werden. Wenn also Sechsecke und Dreiecke explizit dargestellt werden, wird eine ausreichende Erweiterung angewendet, um die fehlenden Quadrate auszufüllen. Die normale Erweiterung wird jedoch angewendet, wenn Quadrate explizit dargestellt werden, um störende Linien in den benachbarten Dreiecken zu vermeiden.So sehen sie ohne die Speichenerweiterungen aus. Die Löcher im Doppelmuster sind deutlich zu erkennen. Die korrekte Ausgabe ist im Hauptbild am Ende der Antwort zu sehen
Kommentierter Code
Unterschiede zu meiner vorherigen Antwort werden inline angezeigt
Ausgabe
Das Programm führt für jeden Lauf nur eine Kachelung oder eine Doppelkachelung durch. Die Duals werden jedoch rot dargestellt. Um Platz zu sparen, habe ich das Programm zweimal ausgeführt, ohne den Bildschirm zu löschen, um das Dual über die regulären Kacheln zu legen.
quelle
Mathematica
Stufe 1 enthält die grundlegenden Kachelvorlagen, die wiederholt gestempelt werden, um eine Ebene zu kacheln.
Level 2 macht die Kacheln.
Es gibt noch 2 Fliesen, die ich nicht erreichen konnte. Sie scheinen sowohl Rotation als auch Translation zu erfordern.
Stufe 1: Scheitelpunktzahl (559 Bytes)
Testen
Stufe 2: Kacheln (690 zusätzliche Bytes)
Die Regeln geben für jede Konfiguration Kachelversätze und Einrückungen zurück.
r
ist die Grundfunktion, die die Fliesen ausgibt.p
zeigt die Vorlage und die jeweiligen Kacheln. Leerzeichen entsprechen denen, die nicht von der Vorlage abgedeckt werden.Testen
Dreieckige Fliesen
sechseckig
Platz
Unbekannt
abgeschnittenes Quadrat
trihexagonal
sechseckig abgeschnitten
unbenannt
länglich dreieckig
Tilings, um herauszufinden
quelle
3.3.3.3.3.3
um die Hälfte reduzieren , sodass sich die Einheiten überlappen, können Sie diese Diamanten entfernen und diese Kacheln reparieren. Sie haben noch mehr zu tun3.3.3.3.6
,3.4.6.4
und4.6.12
obwohl.4.6.12 anyone know what it should look like?
- Alle erforderlichen Kacheln finden Sie unter en.wikipedia.org/wiki/… . Siehe meinen Kommentar zur Frage. Dies ist eine andere Seite als die in der Frage erwähnte . Wird4.6.12
aber trotzdem auch auf dieser Seite angezeigt.R.
Schritt 1
Hier ist meine Anstrengung beim Bau der Fliesen. Fliesen kommen als nächstes. Dies validiert die Eingabe nicht, sodass Invaliden einige seltsame Kacheln zeichnen. Die Eingabe wird nach der ersten Zeile eingegeben
Schritt 1, 2 und 3: 1898
Endlich zurück. Das meiste davon wird mit dem Setzen von Offsets und dem Behandeln von Sonderfällen aufgenommen :). Bearbeiten: Das V-Flag für Duals wird jetzt behandelt
Der allgemeine Prozess ist:
Ich kann das wahrscheinlich noch ein bisschen mehr spielen.
quelle
BBC BASIC
Laden Sie den Emulator unter http://www.bbcbasic.co.uk/bbcwin/bbcwin.html herunter
Level 1
Stufe 1.5
Level 1.5 ist meine eigene Bezeichnung, aber es ist ein wichtiger Meilenstein in meiner Methode.
Das Übersetzen der Scheitelpunktzahlen führt nicht immer zur richtigen Kachelung. In einigen Fällen fehlen Zeilen.
Meine Lösung besteht darin, das größte Polygon zu umgehen und die Scheitelpunktzahl für jeden zweiten Scheitelpunkt dieses Polygons zu zeichnen. Dies ist eine allgemeine Lösung für alle Fälle. Beachten Sie, dass das größte Polygon immer eine gerade Anzahl von Seiten hat und die Scheitelpunktzahl beim Umrunden des Polygons häufig im Uhrzeigersinn / gegen den Uhrzeigersinn wechselt. Dies ist am deutlichsten zu erkennen
4.6.12
, gilt aber auch für4.8.8
und3.12.12
: Bei Betrachtung von einem bestimmten 8-Gon oder 12-Gon sind abwechselnde Eckpunkte Spiegelbilder voneinander. Dies geschieht auch, etwas weniger offensichtlich, mit3.3.3.4.4
und3.3.4.3.4
: Von einem bestimmten Quadrat aus gesehen sind alternierende Eckpunkte Spiegelbilder voneinander.Der Algorithmus, mit dem ich 2 Seiten um das Polygon bewege, besteht darin, immer 14 Iterationen der Kantenzeichnungsschleife durchzuführen, unabhängig davon, wie viele Kanten das Polygon hat. 8 ist ein Faktor von 16, daher endet der Grafikcursor beim Zeichnen von Achtecken mit 16-14 = 2 Eckpunkten hinter der Stelle, an der er begonnen hat. 3- 4- 6- und 12-gons haben alle Seiten, die Faktoren von 12 sind, so dass der Grafikcursor 14-12 = 2 Eckpunkte vor dem Startpunkt hat.
Die Zahlen sind unten zu sehen. Morgen hoffe ich, die richtigen Übersetzungen zu finden, um die Kacheln zu vervollständigen. In allen Fällen werden genügend Linien gezogen, um Level 2 nur mit Übersetzungen abzuschließen. In einigen Fällen wird viel mehr als das erforderliche Minimum gezeichnet, aber es gibt kein Problem mit Überlappungen: Die Regeln sagen nichts über das Zeichnen von Linien nur einmal aus :-)
Im Allgemeinen ist das größte Polygon das letzte in der Liste. Es gibt leider einen Fall, in dem dies nicht
3.4.6.4
der Fall ist : Daher ist die in diesem Fall gezeichnete Figur eher auf einem Quadrat als auf einem Sechseck zentriert. Es gibt genügend Linien, um Level 2 nur mit Übersetzungen abzuschließen, obwohl es bestimmte Quadrate gibt, die nicht explizit gezeichnet werden. Dies wird einige Probleme in Level 3 aufwerfen (zum Glück denke ich, dass ich weiß, wie man das löst.) Ebenso3.3.3.3.6
gibt es genug Zeilen, um Level 2 nur mit Übersetzungen abzuschließen, aber es wird bestimmte Dreiecke geben, die nicht explizit gezeichnet werden.Code
Der Code für Level 1.5 ist auskommentiert, nur der Code für Level 1 ist aktiviert. Es gibt vier Zeilen, die mit a beginnen
REM
. Entferne dieseREM
s, um Level 1.5 zu aktivieren.Level 2 und 3
Siehe meine andere Antwort.
quelle