Sua tarefa é, dado um mapa como entrada, diminuir ou diminuir o zoom, dependendo da escala. Observe que a escala fornecida é a escala pela qual diminuir o zoom ; portanto, uma escala entre 0 e 1 será realmente ampliada.
Por exemplo, dado o seguinte mapa (mal elaborado):
..____....
../OOO\...
..\OO/\...
..........
E um fator de escala de 2, você deve primeiro separá-lo em seções 2x2:
.. | __ | __ | .. | ..
.. | /O | OO | \. | ..
----------------------
.. | \O | O/ | \. | ..
.. | .. | .. | .. | ..
E em cada seção, encontre o caractere mais comum:
.__..
.....
Observe que havia uma seção ambígua:
__
OO
Eu escolhi usar _
para esta seção, mas o uso também O
seria perfeitamente aceitável.
Se, por exemplo, você recebeu o fator de escala 4, o dividiria em seções 4x4, da seguinte forma:
..__ | __.. | ..
../O | OO\. | ..
..\O | O/\. | ..
.... | .... | ..
Como você pode ver, o mapa não se encaixa perfeitamente nas seções 4x4, mas tudo bem, pois podemos diminuir o tamanho da seção ao lado.
Além disso, sempre que precisamos cortar nossos mapas, cortamos na parte inferior ou no lado direito.
O mapa resultante ficaria assim:
...
Que mapa interessante!
Para fatores de escala abaixo de 1, como 0,5, o processo é mais simples à medida que aumentamos o zoom. Veja este mapa:
./O\.
.\O/.
Zoom com uma escala de 0,5:
..//OO\\..
..//OO\\..
..\\OO//..
..\\OO//..
Note-se que sempre que o seu fator de zoom é inferior 1
, o seguinte será sempre verdade: 1/(zoom factor) % 2 == 0
. Quando estiver acima 1
, a única garantia que você tem é que será um número inteiro. Quando é1
, o mapa deve permanecer o mesmo.
Exemplos:
4
/OO\
|OO|
|OO|
\OO/
O
0.25
ABCD
AAAABBBBCCCCDDDD
AAAABBBBCCCCDDDD
AAAABBBBCCCCDDDD
AAAABBBBCCCCDDDD
1
My zoom
should
not change
My zoom
should
not change
Você também pode pegar o mapa como uma matriz separada por nova linha.
.
de O
. Cortamos no lado direito e inferior.