Thử thách logic với bài toán chia nước kinh điển từ Die Hard
🌊 Số bước đã thực hiện: 0
⭐ Số bước tối thiểu: 7
🎯 Mục tiêu: 4L
🌊 Hướng dẫn: Click "Đổ đầy" để lấy nước từ vòi, "Làm rỗng" để đổ bỏ nước, hoặc click can để đổ nước giữa các can
📏 Tỷ lệ: Chiều cao can tỷ lệ với dung tích - can càng lớn càng cao
Cấp 1: Die Hard Classic
Đong chính xác 4 lít nước từ can 3L và 5L
🎉 Xuất sắc! Bạn đã giải được câu đố! 🎉
🎬 Câu chuyện từ phim "Die Hard with a Vengeance" (1995)
Bối cảnh trong phim
Trong bộ phim kinh điển "Die Hard with a Vengeance" (1995), John McClane (Bruce Willis) và Zeus Carver (Samuel L. Jackson) phải đối mặt với một quả bom được đặt tại Công viên Trung tâm New York. Kẻ khủng bố Simon Gruber đưa ra một câu đố tưởng chừng như bất khả thi:
"Trên đài phun nước, có hai chiếc can: một can 5 gallon và một can 3 gallon. Hãy đong chính xác 4 gallon nước và đặt lên cân để dừng bộ đếm thời gian. Bạn phải chính xác; chênh lệch dù chỉ một ounce cũng sẽ làm bom nổ."
- Simon Gruber
Với chỉ 5 phút để giải quyết, McClane và Zeus phải sử dụng trí thông minh và logic để tìm ra cách đong chính xác 4 gallon từ hai chiếc can có dung tích 3 và 5 gallon.
Hướng dẫn chơi game
Mục tiêu: Đong chính xác số lít nước theo yêu cầu của từng cấp độ
Đổ đầy: Click nút "💧 Đổ đầy" để lấy nước từ vòi (nguồn vô hạn)
Làm rỗng: Click nút "🚰 Làm rỗng" để đổ bỏ toàn bộ nước trong can
Chuyển nước: Click vào can có nước → chọn can đích để chuyển nước
Theo dõi: Số lít hiện tại hiển thị ở trên mỗi can (ví dụ: 2/5L)
Thắng: Khi có can chứa đúng số lít mục tiêu, can sẽ sáng màu xanh lá
Các cấp độ thử thách
Cấp 1 - Die Hard Classic: Can 3L, 5L → Đong 4L (7 bước tối thiểu)
Cấp 2 - Tam Giác Nước: Can 8L, 5L, 3L → Đong 4L (5 bước)
Cấp 3 - Thử Thách Lớn: Can 12L, 8L, 5L → Đong 6L (6 bước)
Cấp 4 - Cao Thủ: Can 10L, 7L, 3L → Đong 5L (8 bước)
Cấp 5 - Siêu Việt: Can 15L, 12L, 8L, 5L → Đong 7L (10 bước)
Chiến thuật và mẹo
Tư duy từng bước: Lập kế hoạch 2-3 bước tiếp theo trước khi thực hiện
Sử dụng can trung gian: Can nhỏ thường dùng để tạo ra lượng nước "dư"
Nguyên tắc hiệu: Luôn tận dụng hiệu số giữa các can
Quan sát tỷ lệ: Chiều cao can phản ánh dung tích thực tế
Thực hành: Bắt đầu từ cấp dễ để hiểu nguyên tắc
Tính năng đặc biệt
Lời giải tự động: Xem máy tính giải theo thuật toán tối ưu
Lưu/Tải game: Lưu trạng thái để tiếp tục chơi sau
Đếm bước: Theo dõi hiệu quả so với số bước tối thiểu
Animation thực tế: Hiệu ứng đổ nước sống động
Responsive: Chơi tốt trên mọi thiết bị
Toán học đằng sau bài toán
🔢 Lý thuyết số học
Định lý Bézout: Bài toán có lời giải khi và chỉ khi số lít cần đong là bội số của ước chung lớn nhất (GCD) của các dung tích can.
Ví dụ: Can 3L và 5L
GCD(3, 5) = 1
→ Có thể đong mọi số nguyên từ 1L đến 8L
Đây là ứng dụng thực tế của thuật toán Euclid mở rộng trong lý thuyết số.
🎯 Tối ưu hóa
Bài toán tìm đường đi ngắn nhất: Mỗi trạng thái (a, b, c...) là một đỉnh trong đồ thị. Mục tiêu là tìm đường đi từ (0, 0, 0...) đến trạng thái chứa số lít mục tiêu.
Thuật toán: BFS (Breadth-First Search) Độ phức tạp: O(∏capacity_i) Không gian trạng thái: Tích các dung tích can
Đây là bài toán graph traversal cổ điển trong khoa học máy tính.
📊 Phân tích tổ hợp
Số bước tối thiểu: Phụ thuộc vào cấu trúc số học của dung tích các can và mục tiêu.
Die Hard Classic: 3L, 5L → 4L
Công thức: 4 = 5×2 - 3×2
→ 7 bước tối thiểu
Liên quan đến phương trình Diophantine và lý thuyết nhóm trong đại số trừu tượng.
🧠 Ứng dụng thực tế
Hóa học: Pha chế dung dịch với tỷ lệ chính xác
Công nghiệp: Đo lường và phân phối chất lỏng
Lập trình: Thuật toán tìm kiếm và tối ưu hóa
Giáo dục: Dạy tư duy logic và giải quyết vấn đề
Game design: Tạo puzzle thú vị và thách thức
Lịch sử và văn hóa
Bài toán đo lường xuất hiện từ thời cổ đại, được ghi nhận trong nhiều nền văn minh:
Ai Cập cổ đại: Sử dụng trong xây dựng kim tự tháp
Hy Lạp cổ đại: Xuất hiện trong các tác phẩm toán học
Trung Quốc cổ: "Cửu chương toán thuật" có bài toán tương tự
Thời hiện đại: Trở thành bài toán kinh điển trong khoa học máy tính
Phim "Die Hard with a Vengeance" đã làm cho bài toán này trở nên nổi tiếng toàn cầu, khiến nó được biết đến với tên gọi "Die Hard Problem" trong cộng đồng toán học và lập trình.