একটি মানচিত্রে জুম ইন


13

আপনার কাজটি কোনও মানচিত্রকে ইনপুট হিসাবে দেওয়া হচ্ছে, স্কেলের উপর নির্ভর করে এটি জুম বা আউট করা। নোট করুন যে প্রদত্ত স্কেলটি সেই স্কেল যা দ্বারা জুম আউট করা যায় , সুতরাং 0 এবং 1 এর মধ্যে একটি স্কেল আসলে জুম ইন করবে।

উদাহরণস্বরূপ, নিম্নলিখিত (খারাপভাবে তৈরি) মানচিত্র দেওয়া হয়েছে:

..____....
../OOO\...
..\OO/\...
..........

এবং 2 এর স্কেল ফ্যাক্টর, আপনার প্রথমে এটি 2x2 বিভাগে পৃথক করা উচিত:

.. | __ | __ | .. | ..
.. | /O | OO | \. | ..
----------------------
.. | \O | O/ | \. | ..
.. | .. | .. | .. | ..

এবং প্রতিটি বিভাগে সর্বাধিক সাধারণ চরিত্রটি সন্ধান করুন:

.__..
.....

মনে রাখবেন যে এখানে একটি দ্ব্যর্থক বিভাগ ছিল:

__
OO

আমি _এই বিভাগের জন্য ব্যবহার করতে বেছে নিয়েছি , তবে ব্যবহারটি Oপুরোপুরি গ্রহণযোগ্যও হত।

উদাহরণস্বরূপ, যদি আপনাকে 4 এর স্কেল ফ্যাক্টর দেওয়া হয় তবে আপনি এটিকে 4x4 বিভাগে বিভক্ত করবেন:

..__ | __.. | ..
../O | OO\. | ..
..\O | O/\. | ..
.... | .... | ..

আপনি যেমন বলতে পারেন, মানচিত্রটি 4x4 বিভাগে পুরোপুরি ফিট করে না তবে এটি দুর্দান্ত, কারণ আমরা কেবল পাশের অংশটির আকার কমিয়ে আনতে পারি।

এছাড়াও, যখনই আমাদের আমাদের মানচিত্রগুলি কেটে ফেলা দরকার, আমরা নীচে বা ডানদিকে কেটে ফেলি।

ফলস্বরূপ মানচিত্রটি দেখতে এরকম হবে:

...

কী মজার ম্যাপ!

১ এর নীচে স্কেল ফ্যাক্টরের জন্য যেমন ০.০ এর পরিবর্তে প্রক্রিয়াটি আরও সহজ আমরা এর পরিবর্তে জুম বাড়াই। এই মানচিত্রটি ধরুন:

./O\.
.\O/.

0.5 স্কেলের সাথে জুমিং:

..//OO\\..
..//OO\\..
..\\OO//..
..\\OO//..

নোট যখনই আপনার জুম ফ্যাক্টর চেয়ে কম হয় যে 1নিম্নলিখিত সবসময় সত্য হবে: 1/(zoom factor) % 2 == 0। এটি উপরে থাকলে 1আপনার একমাত্র গ্যারান্টি হ'ল এটি সম্পূর্ণ সংখ্যা হবে। এটি যখন হয় তখন 1মানচিত্রটি একই থাকে।

উদাহরণ:

4
/OO\
|OO|
|OO|
\OO/

O


0.25
ABCD

AAAABBBBCCCCDDDD
AAAABBBBCCCCDDDD
AAAABBBBCCCCDDDD
AAAABBBBCCCCDDDD

1
My zoom
should
not change

My zoom
should
not change

আপনি মানচিত্রটিকে একটি নতুন লাইন দ্বারা পৃথক করা অ্যারে হিসাবে নিতে পারেন।


2
আমি মনে করি আপনার স্যান্ডবক্সে আরও কিছু অপেক্ষা করা উচিত ছিল।
এরিক আউটগল্ফার

