Il tuo compito è, data una mappa come input, ingrandirla o ingrandirla, a seconda della scala. Si noti che la scala fornita è la scala con cui eseguire lo zoom indietro , quindi una scala compresa tra 0 e 1 ingrandirà effettivamente.
Ad esempio, vista la seguente mappa (realizzata male):
..____....
../OOO\...
..\OO/\...
..........
E un fattore di scala di 2, dovresti prima separarlo in sezioni 2x2:
.. | __ | __ | .. | ..
.. | /O | OO | \. | ..
----------------------
.. | \O | O/ | \. | ..
.. | .. | .. | .. | ..
E in ogni sezione trovi il personaggio più comune:
.__..
.....
Si noti che c'era una sezione ambigua:
__
OO
Ho scelto di utilizzare _per questa sezione, ma l'utilizzo Osarebbe stato perfettamente accettabile.
Se, ad esempio, ti venisse dato il fattore di scala 4, lo divideresti in sezioni 4x4, in questo modo:
..__ | __.. | ..
../O | OO\. | ..
..\O | O/\. | ..
.... | .... | ..
Come puoi vedere, la mappa non si adatta perfettamente alle sezioni 4x4, ma va bene, in quanto possiamo semplicemente ridurre le dimensioni della sezione laterale.
Inoltre, ogni volta che dobbiamo tagliare le nostre mappe, tagliamo in basso o sul lato destro.
La mappa risultante dovrebbe apparire così:
...
Che mappa interessante!
Per i fattori di scala inferiori a 1, ad esempio 0,5, il processo è più semplice quando si ingrandisce invece. Prendi questa mappa:
./O\.
.\O/.
Zoom con una scala di 0,5:
..//OO\\..
..//OO\\..
..\\OO//..
..\\OO//..
Si noti che ogni volta che il fattore di zoom è inferiore 1, il seguente sarà sempre vero: 1/(zoom factor) % 2 == 0. Quando è sopra 1, l'unica garanzia che hai è che sarà un numero intero. Quando lo è 1, la mappa dovrebbe rimanere la stessa.
Esempi:
4
/OO\
|OO|
|OO|
\OO/
O
0.25
ABCD
AAAABBBBCCCCDDDD
AAAABBBBCCCCDDDD
AAAABBBBCCCCDDDD
AAAABBBBCCCCDDDD
1
My zoom
should
not change
My zoom
should
not change
Puoi anche prendere la mappa come un array separato da nuova riga.
.di O. Tagliamo sul lato destro e inferiore.