Zadanie
Twoim zadaniem jest napisanie programu, który wyświetli pola ASCII w miejscach określonych przez dane wejściowe.
Wejście
Otrzymasz listę liczb. Format tutaj jest nieco elastyczny, że można użyć dowolnego deliminator chcesz (np 1,2,3,4
, 1 2 3 4
, [1,2,3,4]
). Lista jest w grupach po 4 i określa xywh
poszczególne pola. Szerokość i wysokość każdego pudełka będą wynosić co najmniej 2. x
i width
będą od lewej do prawej. y
i height
są od góry do dołu.
Wynik
Renderowanie można traktować jako od prawej do lewej, najpierw zaznaczając pole po prawej stronie, a po nim każde pole po nim. Dozwolone są spacje końcowe, a także jedna spacja nowej linii.
Jak obsługiwać nakładające się pola
Pole po lewej stronie danych wejściowych jest polem górnym i nic go nie nakłada. Każde pole po tym jest renderowane tylko w obszarze, który nie jest już zawarty w polu i nie zastąpi granicy już renderowanego pola.
Styl
Styl pól jest dość standardowy, z +
narożnikami, -
liniami poziomymi i |
liniami pionowymi.
Przykłady:
( >>>
oznacza wejście)
>>>0 0 11 4 7 2 8 4 3 5 8 3
+---------+
| |
| |---+
+---------+ |
| |
+---+------+
| |
+------+
>>>0 3 11 4 7 5 8 4 3 8 8 3 4 0 13 5
+-----------+
| |
| |
+---------+ |
| |-----+
| |---+
+---------+ |
| |
+---+------+
| |
+------+
>>>0 0 2 2
++
++
>>>2 2 5 3 1 1 7 5 0 0 9 7
+-------+
|+-----+|
||+---+||
||| |||
||+---+||
|+-----+|
+-------+
>>>0 0 3 3 2 0 3 3
+-+-+
| | |
+-+-+
4 0 13 5
zamiast0 4 13 5
?Odpowiedzi:
APL, 116 bajtów
Jest to funkcja, która pobiera tablicę tablic i zwraca macierz znaków.
Testy:
Wyjaśnienie:
⎕IO←0
: ustaw początek indeksu na0
.⌈⌿↑⍵
: znajdź największe wartości dla x, y, w i h+⌿2 2⍴
: x + w oraz y + hK←' '⍴⍨⌽
: utwórz macierz spacji x + w * y + h i zapisz ją wK
.{
...}¨⌽⍵
: dla każdego z pól w odwrotnej kolejności,x y W H←⍵-⌊.5×⍳4
: Przypisanie współrzędnychx
,y
,W
, iH
, i odjąć 1 od obuW
iH
. (współrzędne są wyłączne, zakresy tablic APL są włącznie.)K[Y←y+⍳H;X←x+⍳W]←' '
: wypełnij bieżące pole spacjamiK[Y;A←x+0 W]←'|'
: narysuj pionowe bokiK[B←y+0 H;X]←'-'
: narysuj poziome bokiK[B;A]←'+'
: ustaw krawędzie na „+”K⊣
: potem wróćK
.źródło
ES6,
228223217208 201198 bajtówAkceptuje tablicę tablic współrzędnych i zwraca ciąg znaków.
Gdzie
\n
reprezentuje znak nowej linii.Edycja: Zapisałem 5 bajtów, odwracając moje warunki. Zapisano kolejne 6 bajtów, przełączając się z tablicy tablic char na tablicę ciągów. Zapisano kolejne 9 bajtów, wprowadzając zmienną tymczasową. Zapisano kolejne 7 bajtów, wprowadzając funkcję pomocnika. Zapisano kolejne 3 bajty, cofając poprzednie zapisywanie!
źródło
Ruby,
153143Niegolfowany w programie testowym
źródło
SmileBASIC,
128125 bajtówZrzuty ekranu (przycięte)
Wyjaśnienie
M
przechowuje, czy znajduje się w pierwszym / ostatnim rzędzie pola (0
=+--+
,1
=| |
). Przy pierwszym przejściu przez pętlęM
wynosi 0, a na wszystkich pozostałych do ostatniego - 1.źródło
Pyth,
162145 bajtówMożesz spróbować tutaj
Dane wyjściowe zestawu testowego:
Straszne rozwiązanie! Tylko czekam, aż ktoś go pokona
źródło