Tugas Anda adalah, diberi peta sebagai input, memperkecil atau memperkecil, tergantung pada skala. Perhatikan bahwa skala yang diberikan adalah skala yang digunakan untuk memperkecil , sehingga skala antara 0 dan 1 akan benar-benar diperbesar.
Misalnya, diberikan peta berikut (dibuat dengan buruk):
..____....
../OOO\...
..\OO/\...
..........
Dan faktor skala 2, Anda harus memisahkannya menjadi bagian 2x2:
.. | __ | __ | .. | ..
.. | /O | OO | \. | ..
----------------------
.. | \O | O/ | \. | ..
.. | .. | .. | .. | ..
Dan di setiap bagian menemukan karakter yang paling umum:
.__..
.....
Perhatikan bahwa ada bagian yang ambigu:
__
OO
Saya memilih untuk menggunakan _
untuk bagian ini, tetapi menggunakan O
akan bisa diterima juga.
Jika, misalnya, Anda diberi faktor skala 4, Anda akan membaginya menjadi bagian 4x4, seperti:
..__ | __.. | ..
../O | OO\. | ..
..\O | O/\. | ..
.... | .... | ..
Seperti yang Anda tahu, peta tidak masuk dengan sempurna ke bagian 4x4, tapi tidak apa-apa, karena kami hanya bisa menurunkan ukuran bagian di samping.
Juga, setiap kali kita perlu memotong peta kita, kita memotong di bagian bawah atau di sisi kanan.
Peta yang dihasilkan akan terlihat seperti ini:
...
Sungguh peta yang menarik!
Untuk faktor skala di bawah 1, seperti 0,5, prosesnya lebih sederhana karena kami memperbesarnya. Ambil peta ini:
./O\.
.\O/.
Zooming dengan skala 0,5:
..//OO\\..
..//OO\\..
..\\OO//..
..\\OO//..
Perhatikan bahwa setiap kali faktor zoom Anda kurang dari 1
, berikut ini akan selalu benar: 1/(zoom factor) % 2 == 0
. Ketika itu di atas 1
, satu-satunya jaminan yang Anda miliki adalah bahwa itu akan menjadi nomor keseluruhan. Saat itu 1
, peta harus tetap sama.
Contoh:
4
/OO\
|OO|
|OO|
\OO/
O
0.25
ABCD
AAAABBBBCCCCDDDD
AAAABBBBCCCCDDDD
AAAABBBBCCCCDDDD
AAAABBBBCCCCDDDD
1
My zoom
should
not change
My zoom
should
not change
Anda juga dapat menggunakan peta sebagai larik yang dipisahkan oleh baris.
.
dariO
. Kami memotong di sisi kanan dan bawah.Jawaban:
Mathematica, 105 byte
Inputnya adalah (skala, array karakter). Skala harus berupa bilangan bulat atau fraksi yang tepat.
Penjelasan
Jika input pertama kurang dari 1 ...
Ganti semua Strings pada input kedua menjadi array persegi, dengan panjang 1 / (input pertama)
Ratakan hasilnya menjadi array 2D.
Jika input pertama tidak kurang dari 1 ...
Partisi (input kedua) menjadi partisi yang lebar / panjangnya paling banyak (input pertama).
Peta ke level 2 dan level 3 ...
Komposisi fungsi paling umum (menemukan elemen paling umum dalam daftar) dan pertama (ambil elemen pertama; kalau-kalau ada beberapa elemen paling umum).
sumber
Python,
191182180 bytePanggilan
_(map, scale_factor)
, di mana peta adalah array garis, dan mengembalikan array garis.Meskipun jawaban ini sudah dikalahkan, saya ingin menjelaskannya, karena tidak ada kasus khusus di mana faktor skala kurang dari satu.
Itu membuat
h
olehw
matriks, di manah = ceiling(map height / scale factor)
, danw = ceiling(map width / scale factor)
.Untuk setiap indeks (x, y) dalam matriks, lakukan:
int(x * scale factor), int(y * scale factor)
keceil((x + 1) * scale factor), ceil((y + 1) * scale factor)
.Cobalah online!
Coba uji kasus
sumber