मान लीजिए हमारे पास एक 2D मैट्रिक्स है जो एक एक्सेल स्प्रेडशीट को दर्शाता है। हमें सभी सेल और फ़ॉर्मूला की गणना के साथ वही मैट्रिक्स ढूंढना है। एक एक्सेल स्प्रेडशीट नीचे जैसी दिखती है
| B1 | 7 | 0 |
| 3 | 5 | =A1+A2 |
स्तंभों के नाम (A, B, C...) हैं और पंक्तियाँ (1, 2, 3....) हैं। प्रत्येक सेल में या तो एक मान होगा, किसी अन्य सेल का संदर्भ, या संख्याओं या सेल संदर्भ के बीच ऑपरेशन के लिए एक एक्सेल फ़ॉर्मूला। (उदाहरण. "=A1+5", "=A2+B2", या "=2+5")
उदाहरण के लिए, यदि इनपुट है
| B1 | 7 | 0 |
| 3 | 5 | =A1+A2 |
तो आउटपुट होगा
| 7 | 7 | 0 |
| 3 | 5 | 10 |
क्योंकि B1 = 7 (पहली पंक्ति दूसरा स्तंभ) और "=A1 + A2" 7 + 3 = 10 है।
इसे हल करने के लिए, हम निम्न चरणों का पालन करेंगे
- एक फ़ंक्शन resolve() परिभाषित करें। यह s लेगा
- यदि s संख्यात्मक है, तो s को पूर्णांक के रूप में लौटाएं
- अन्यथा solve(getIdx(s)) लौटाएं
- एक फ़ंक्शन getIdx() परिभाषित करें। यह s लेगा
- एक सूची लौटाएं जहां पहला मान s का सबस्ट्रिंग 1 से अंत तक पूर्णांक के रूप में है और दूसरा मान s[0] का ASCII - "A" का ASCII है
- एक फ़ंक्शन do() परिभाषित करें। यह a, b, op लेगा
- यदि op "+" के समान है, तो
- a + b लौटाएं
- यदि op "-" के समान है, तो
- a - b लौटाएं
- यदि op "*" के समान है, तो
- a * b लौटाएं
- यदि op "/" के समान है, तो
- a / b लौटाएं
- एक फ़ंक्शन solve() परिभाषित करें। यह i, j लेगा
- यदि matrix[i,j] संख्यात्मक है तो वह मान लौटाएं
- अन्यथा:
- s := matrix[i, j]
- यदि s[0] "=" के समान है, तो
- s[इंडेक्स 2 से अंत तक] के सबस्ट्रिंग में प्रत्येक c के लिए, करें
- यदि c (+, -, /, *) में कोई ऑपरेटर है, तो
- op := c
- लूप से बाहर निकलें
- यदि c (+, -, /, *) में कोई ऑपरेटर है, तो
- [a, b] := s के सबस्ट्रिंग [इंडेक्स 1 से अंत] और op से विभाजित
- [aRes, bRes] := [resolve(a) , resolve(b)]
- do(aRes, bRes, op) लौटाएं
- s[इंडेक्स 2 से अंत तक] के सबस्ट्रिंग में प्रत्येक c के लिए, करें
- अन्यथा,
- solve(getIdx(s)) लौटाएं
- i को 0 से मैट्रिक्स की पंक्ति संख्या तक रेंज में, करें
- j को 0 से मैट्रिक्स की स्तंभ संख्या तक रेंज में, करें
- matrix[i, j] := (solve(i, j)) स्ट्रिंग के रूप में
- j को 0 से मैट्रिक्स की स्तंभ संख्या तक रेंज में, करें
- matrix लौटाएं
बेहतर समझ के लिए निम्न कार्यान्वयन देखें:
उदाहरण
class Solution: def solve(self, matrix): def resolve(s): try: return int(s) except: return solve(*getIdx(s)) def getIdx(s): return [int(s[1:]) - 1, ord(s[0]) - ord("A")] def do(a, b, op): if op == "+": return a + b if op == "-": return a - b if op == "*": return a * b if op == "/": return a / b def solve(i, j): try: return int(matrix[i][j]) except: s = matrix[i][j] if s[0] == "=": for c in s[2:]: if c in "+-/*": op = c break a, b = s[1:].split(op) aRes, bRes = resolve(a), resolve(b) return do(aRes, bRes, op) else: return solve(*getIdx(s)) for i in range(len(matrix)): for j in range(len(matrix[0])): matrix[i][j] = str(solve(i, j)) return matrix ob = Solution() matrix = [ ["B1", "7", "0"], ["3", "5", "=A1+A2"] ] print(ob.solve(matrix))
इनपुट
[["B1", "7", "0"], ["3", "5", "=A1+A2"] ]
आउटपुट
[['7', '7', '0'], ['3', '5', '10']]