Uwaga: grafika sznurkowa może tutaj wyglądać okropnie z powodu dziwnej czcionki SE: P :(
Biorąc pod uwagę listę czterech krotek reprezentujących rogi prostokątów, narysuj półprzezroczyste prostokąty nad sobą w tej kolejności.
W przypadku tego wyzwania wymagana jest najmniejsza współrzędna w lewym górnym rogu, oś x rośnie w prawo, a oś y - w dół.
Czterokrotny (x0, y0, x1, y1)
lub (x0, x1, y0, y1)
reprezentuje (x, y)
pary współrzędnych lewego górnego i prawego dolnego rogu prostokąta (możesz wybrać jeden z dwóch formatów prostokątów, ale musi być spójny)
Co rozumiem przez „przezroczysty prostokąt”? Do tego wyzwania użyjesz spacji i większości postaci rysujących pudełka ; w szczególności wszystkie te używane do rysowania prostokątów, w tym „pogrubione” znaki. Kiedy rysowany jest półprzezroczysty prostokąt, najpierw wszystkie cienkie linie w zajmowanej przestrzeni znikają, a wszystkie pogrubione linie stają się cienkie, a następnie sam prostokąt jest rysowany pogrubionymi liniami.
Na przykład, jeśli narysujesz prostokąt w lewym górnym rogu, a następnie w prawym dolnym rogu, może on wyglądać mniej więcej tak:
┏━━━━┓
┃ ┃
┃ ┃
┃ ┏━━╇━━┓
┃ ┃ │ ┃
┗━╉──┘ ┃
┃ ┃
┃ ┃
┗━━━━━┛
Aby być jasnym, linie są rozjaśniane (pogrubione -> cienkie -> brak) dla wszystkich linii ściśle w obrębie prostokąta (na przykład wpływają na linie skierowane w dół na górną krawędź, ale nie dolną krawędź).
Przypadki testowe
Dla każdego przypadku testowego zostanie podana pewna liczba wierszy danych wejściowych, a następnie grafika Unicode.
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
┏━━━━━┓
┃ ┃
┃ ┃
┃ ┃
┃ ┃
┃ ┃
┃ ┃
┏━━╉┐ ┃
┃ ┃│ ┃
┃ ┃│ ┌╊┓
┗━━╉┘ │┃┃
┃ │┠┨
┃ │┃┃
┃ │┃┃
┗━━━━╈┩┃
┗┷┛
Wygeneruj więcej przypadków testowych!
Zasady
- Dane wejściowe mogą być w dowolnym rozsądnym formacie dla listy czterech krotek. Wejście może być jeden lub zero-indeksowane indeksowane wzdłuż obu osi (czyli lewy górny narożnik może być dowolny
(0, 0)
,(0, 1)
,(1, 0)
,(1, 1)
. - Dane wyjściowe muszą być tak unikatowe, jak opisano. Wyjście może nie mieć wiodących nowych linii i może mieć najwyżej jedną końcową nową linię (po ostatniej linii). Końcowe białe znaki zostaną zignorowane na potrzeby tego wyzwania.
Punkty kodowe
Odważne i lekkie rury poziome i pionowe znajdują się w zakresie [U+2500, U+2503]
. Różne rury narożne są w zakresie [U+250C, U+251C)
. Trójramienne rury są w zasięgu [U+251C, U+253C)
. Czteroramienne rury są w zasięgu [U+253C, U+254C)
. Pozostałe potoki, które można znaleźć w moim programie, nigdy nie są używane.
Typically this uses only 95 printable (from a total of 128) characters defined by the ASCII Standard from 1963.
Odpowiedzi:
Python 3 ,
289286 bajtówWypróbuj online!
Pobiera dane wejściowe jako listę 4-krotek:
(x0, y0, x1, y1)
wraz z następującymi znakami:" ╶╺╵└┕╹┖┗╴─╼┘┴┶┚┸┺╸╾━┙┵┷┛┹┻╷┌┍│├┝╿┞┡┐┬┮┤┼┾┦╀╄┑┭┯┥┽┿┩╃╇╻┎┏╽┟┢┃┠┣┒┰┲┧╁╆┨╂╊┓┱┳┪╅╈┫╉╋"
Obsługuje pola o zerowej szerokości lub wysokości (wykorzystuje wszystkie znaki rysowania pól).
Na podstawie mojej odpowiedzi na to pytanie , ale zmodyfikowany w celu zmiany istniejących pól podczas rysowania.
„Niegolfowany”:
źródło
u
jako dane wejściowe._,_,w,h=
ją*_,w,h=
.Q
nie wymaga nawiasów,Q=(i<X,y<j,x<i,j<Y);
można je zastąpićQ=i<X,y<j,x<i,j<Y;
dwoma zapisanymi bajtami.JavaScript (ES6),
298261 bajtówGdzie
\n
reprezentuje dosłowny znak nowej linii. Na podstawie mojej odpowiedzi na prostokąty Unicode . Objaśnienie: Tablica ciągów spacji jest tworzona do rysowania. Każda spacja jest następnie przetwarzana przez zapętlenie wszystkich pól na wejściu. Znaki leżące poza polem są następnie ignorowane, ale te na krawędzi lub wewnątrz są przetwarzane dalej. Dla każdego z czterech segmentów linii tworzących znak (każdy reprezentowany przez potęgę 3) istnieją trzy możliwości; a) segment leży tuż poza ramką i powinien zostać zignorowany (osiągnięty przez przekazanie parametru 0 zamiast potęgi 3) b) segment leży na krawędzi skrzynki i powinien być pogrubiony (osiągnięty przez wywołanieh
funkcji) c) segment leży wewnątrz pudełka i powinien być oświetlony (osiąga się to przez wywołanieg
funkcjonować). Znak jest następnie indeksowany do ciągu Unicode. Po przetworzeniu wszystkich pól tablica jest następnie łączona na nowych liniach.Pokaż fragment kodu
źródło