Votre tâche consiste à, en fonction d'une carte en entrée, effectuer un zoom avant ou arrière, en fonction de l'échelle. Notez que l'échelle donnée est l'échelle de zoom arrière , donc une échelle entre 0 et 1 fera un zoom avant.
Par exemple, étant donné la carte suivante (mal faite):
..____....
../OOO\...
..\OO/\...
..........
Et un facteur d'échelle de 2, vous devez d'abord le séparer en sections 2x2:
.. | __ | __ | .. | ..
.. | /O | OO | \. | ..
----------------------
.. | \O | O/ | \. | ..
.. | .. | .. | .. | ..
Et dans chaque section, trouvez le personnage le plus courant:
.__..
.....
Notez qu'il y avait une section ambiguë:
__
OO
J'ai choisi d'utiliser _
cette section, mais l'utilisation O
aurait également été parfaitement acceptable.
Si, par exemple, on vous donnait le facteur d'échelle de 4, vous le diviseriez en sections 4x4, comme ceci:
..__ | __.. | ..
../O | OO\. | ..
..\O | O/\. | ..
.... | .... | ..
Comme vous pouvez le constater, la carte ne s'intègre pas parfaitement dans les sections 4x4, mais c'est bien, car nous pouvons simplement réduire la taille de la section sur le côté.
De plus, chaque fois que nous devons couper nos cartes, nous les coupons en bas ou à droite.
La carte résultante ressemblerait à ceci:
...
Quelle carte intéressante!
Pour les facteurs d'échelle inférieurs à 1, tels que 0,5, le processus est plus simple car nous zoomons à la place. Prenez cette carte:
./O\.
.\O/.
Zoom avec une échelle de 0,5:
..//OO\\..
..//OO\\..
..\\OO//..
..\\OO//..
Notez que chaque fois que votre facteur de zoom est inférieur 1
, ce qui suit sera toujours vrai: 1/(zoom factor) % 2 == 0
. Lorsqu'il est au-dessus 1
, la seule garantie que vous avez est qu'il s'agira d'un nombre entier. Lorsqu'il est1
, la carte doit rester la même.
Exemples:
4
/OO\
|OO|
|OO|
\OO/
O
0.25
ABCD
AAAABBBBCCCCDDDD
AAAABBBBCCCCDDDD
AAAABBBBCCCCDDDD
AAAABBBBCCCCDDDD
1
My zoom
should
not change
My zoom
should
not change
Vous pouvez également prendre la carte comme un tableau séparé par des sauts de ligne.
.
queO
. Nous avons coupé à droite et en bas.Réponses:
Mathematica, 105 octets
L'entrée est (échelle, tableau de caractères). L'échelle doit être un entier ou une fraction exacte.
Explication
Si la première entrée est inférieure à 1 ...
Remplacer toutes les chaînes de la deuxième entrée dans un tableau carré, de longueur 1 / (première entrée)
Aplatissez le résultat dans un tableau 2D.
Si la première entrée n'est pas inférieure à 1 ...
Partitionnez la (deuxième entrée) en partitions dont la largeur / longueur sont au maximum (première entrée).
Carte au niveau 2 et au niveau 3 ...
La composition de la fonction Commonest (trouve l'élément le plus commun dans une liste) et First (prenez le premier élément; au cas où il y a plusieurs éléments les plus communs).
la source
Python,
191182180 octetsAppel
_(map, scale_factor)
, où map est un tableau de lignes et renvoie un tableau de lignes.Bien que cette réponse ait déjà été battue, je veux l'expliquer, car ce n'est pas un cas particulier où le facteur d'échelle est inférieur à un.
Il fait une matrice
h
parw
, oùh = ceiling(map height / scale factor)
etw = ceiling(map width / scale factor)
.Pour chaque indice (x, y) de la matrice, faites:
int(x * scale factor), int(y * scale factor)
àceil((x + 1) * scale factor), ceil((y + 1) * scale factor)
.Essayez-le en ligne!
Essayez des cas de test
la source