एल्गोरिदम वर्गों और सामान्य रूप से कंप्यूटर विज्ञान में एक बहुत ही सामान्य आवश्यकता एक ग्रिड या मैट्रिक्स (जैसे बीएफएस या डीएफएस) पर 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)खुद आयत में है, है ना?