সাধারণভাবে অ্যালগরিদম ক্লাস এবং কম্পিউটার বিজ্ঞানের একটি খুব সাধারণ প্রয়োজন হ'ল গ্রিড বা ম্যাট্রিক্সের (যেমন বিএফএস বা ডিএফএসে) মাধ্যমে 4-দিকনির্দেশে পুনরাবৃত্তি করা। এটি প্রায়শই লুপগুলির মধ্যে প্রচুর গাণিতিক এবং তুলনা সহ প্রচুর আড়ম্বরপূর্ণ এবং ভার্বোজ কোডের ফলাফল বলে মনে হয়। আমি এটির জন্য অনেকগুলি ভিন্ন পদ্ধতি দেখেছি, তবে এই অনুভূতিটি কাঁপতে পারি না যে এটি করার আরও একটি সংক্ষিপ্ত উপায় আছে।
চ্যালেঞ্জটি হ'ল একটি খাঁটি ফাংশন লিখুন n, m
যা বিন্দুতে উত্পন্ন একটি সীমাবদ্ধ সমতলের প্রস্থ এবং উচ্চতা (0,0)
এবং (x,y)
যে স্থানাঙ্কগুলি যে বিমানের অভ্যন্তরে যে কোনও বৈধ পয়েন্ট উপস্থাপন করতে পারে, বিমানের মধ্যে সমস্ত পয়েন্টের একটি পুনরাবৃত্ত বস্তুটি 4-দিকনির্দেশিত করে দেয় সংলগ্ন (x,y)
।
লক্ষ্যটি হ'ল সেই ফাংশনটিকে যতটা সম্ভব কম বাইটে সংজ্ঞায়িত করা।
বৈধ ইনপুট / আউটপুট চিত্রিত করতে সহায়তা করার জন্য কয়েকটি উদাহরণ:
n = 5 (y-axis), m = 3 (x-axis) (zero-based)
matrix = [
[A, B, C],
[D, E, F],
[G, H, I],
[J, K, L],
[M, N, O],
]
(x, y) => [valid iterable points]
E: (1, 1) => [(1, 0), (2, 1), (1, 2), (0, 1)]
A: (0, 0) => [(1, 0), (0, 1)]
L: (2, 3) => [(2, 2), (2, 4), (1, 3)]
N: (1, 4) => [(1, 3), (2, 4), (0, 4)]
n = 1 (y-axis), m = 1 (x-axis) (zero-based)
matrix = [
[A],
]
(x, y) => [valid iterable points]
A: (0, 0) => []
n = 2 (y-axis), m = 1 (x-axis) (zero-based)
matrix = [
[A],
[B],
]
(x, y) => [valid iterable points]
A: (0, 0) => [(0, 1)]
B: (0, 1) => [(0, 0)]
এবং শর্তগুলি সন্তুষ্ট করে এমন একটি ফাংশনের উদাহরণ (পাইথনের এটি একটি) এখানে রয়েছে:
def four_directions(x, y, n, m):
valid_coordinates = []
for xd, yd in [(1, 0), (0, 1), (-1, 0), (0, -1)]:
nx, ny = x + xd, y + yd
if 0 <= nx < m and 0 <= ny < n:
valid_coordinates.append((nx, ny))
return valid_coordinates
উপরের উদাহরণটি একটি নামযুক্ত ফাংশন সংজ্ঞায়িত করেছে, তবে বেনামে ফাংশনগুলিও গ্রহণযোগ্য।
ইনপুটগুলি n, m, x, y
নিম্নলিখিত রেঞ্জগুলির মধ্যে সমস্ত স্বাক্ষরযুক্ত 32-বিট পূর্ণসংখ্যা:
n > 0
m > 0
0 <= x < m
0 <= y < n
আউটপুট অবশ্যই (x, y) জোড়ার জোড় (তবে আপনার পছন্দের ভাষা এটি নির্ধারণ করে) এর রূপ নিতে হবে।
অতিরিক্ত স্পষ্টতা:
জটিল সংখ্যা (এবং অন্যান্য উপস্থাপনা / সিরিয়ালাইজেশন) ঠিক আছে যতক্ষণ না পুনরাবৃত্তির গ্রাহক অ্যাক্সেস করতে পারে x
এবং y
কেবলমাত্র তাদের অবস্থান জেনে পূর্ণসংখ্যার হিসাবে।
অ-শূন্য-ভিত্তিক সূচকগুলি গ্রহণযোগ্য, তবে কেবল যদি পছন্দের ভাষাটি একটি শূন্য-সূচকযুক্ত ভাষা হয়। ভাষাটি যদি সংখ্যায়ন ব্যবস্থার মিশ্রণ ব্যবহার করে তবে ম্যাট্রিক্স উপস্থাপনের জন্য ডেটা স্ট্রাকচারের নম্বর সিস্টেমটিতে ডিফল্ট। এগুলি যদি এখনও প্রদত্ত ভাষায় সমস্ত বিদেশী ধারণা থাকে তবে যে কোনও শুরুর সূচকটি গ্রহণযোগ্য।
(x,y)
নিজেই আয়তক্ষেত্রের মধ্যে আছে, তাই না?