Hinweis: Die String-Grafik könnte hier wegen der SE-Schriften-Verrücktheit schrecklich aussehen: P :(
Zeichnen Sie mit einer Liste von vier Tupeln, die die Ecken von Rechtecken darstellen, durchscheinende Rechtecke in dieser Reihenfolge übereinander.
Für diese Herausforderung ist es erforderlich, dass die kleinste Koordinate in der linken oberen Ecke und die x-Achse nach rechts und die y-Achse nach unten zunimmt.
Ein Vierertupel (x0, y0, x1, y1)
oder (x0, x1, y0, y1)
repräsentiert die (x, y)
Koordinatenpaare der oberen linken und unteren rechten Ecke eines Rechtecks (Sie können eines der beiden Formate für Rechtecke auswählen, aber es muss konsistent sein).
Was meine ich mit "durchscheinendem Rechteck"? Nun, für diese Herausforderung werden Sie das Leerzeichen und die meisten Box- Zeichen verwenden. Insbesondere alle, die zum Zeichnen von Rechtecken verwendet werden, einschließlich "fetter" Zeichen. Wenn ein durchscheinendes Rechteck gezeichnet wird, verschwinden zuerst alle dünnen Linien im besetzten Raum und alle fetten Linien werden dünn, und dann wird das Rechteck selbst in fetten Linien überzeichnet.
Wenn Sie beispielsweise oben links und unten rechts ein Rechteck zeichnen, sieht es möglicherweise so aus:
┏━━━━┓
┃ ┃
┃ ┃
┃ ┏━━╇━━┓
┃ ┃ │ ┃
┗━╉──┘ ┃
┃ ┃
┃ ┃
┗━━━━━┛
Um es klar auszudrücken, werden Linien für alle Linien innerhalb des Rechtecks aufgehellt (fett -> dünn -> keine) (z. B. sind nach unten weisende Linien für die Oberkante, aber nicht für die Unterkante betroffen).
Testfälle
Für jeden Testfall wird eine bestimmte Anzahl von Eingabezeilen gefolgt von Unicode-Art angegeben.
0 0 5 5
5 5 10 10
3 3 7 7
2 2 8 8
┏━━━━┓
┃ ┃
┃ ┏━━╇━━┓
┃ ┃┌─┴─┐┃
┃ ┃│ │┃
┗━╉┤ ├╊━┓
┃│ │┃ ┃
┃└─┬─┘┃ ┃
┗━━╈━━┛ ┃
┃ ┃
┗━━━━┛
14 5 15 9
13 2 15 16
6 4 15 11
┏━┓
┃ ┃
┏━━━━━━╇━┫
┃ │ ┃
┃ │ ┃
┃ │ ┃
┃ │ ┃
┃ │ ┃
┃ │ ┃
┗━━━━━━╈━┫
┃ ┃
┃ ┃
┃ ┃
┃ ┃
┗━┛
6 8 10 11
15 12 16 16
14 10 16 16
9 1 15 15
┏━━━━━┓
┃ ┃
┃ ┃
┃ ┃
┃ ┃
┃ ┃
┃ ┃
┏━━╉┐ ┃
┃ ┃│ ┃
┃ ┃│ ┌╊┓
┗━━╉┘ │┃┃
┃ │┠┨
┃ │┃┃
┃ │┃┃
┗━━━━╈┩┃
┗┷┛
Generieren Sie weitere Testfälle!
Regeln
- Die Eingabe kann in jedem vernünftigen Format für eine Liste mit vier Tupeln erfolgen. Die Eingabe kann entlang jeder Achse (dh die obere linke Ecke kann eine beliebige von einer indizierten oder Null-indexiert werden
(0, 0)
,(0, 1)
,(1, 0)
,(1, 1)
. - Die Ausgabe muss wie beschrieben in Unicode erfolgen. Die Ausgabe enthält möglicherweise keine führenden Zeilenumbrüche und höchstens einen nachgestellten Zeilenumbruch (nach der letzten Zeile). Nachgestellte Leerzeichen werden bei dieser Abfrage ignoriert.
Code-Punkte
Die fetten und hellen horizontalen und vertikalen Rohre sind im Bereich [U+2500, U+2503]
. Die verschiedenen Eckrohre sind im Sortiment [U+250C, U+251C)
. Die dreiarmigen Pfeifen sind im Sortiment [U+251C, U+253C)
. Die vierarmigen Pfeifen sind im Sortiment [U+253C, U+254C)
. Die restlichen Pipes, die in meinem Programm zu finden sind, werden nie wirklich verwendet.
Typically this uses only 95 printable (from a total of 128) characters defined by the ASCII Standard from 1963.
Antworten:
Python 3 ,
289286 BytesProbieren Sie es online!
Nimmt die Eingabe als eine Liste von 4-Tupeln:
(x0, y0, x1, y1)
zusammen mit den Pipedrawing-Zeichen wie folgt vor:" ╶╺╵└┕╹┖┗╴─╼┘┴┶┚┸┺╸╾━┙┵┷┛┹┻╷┌┍│├┝╿┞┡┐┬┮┤┼┾┦╀╄┑┭┯┥┽┿┩╃╇╻┎┏╽┟┢┃┠┣┒┰┲┧╁╆┨╂╊┓┱┳┪╅╈┫╉╋"
Unterstützt Kästchen mit einer Breite oder Höhe von Null (verwendet alle Zeichen für Kästchen).
Basierend auf meiner Antwort auf diese Frage , aber modifiziert, um vorhandene Felder beim Zeichnen zu ändern.
"Ungolfed":
quelle
u
als Eingabe nehmen._,_,w,h=
mit*_,w,h=
.Q
keine Klammern undQ=(i<X,y<j,x<i,j<Y);
kann durchQ=i<X,y<j,x<i,j<Y;
zwei gespeicherte Bytes ersetzt werden.JavaScript (ES6),
298261 ByteWobei
\n
das wörtliche Zeilenumbruchzeichen darstellt. Basierend auf meiner Antwort auf Unicode-Rechtecke . Erläuterung: Zum Einzeichnen wird ein Array von Leerzeichenfolgen erstellt. Jedes Leerzeichen wird dann verarbeitet, indem alle Felder in der Eingabe in einer Schleife durchlaufen werden. Zeichen, die außerhalb der Box liegen, werden dann ignoriert, die am Rand oder innen liegenden Zeichen jedoch weiterverarbeitet. Für jedes der vier Liniensegmente, die ein Zeichen bilden (jedes durch eine Potenz von 3 dargestellt), gibt es dann drei Möglichkeiten; a) Das Segment liegt direkt außerhalb der Box und sollte ignoriert werden (erreicht durch Übergabe eines Parameters von 0 anstelle der Potenz von 3) b) Das Segment liegt am Rand der Box und sollte fett sein (erreicht durch Aufrufen derh
Funktion) c) das segment liegt in der box und sollte aufgehellt werdeng
Funktion). Das Zeichen wird dann in die Unicode-Zeichenfolge indiziert. Sobald alle Felder verarbeitet wurden, wird das Array in Zeilenumbrüchen verbunden.Code-Snippet anzeigen
quelle