Inclusion-Exclusion pozwala obliczyć rozmiary niektórych związków i przecięć między zestawami, znając niektóre inne wartości. Nie wyjaśnię tego dokładnie, ale twoim wyzwaniem jest wizualizacja wykluczenia włączenia na diagramie Venna.
Ponieważ jestem miły, będziesz używać prostokątów, a nie kół.
Otrzymasz listę prostokątów oznaczonych współrzędnymi górnego lewego i prawego dolnego rogu w dowolnym rozsądnym formacie (lista 4 krotek, lista par par, lista par itp.). Możesz założyć, że wszystkie współrzędne są nieujemne i mieszczą się w (rozsądnym) zakresie liczbowym twojego języka (określ, co to jest, jeśli jest mniejsze niż 128). Możesz wybrać opcję obejmującą lewą lub wyłączną lewą i obejmującą prawą lub wyłączną prawą. Bez względu na wybrany format możesz założyć, że wszystkie prostokąty mają co najmniej 1x1.
Następnie musisz narysować każdy prostokąt na ekranie (obszar roboczy ASCII) za pomocą pojedynczej spacji k
, którą możesz wybrać.
Jednak za każdym razem, gdy dwa prostokąty zachodzą na siebie, nakładający się obszar zostanie narysowany za pomocą innej spacji l != k
, również do wyboru.
Ilekroć trzy prostokąty pokrywają obszar nakładających powinien być narysowany k
, a dla nieparzystej liczby prostokątów obejmującego, k
i nawet numer, l
.
Tłem powinny być pojedyncze białe znaki ( 0x20
).
Przypadki testowe ( 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
########
#......#
#.####.#
#.####.#
#.####.#
#.####.#
#......#
########
Notatki
- Spacje wiodące i znaki nowej linii (które występują, jeśli współrzędna minimalna nie jest
0, 0
), muszą być obecne - Wszelkie spacje i znaki nowej linii są dozwolone w rozsądnym zakresie (tzn. Nie wyświetlaj śladu jak 100000000 znaków nowej linii, to po prostu denerwujące)
- Osie x i y mogą być skierowane w obie strony, ale musisz być spójny i określić, który (domyślnie jest to x prawo i y-dół)
- współrzędne mogą być indeksowane 0, 1 lub 2.
Referencyjna implementacja protonu
To jest golf golfowy , więc celem jest posiadanie najkrótszego kodu. Miłej gry w golfa!
Odpowiedzi:
Procedura kodu maszynowego 6502 (C64), 57 bajtów
Jest to kod niezależny od pozycji, umieść go gdzieś w pamięci RAM i użyj poprawnego adresu początkowego, wywołując go
sys
.Demo online (adres początkowy
$C000
/49152
).Stosowanie:
sys<startaddress>,<x1>,<y1>,<x2>,<y2>[,<x1>,<y1>,<x2>,<y2>[,...]]
Przykład:
sys49152,0,0,9,9,1,1,10,10,2,2,11,11
W rozsądnych zakresach liczb: naturalny zakres na tym 8-bitowym komputerze to [0–255], a program zaakceptuje to jako parametry. Ale ekran C64 ma tylko 40 kolumn i 25 wierszy, co ogranicza rozsądny zakres do [0–40] dla wartości x i [0–25] dla wartości y. Używanie innych wartości będzie miało nieprzewidywalne zachowanie.
skomentował listę dezasemblacji:
źródło
Python 2 ,
218192189185158154147 bajtówWypróbuj online!
źródło
Węgiel drzewny , 40 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu.
Będzie 6 bajtów krótszy, gdy tylko @ ASCII naprawi błąd w Charcoal. Pobiera dane wejściowe jako zakończoną znakiem nowej linii rozdzieloną spacjami listę współrzędnych. Wyjaśnienie:Pętlę nad każdą linią wejścia, aż do osiągnięcia pustej linii.
Podziel linię na listę współrzędnych.
Pętla nad wszystkimi współrzędnymi X.
Przejdź na górę kolumny.
Mapa nad każdym z ...
... wszystkie komórki w kolumnie ...
... nowa wartość jest,
0
jeśli zawierają1
, w przeciwnym razie1
. Edycja: Wkrótce po napisaniu tego, Węgiel zmienił zachowanie,¬
dzięki czemuI¬Σλ
działa tutaj, aby zapisać 1 bajt.źródło
\n
zamiast tego mogę wydrukować ...Python 2 , 181 bajtów
Wypróbuj online!
źródło
C (gcc) , 205 bajtów
Wypróbuj online!
źródło
R ,
196189 bajtówWypróbuj online!
Kod odczytuje dane wejściowe jako standardowe, ustawione jako krotka x1 y1 x2 y2, gdzie x to kolumna, a y to rząd. Używam 1 i 2 dla poziomów nakładania się, gdzie 1 reprezentuje poziom parzysty.
Zapisano 7 bajtów dzięki user2390246.
źródło
nrow
(lubncol
jeśli nie został przekształcony) zamiastdim(x)[1]
3. Nie musisz definiować,i=y>0
ponieważ używasz go tylko raz.y=y%%2
iy[y<0]=" "
.Raku , 54 bajty
Wypróbuj online!
Pobiera dane wejściowe jako płaską listę współrzędnych jako włącznie współrzędnych, tj. Dane
x1,y1,x2,y2,x1,y1,x2,y2...
wyjściowe jako listę znaków zk
bytem1
il
bytem0
.Wyjaśnienie:
źródło
Galaretka , 43 bajty
Wypróbuj online!
Wyjaśnienie
źródło