Mit Inclusion-Exclusion können Sie die Größe einiger Gewerkschaften und Schnittpunkte zwischen Gruppen berechnen, wobei Sie einige der anderen Werte kennen. Ich werde es nicht genau erklären, aber Ihre Herausforderung besteht darin, Einschluss-Ausschluss in einem Venn-Diagramm zu visualisieren.
Weil ich nett bin, wirst du Rechtecke verwenden, keine Kreise.
Sie erhalten eine Liste von Rechtecken, die durch Koordinaten der oberen linken und unteren rechten Ecke in einem beliebigen vernünftigen Format gekennzeichnet sind (Liste von 4 Tupeln, Liste von Paarpaaren, Liste von Paaren usw.). Sie können davon ausgehen, dass alle Koordinaten nicht negativ sind und innerhalb des (angemessenen) Zahlenbereichs Ihrer Sprache liegen (bitte geben Sie an, was es ist, wenn es weniger als 128 ist). Sie können wählen, ob Sie links inklusive oder links exklusiv und rechts inklusive oder rechts exklusiv sein möchten. Unabhängig von Ihrem gewählten Format können Sie davon ausgehen, dass alle Rechtecke mindestens 1x1 groß sind.
Anschließend zeichnen Sie jedes Rechteck auf dem Bildschirm (ASCII-Zeichenfläche) mit einem einzelnen Nicht-Leerzeichen k
, das Sie auswählen können.
Wenn sich jedoch zwei Rechtecke überlappen, wird der überlappende Bereich mit einem anderen Nicht-Leerzeichen gezeichnet l != k
, das Sie ebenfalls auswählen können.
Immer wenn sich drei Rechtecke überlappen, sollte der überlappende Bereich mit k
und für eine ungerade Anzahl von bedeckenden Rechtecken k
und eine gerade Anzahl gezeichnet werden l
.
Der Hintergrund sollte aus einzelnen Leerzeichen bestehen ( 0x20
).
Testfälle ( k = "#", l = "."
)
0 0 9 9
1 1 10 10
2 2 11 11
#########
#........#
#.#######.#
#.#######.#
#.#######.#
#.#######.#
#.#######.#
#.#######.#
#.#######.#
#........#
#########
1 1 3 3
2 2 4 4
##
#.#
##
1 1 9 9
2 2 8 8
3 3 7 7
########
#......#
#.####.#
#.####.#
#.####.#
#.####.#
#......#
########
Anmerkungen
- Führende Leerzeichen und Zeilenumbrüche (die auftreten, wenn die Mindestkoordinate nicht
0, 0
vorhanden ist ) müssen vorhanden sein - Nachgestellte Leerzeichen und Zeilenumbrüche sind in angemessenem Umfang zulässig (dh nicht wie 100000000 Zeilenumbrüche verfolgen, das ist nur ärgerlich).
- x- und y-Achsen können in beide Richtungen zeigen, aber Sie müssen konsistent sein und angeben, welche (Standard ist x-rechts und y-unten)
- Koordinaten können 0-, 1- oder 2-indiziert sein.
Referenz-Protonenimplementierung
Dies ist Code-Golf , daher ist das Ziel, den kürzesten Code zu haben. Viel Spaß beim Golfen!
Antworten:
6502 Maschinencode- Routine (C64), 57 Bytes
Dies ist positionsunabhängiger Code. Legen Sie ihn irgendwo im RAM ab und verwenden Sie die richtige Startadresse, mit der er aufgerufen wird
sys
.Online-Demo (Startadresse
$C000
/49152
).Verwendung:
sys<startaddress>,<x1>,<y1>,<x2>,<y2>[,<x1>,<y1>,<x2>,<y2>[,...]]
Beispiel:
sys49152,0,0,9,9,1,1,10,10,2,2,11,11
Bei angemessenen Zahlenbereichen: Der natürliche Bereich auf dieser 8-Bit-Maschine ist [0-255], und das Programm akzeptiert dies als Parameter. Der C64-Bildschirm hat jedoch nur 40 Spalten und 25 Zeilen, wodurch der angemessene Bereich für x-Werte auf [0-40] und für y-Werte auf [0-25] begrenzt wird. Die Verwendung anderer Werte führt zu einem unvorhersehbaren Verhalten.
Kommentar zur Demontage:
quelle
Python 2 ,
218192189185158154147 BytesProbieren Sie es online aus!
quelle
Holzkohle , 40 Bytes
Probieren Sie es online aus! Der Link führt zur ausführlichen Version des Codes.
Wird 6 Byte kürzer sein, sobald @ ASCII-only einen Fehler in Charcoal behebt. Nimmt die Eingabe als eine durch Zeilenumbrüche abgeschlossene Liste von durch Leerzeichen getrennten Koordinatenlisten entgegen. Erläuterung:Durchlaufen Sie jede Eingabezeile, bis eine leere Zeile erreicht ist.
Teilen Sie die Zeile in eine Liste von Koordinaten.
Schleife über alle X-Koordinaten.
Springe zum Anfang der Spalte.
Karte über ...
... alle Zellen in der Spalte ...
... der neue Wert ist,
0
wenn sie etwas1
anderes enthalten1
. Bearbeiten: Kurz nach dem Schreiben hat Charcoal das Verhalten von¬
so geändert , dassI¬Σλ
hier 1 Byte gespeichert wird.quelle
\n
stattdessen einen drucken, denke ich ...Python 2 , 181 Bytes
Probieren Sie es online aus!
quelle
C (gcc) , 205 Bytes
Probieren Sie es online aus!
quelle
R ,
196189 BytesProbieren Sie es online aus!
Der Code liest die Eingabe als stdin, angeordnet als x1 y1 x2 y2 Tupel, wobei x die Spalte und y die Zeile ist. Ich verwende 1 und 2 für die Überlappungsebenen, wobei 1 eine gerade Ebene darstellt.
7 Benutzer dank user2390246 gespeichert.
quelle
nrow
(oderncol
falls nicht transformiert) anstelle vondim(x)[1]
3. Sie müssen nicht definieren,i=y>0
da Sie es nur einmal verwenden.y=y%%2
undy[y<0]=" "
.Raku , 54 Bytes
Probieren Sie es online aus!
Nimmt die Eingabe als flache Liste von Koordinaten als inklusive Koordinaten, dh
x1,y1,x2,y2,x1,y1,x2,y2...
und gibt sie als Liste der Liste von Zeichen mitk
Sein1
undl
Sein aus0
.Erläuterung:
quelle
Gelee , 43 Bytes
Probieren Sie es online aus!
Erläuterung
quelle