สมมติว่าเรามีกระดานเกม 2048 ที่เป็นตัวแทนของกระดานเริ่มต้นและทิศทางของสตริงที่แสดงถึงทิศทางการปัด เราต้องหาสถานะของกระดานถัดไป ดังที่เราทราบในเกม 2048 เราได้รับกระดานตัวเลข 4 x 4 (บางอันว่างเปล่า แสดงในที่นี้ด้วย 0) ซึ่งเราสามารถปัดไปในทิศทางใดก็ได้จาก 4 ทิศทาง ("U", "D" "L" หรือ "R") เมื่อเราปัด ตัวเลขทั้งหมดจะเคลื่อนที่ไปในทิศทางนั้นให้ไกลที่สุด และตัวเลขที่อยู่ติดกันที่เหมือนกันจะถูกรวมเข้าด้วยกันเพียงครั้งเดียว
ดังนั้นหากอินพุตเป็นแบบ
ทิศทาง ="L" จากนั้นผลลัพธ์จะเป็น
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้:
-
ถ้าทิศทางเหมือนกับ "R" แล้ว
-
กระดาน :=หมุนกระดานทวนเข็มนาฬิกาสองครั้ง
-
-
มิฉะนั้นเมื่อทิศทางเหมือนกับ "U" แล้ว
-
กระดาน :=หมุนกระดานทวนเข็มนาฬิกาหนึ่งครั้ง
-
-
มิฉะนั้นเมื่อทิศทางเหมือนกับ "D" แล้ว
-
กระดาน :=หมุนกระดานทวนเข็มนาฬิกาสามครั้ง
-
-
สำหรับผมอยู่ในช่วง 0 ถึง 3 ทำ
-
row :=รายการองค์ประกอบที่ไม่ใช่ศูนย์ทั้งหมดที่บอร์ด[i]
-
สำหรับ j ในช่วง 0 ถึง 2 ทำ
-
ถ้า j + 1 <ขนาดของแถวและแถว[j] เท่ากับแถว[j + 1] ดังนั้น
-
แถว[j] :=แถว[j] * 2
-
ลบแถว[j + 1]
-
-
-
ในขณะที่ขนาดของแถว <4 ทำ
-
ใส่ 0 ที่ท้ายแถว
-
-
กระดาน[i] :=แถว
-
-
ถ้าทิศทางเหมือนกับ "R" แล้ว
-
กระดาน :=หมุนกระดานทวนเข็มนาฬิกาสองครั้ง
-
-
มิฉะนั้นเมื่อทิศทางเหมือนกับ "U" แล้ว
-
กระดาน :=หมุนกระดานทวนเข็มนาฬิกาสามครั้ง
-
-
มิฉะนั้นเมื่อทิศทางเหมือนกับ "D" แล้ว
-
กระดาน :=หมุนกระดานทวนเข็มนาฬิกาหนึ่งครั้ง
-
-
กระดานคืนสินค้า
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น
ตัวอย่าง
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]]