কম্পিউটার টিউটোরিয়াল

পাইথনে সর্বোচ্চ দৈর্ঘ্যের স্নেক সিকোয়েন্স বের করা

ধরা যাক একটি সংখ্যার গ্রিড (grid) আছে। আমাদের একটি স্নেক সিকোয়েন্স বের করতে হবে। স্নেক সিকোয়েন্স মানে প্রতিটি সংখ্যার ডানদিক বা নিচের সংখ্যা তার সাথে ±1 পার্থক্য রাখে। যদি একাধিক সিকোয়েন্স থাকে তবে যেকোনো একটি রিটার্ন করুন।

ইনপুট গ্রিড: 10 7 6 3 9 8 7 6 8 4 2 7 2 2 2 8 আউটপুট: দৈর্ঘ্য ৬, সিকোয়েন্স: 10(0,0) → 9(1,0) → 8(1,1) → 7(1,2) → 6(1,3) → 7(2,3) → 8(3,3)

সমাধানের ধাপসমূহ (DP + পাথ রিকভারি)

  • lookup[M][N] DP টেবিল 0 দিয়ে ইনিশিয়ালাইজ
  • প্রতিটি সেল (i,j) এর জন্য উপরে এবং বামের সেল চেক করুন ±1 পার্থক্য থাকলে lookup আপডেট করুন
  • সর্বোচ্চ দৈর্ঘ্য এবং তার অবস্থান (max_row, max_col) ট্র্যাক করুন
  • get_path ফাংশন দিয়ে লুকআপ টেবিল থেকে পাথ রিকভার করুন

উদাহরণ

M = 4; N = 4
def get_path(grid, mat, i, j):
    path = []
    pt = [i, j]
    path.append(pt)
    while grid[i][j] != 0:
        if i > 0 and grid[i][j]-1 == grid[i-1][j]:
            pt = [i-1, j]; path.append(pt); i -= 1
        elif j > 0 and grid[i][j]-1 == grid[i][j-1]:
            pt = [i, j-1]; path.append(pt); j -= 1
    return path
def get_sequence(grid):
    lookup = [[0]*N for _ in range(M)]
    length_max = max_row = max_col = 0
    for i in range(M):
        for j in range(N):
            if i or j:
                if i > 0 and abs(grid[i-1][j] - grid[i][j]) == 1:
                    lookup[i][j] = max(lookup[i][j], lookup[i-1][j] + 1)
                    if length_max < lookup[i][j]:
                        length_max = lookup[i][j]; max_row = i; max_col = j
                if j > 0 and abs(grid[i][j-1] - grid[i][j]) == 1:
                    lookup[i][j] = max(lookup[i][j], lookup[i][j-1] + 1)
                    if length_max < lookup[i][j]:
                        length_max = lookup[i][j]; max_row = i; max_col = j
    print("Maximum length:", length_max)
    path = get_path(lookup, grid, max_row, max_col)
    print("Sequence is:")
    for ele in reversed(path):
        print(grid[ele[0]][ele[1]], " [", ele[0], ", ", ele[1], "]", sep="")
grid = [[10,7,6,3],[9,8,7,6],[8,4,2,7],[2,2,2,8]]
get_sequence(grid)

ইনপুট

[[10,7,6,3],[9,8,7,6],[8,4,2,7],[2,2,2,8]]

আউটপুট

Maximum length: 6
Sequence is:
10 [0, 0]
9 [1, 0]
8 [1, 1]
7 [1, 2]
6 [1, 3]
7 [2, 3]
8 [3, 3]
  1. পাইথনে ওয়ার্ড অ্যারে-তে সর্বোচ্চ দৈর্ঘ্যের প্রিফিক্স সিকোয়েন্স খুঁজে বের করার প্রোগ্রাম

  2. পাইথনে বাইনারি ম্যাট্রিক্স-এ সর্বোচ্চ পথ দৈর্ঘ্য খুঁজে বের করার প্রোগ্রাম

  3. পাইথনে kটি একই দৈর্ঘ্যের রিবন বানাতে সর্বোচ্চ দৈর্ঘ্য বের করার প্রোগ্রাম

  4. Python-এ সর্বোচ্চ বিল্ডিং হাইট বের করার প্রোগ্রাম