Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Python

पायथन में दिए गए दिशा में एक बार स्लाइड करने के बाद अगला बोर्ड पोजिशन ढूंढने का प्रोग्राम


मान लीजिए हमारे पास 2048 गेम बोर्ड है जो प्रारंभिक बोर्ड को दर्शाता है और एक स्ट्रिंग दिशा है जो स्वाइप दिशा को दर्शाती है, हमें अगला बोर्ड स्टेट ढूंढना है। जैसा कि हम जानते हैं 2048 गेम में, हमें एक 4x4 बोर्ड नंबरों का दिया जाता है (उनमें से कुछ खाली हैं, यहां 0 से दर्शाए गए) जिन्हें हम 4 दिशाओं में से किसी में स्वाइप कर सकते हैं ("U", "D", "L", या "R")। जब हम स्वाइप करते हैं, तो सभी नंबर उस दिशा में जितना संभव हो उतना आगे बढ़ते हैं और समान आसन्न नंबर ठीक एक बार जुड़ जाते हैं।

एल्गोरिदम

  • अगर दिशा "R" के समान है, तो बोर्ड को एंटी-क्लॉकवाइज दो बार घुमाएं
  • अन्यथा जब दिशा "U" के समान है, तो बोर्ड को एंटी-क्लॉकवाइज एक बार घुमाएं
  • अन्यथा जब दिशा "D" के समान है, तो बोर्ड को एंटी-क्लॉकवाइज तीन बार घुमाएं
  • i को 0 से 3 तक रेंज में, करें
    • row := board[i] पर सभी नॉन-जीरो एलिमेंट्स की सूची
    • j को 0 से 2 तक रेंज में, करें
      • अगर j+1 < row का आकार और row[j] row[j+1] के समान है, तो
        • row[j] := row[j] * 2
        • row[j+1] हटाएं
    • जब तक row का आकार < 4, करें
      • row के अंत में 0 डालें
    • board[i] := row
  • मूल दिशा के आधार पर बोर्ड को वापस घुमाएं
  • board लौटाएं

इम्प्लीमेंटेशन


class Solution:
    def solve(self, board, direction):
        if direction == "R":
            board = rot_anti_clock_dir(rot_anti_clock_dir(board))
        elif direction == "U":
            board = rot_anti_clock_dir(board)
        elif direction == "D":
            board = rot_anti_clock_dir(rot_anti_clock_dir(rot_anti_clock_dir(board)))

        for i in range(4):
            row = [x for x in board[i] if x]
            for j in range(3):
                if j + 1 < len(row) and row[j] == row[j + 1]:
                    row[j] *= 2
                    del row[j + 1]
            while len(row) < 4:
                row += [0]
            board[i] = row

        if direction == "R":
            board = rot_anti_clock_dir(rot_anti_clock_dir(board))
        elif direction == "U":
            board = rot_anti_clock_dir(rot_anti_clock_dir(rot_anti_clock_dir(board)))
        elif direction == "D":
            board = rot_anti_clock_dir(board)

        return board

def rot_anti_clock_dir(x):
    x = [[x[i][j] for i in range(4)] for j in range(4)]
    return x[::-1]

ob = Solution()
matrix = [
    [2, 0, 0, 2],
    [2, 2, 2, 2],
    [0, 4, 2, 2],
    [2, 2, 2, 0]
]
print(ob.solve(matrix, "L"))

इनपुट


matrix = [
    [2, 0, 0, 2],
    [2, 2, 2, 2],
    [0, 4, 2, 2],
    [2, 2, 2, 0]
]

आउटपुट


[
    [4, 0, 0, 0],
    [4, 4, 0, 0],
    [4, 4, 0, 0],
    [4, 2, 0, 0]
]
  1. - पायथन में दिए गए स्ट्रिंग अनुक्रम नियमों का पालन करके nth अनुक्रम खोजने का प्रोग्राम

    मान लीजिए हमारे पास दो स्ट्रिंग्स s, t और एक अन्य धनात्मक संख्या n भी दी गई है, हमें अनुक्रम A का nवां पद लौटाना है जहां: A[0] = s A[1] = t जब n सम हो तो A[n] = A[n-1] + A[n-2], अन्यथा A[n] = A[n-2] + A[n-1]। उदाहरण के लिए, यदि s = a और t = b, तो अनुक्रम A होगा: [a, b, ba (a+b), bba (b+ba), bbaba

  1. - पायथन में दिए गए बॉल पर कब्जा करने वाले बॉक्स की स्थिति खोजें

    मान लीजिए हमारे पास दो ऐरे A और B हैं। A का आकार पंक्तियों की संख्या है और A[i] आईवीं पंक्ति में बॉक्स की संख्या है। और B गेंदों का ऐरे है जहां B[i] गेंद पर एक संख्या दर्शाता है। दिया गया है कि गेंद i (मान B[i]) को उस बॉक्स में रखा जाएगा जिसकी शुरुआत से स्थिति B[i] है। हमें प्रत्येक B[i] के अनुरूप

  1. - Python प्रोग्राम में मैट्रिक्स का ट्रांसपोज़ खोजना

    इस लेख में, हम नीचे दिए गए समस्या कथन के समाधान के बारे में जानेंगे। समस्या कथन - हमें एक मैट्रिक्स दिया गया है, हमें मैट्रिक्स का ट्रांसपोज़ प्रदर्शित करने की आवश्यकता है। मैट्रिक्स का ट्रांसपोज़ A[i][j] पर मौजूद मान को A[j][i] से बदलकर प्राप्त किया जाता है। आइए नीचे कार्यान्वयन में अवधारणा का न