কম্পিউটার

পাইথনে বৈধ সুডোকু


ধরুন আমাদের একটি 9x9 সুডোকু বোর্ড আছে। আমাদের যাচাই করতে হবে সেটা বৈধ নাকি এখন। শুধুমাত্র ভরা কক্ষগুলিকে নিম্নলিখিত নিয়ম অনুসারে যাচাই করতে হবে -

  • প্রতিটি সারিতে পুনরাবৃত্তি ছাড়াই 1-9 পর্যন্ত সংখ্যা থাকতে হবে।
  • প্রতিটি কলামে পুনরাবৃত্তি ছাড়াই 1-9 পর্যন্ত সংখ্যা থাকতে হবে।
  • গ্রিডের 9টি (3x3) সাব-বাক্সের প্রতিটিতে 1-9 পর্যন্ত সংখ্যা পুনরাবৃত্তি ছাড়াই থাকতে হবে।

ধরুন সুডোকু গ্রিড −

এর মত ৷ ৷ ৷ ৷
5 3

7



6

19 5



9 8



6
8


6


3
4

8
3

1
7

2



6

6



2 8



419

5




8

7 9

এটি বৈধ৷

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • আমি 0 থেকে 8
      পরিসরে
    • রো, কোল এবং ব্লক, রো_কিউব :=3 * (i / 3), এবং col_cube :=3 * (i mod 3) নামে কিছু খালি অভিধান তৈরি করুন
    • 0 থেকে 8 এর মধ্যে j-এর জন্য
    • যদি বোর্ড[i, j] ফাঁকা না হয় এবং বোর্ড[i, j] সারি হয়, তাহলে মিথ্যা দিন
    • সারি[বোর্ড[i, j]] :=1
    • যদি বোর্ড[j, i] ফাঁকা না হয় এবং বোর্ড [j, i] কলে থাকে, তাহলে মিথ্যা দিন
    • col[board[j, i]] :=1
    • rc :=row_cube + j/3 এবং cc :=col_cube + j মোড 3
    • যদি বোর্ড [rc, cc] ব্লক এবং বোর্ডে [rc, cc] ফাঁকা না হয়, তাহলে মিথ্যা দিন
    • block[board[rc, cc]] :=1
  • সত্য ফেরত দিন
  • উদাহরণ(পাইথন)

    আসুন আরও ভালোভাবে বোঝার জন্য নিচের বাস্তবায়ন দেখি −

    class Solution(object):
       def isValidSudoku(self, board):
          """
          :type board: List[List[str]]
          :rtype: bool
          """
          for i in range(9):
             row = {}
             column = {}
             block = {}
             row_cube = 3 * (i//3)
             column_cube = 3 * (i%3)
             for j in range(9):
             if board[i][j]!='.' and board[i][j] in row:
                return False
             row[board[i][j]] = 1
             if board[j][i]!='.' and board[j][i] in column:
                return False
             column[board[j][i]] = 1
             rc= row_cube+j//3
             cc = column_cube + j%3
             if board[rc][cc] in block and board[rc][cc]!='.':
                return False
             block[board[rc][cc]]=1
          return True
    ob1 = Solution()
    print(ob1.isValidSudoku([
       ["5","3",".",".","7",".",".",".","."],
       ["6",".",".","1","9","5",".",".","."],
       [".","9","8",".",".",".",".","6","."],
       ["8",".",".",".","6",".",".",".","3"],
       ["4",".",".","8",".","3",".",".","1"],
       ["7",".",".",".","2",".",".",".","6"],
       [".","6",".",".",".",".","2","8","."],
       [".",".",".","4","1","9",".",".","5"],
       [".",".",".",".","8",".",".","7","9"]]))

    ইনপুট

    [["5","3",".",".","7",".",".",".","."],["6",".",".","1","9","5",".",".","."],[".","9","8",".",".",".",".","6","."],["8",".",".",".","6",".",".",".","3"],["4",".",".","8",".","3",".",".","1"],["7",".",".",".","2",".",".",".","6"],[".","6",".",".",".",".","2","8","."],[".",".",".","4","1","9",".",".","5"],[".",".",".",".","8",".",".","7","9"]]

    আউটপুট

    true

    1. C++ এ বৈধ সুডোকু

    2. পাইথনে বৈধ প্যালিনড্রোম

    3. পাইথনে একাধিক মান ফেরত দিচ্ছেন?

    4. কিভাবে আমরা পাইথনে একাধিক মান ফেরত দেব?