@ জোনাথন অ্যালান না, এটি হবে না, সেই বিভাগে আরও .কিছু রয়েছে O। আমরা ডান এবং নীচের দিকে কাটা।
Okx

আহ, "আমরা নীচে বা ডানদিকে কাটা" দ্বারা আপনি কী বোঝাতে চান মানচিত্রের উপরের-বাম সবসময়ই কোনও বিভাগের শীর্ষ-বাম?
জোনাথন অ্যালান

@ জোনাথান অ্যালান হ্যাঁ
Okx 15

ঠিক আছে, "বা" শব্দটি বিভ্রান্ত করছে :)
জোনাথন অ্যালান

উত্তর:


7

গণিত, 105 বাইট

If[#<1,ArrayFlatten[#2/.n_String:>Table[n,1/#,1/#]],Map[First@*Commonest,#2~Partition~UpTo@{#,#},{2,3}]]&

ইনপুটটি হল (স্কেল, অক্ষরের অ্যারে)। স্কেলটি অবশ্যই একটি পূর্ণসংখ্যা বা সঠিক ভগ্নাংশ হতে হবে।

ব্যাখ্যা

If[#<1, ..., ... ]

প্রথম ইনপুট যদি 1 এর কম হয় ...

#2/.n_String:>Table[n,1/#,1/#]

দৈর্ঘ্য 1 / (প্রথম ইনপুট) সহ দ্বিতীয় ইনপুটটির সমস্ত স্ট্রিংগুলি একটি বর্গাকার অ্যারেতে প্রতিস্থাপন করুন

ArrayFlatten[ ... ]

ফলাফলটি 2 ডি অ্যারেতে ফ্ল্যাট করুন।

If[#<1, ..., ... ]

প্রথম ইনপুট যদি 1 এর কম না হয় ...

#2~Partition~UpTo@{#,#}

(দ্বিতীয় ইনপুট) পার্টিশনে ভাগ করুন যার প্রস্থ / দৈর্ঘ্য সর্বাধিক (প্রথম ইনপুট)।

Map[ ..., ... ,{2,3}]

স্তর 2 এবং 3 স্তরে মানচিত্র ...

First@*Commonest

কমনেষ্ট ফাংশনটির রচনা (একটি তালিকার মধ্যে সাধারণ উপাদানটি সন্ধান করে) এবং প্রথম (প্রথম উপাদানটি গ্রহণ করুন; যদি একাধিক সাধারণ উপাদান থাকে তবে)।


2

পাইথন, 191 182 180 বাইট

lambda m,s,j=''.join,i=int:[j((lambda p:max(p,key=p.count))(j(g[i(x*s):-i(~x*s//1)]for g in m[i(y*s):-i(~y*s//1)]))for x in range(-i(-len(m[0])//s)))for y in range(-i(-len(m)//s))]

কল করুন _(map, scale_factor), যেখানে মানচিত্রটি লাইনগুলির একটি অ্যারে এবং এটি লাইনের একটি অ্যারে প্রদান করে।

যদিও এই উত্তরটি ইতিমধ্যে পরাজিত হয়েছে, আমি এটি ব্যাখ্যা করতে চাই, কারণ যেখানে স্কেল ফ্যাক্টর একের চেয়ে কম সেখানে এটি বিশেষ ক্ষেত্রে দেখা যায় না।

এটি ম্যাট্রিক্স hদ্বারা একটি তৈরি করে w, কোথায় h = ceiling(map height / scale factor), এবং w = ceiling(map width / scale factor)

ম্যাট্রিক্সের প্রতিটি সূচক (x, y) এর জন্য, করুন:

  • স্থানাঙ্ক থেকে একটি submatrix নিন int(x * scale factor), int(y * scale factor)করতে ceil((x + 1) * scale factor), ceil((y + 1) * scale factor)
  • (এক্স, ওয়াই) এ সাবম্যাট্রিক্সে সর্বাধিক সাধারণ চরিত্রটি রাখুন।

এটি অনলাইন চেষ্টা করুন!

পরীক্ষার ক্ষেত্রে চেষ্টা করুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.