Twoim zadaniem jest, biorąc pod uwagę mapę jako dane wejściowe, pomniejszyć ją lub powiększyć, w zależności od skali. Należy zauważyć, że skala podana jest skala, według której zoom out , a więc skala pomiędzy 0 i 1 będzie faktycznie powiększyć.
Na przykład biorąc pod uwagę następującą (źle wykonaną) mapę:
..____....
../OOO\...
..\OO/\...
..........
I współczynnik skali 2, najpierw należy podzielić na 2x2 sekcje:
.. | __ | __ | .. | ..
.. | /O | OO | \. | ..
----------------------
.. | \O | O/ | \. | ..
.. | .. | .. | .. | ..
I w każdej sekcji znajdź najczęstszą postać:
.__..
.....
Zauważ, że była niejednoznaczna sekcja:
__
OO
Wybrałem użycie _
w tej sekcji, ale używanie O
byłoby również całkowicie do przyjęcia.
Jeśli na przykład otrzymasz współczynnik skali 4, podzielisz go na sekcje 4x4, tak jak poniżej:
..__ | __.. | ..
../O | OO\. | ..
..\O | O/\. | ..
.... | .... | ..
Jak widać, mapa nie pasuje idealnie do sekcji 4x4, ale to dobrze, ponieważ możemy po prostu zmniejszyć rozmiar sekcji z boku.
Ponadto, ilekroć musimy odciąć nasze mapy, odcinamy na dole lub po prawej stronie.
Powstała mapa wyglądałaby tak:
...
Co za interesująca mapa!
W przypadku współczynników skali poniżej 1, takich jak 0,5, proces jest prostszy, gdy zamiast tego powiększamy. Weź tę mapę:
./O\.
.\O/.
Powiększanie w skali 0,5:
..//OO\\..
..//OO\\..
..\\OO//..
..\\OO//..
Pamiętaj, że zawsze, gdy współczynnik zoomu mniej niż 1
, co następuje zawsze będzie prawdą 1/(zoom factor) % 2 == 0
. Gdy jest powyżej 1
, jedyną gwarancją jest to, że będzie to liczba całkowita. Kiedy tak jest 1
, mapa powinna pozostać taka sama.
Przykłady:
4
/OO\
|OO|
|OO|
\OO/
O
0.25
ABCD
AAAABBBBCCCCDDDD
AAAABBBBCCCCDDDD
AAAABBBBCCCCDDDD
AAAABBBBCCCCDDDD
1
My zoom
should
not change
My zoom
should
not change
Możesz również wziąć mapę jako tablicę rozdzieloną znakiem nowej linii.
.
niżO
. Odcinamy po prawej i dolnej stronie.Odpowiedzi:
Mathematica, 105 bajtów
Dane wejściowe to (skala, tablica znaków). Skala musi być liczbą całkowitą lub dokładną ułamkiem.
Wyjaśnienie
Jeśli pierwsze wejście jest mniejsze niż 1 ...
Zamień wszystkie ciągi z drugiego wejścia na kwadratową tablicę o długości 1 / (pierwsze wejście)
Spłaszcz wynik do tablicy 2D.
Jeśli pierwsze wejście jest nie mniejsze niż 1 ...
Podziel (drugie wejście) na partycje, których szerokość / długość są co najwyżej (pierwsze wejście).
Mapa na poziom 2 i poziom 3 ...
Skład funkcji Najczęstsze (znajduje najczęstszy element na liście) i Pierwszy (weź pierwszy element; w przypadku, gdy istnieje wiele najczęstszych elementów).
źródło
Python,
191182180 bajtówWywołaj
_(map, scale_factor)
, gdzie mapa jest tablicą linii i zwraca tablicę linii.Chociaż ta odpowiedź została już pobita, chcę ją wyjaśnić, ponieważ nie jest to szczególny przypadek, w którym współczynnik skali jest mniejszy niż jeden.
To sprawia, że
h
ww
matrycy, w którejh = ceiling(map height / scale factor)
, iw = ceiling(map width / scale factor)
.Dla każdego indeksu (x, y) w macierzy wykonaj:
int(x * scale factor), int(y * scale factor)
doceil((x + 1) * scale factor), ceil((y + 1) * scale factor)
.Wypróbuj online!
Wypróbuj przypadki testowe
źródło