# -*- coding: utf-8 -*- import re content = """Hệ thống đã truy cập thành công vào cổng đặt hàng trực tuyến của KFC Việt Nam và quét toàn bộ danh mục thực đơn. Dữ liệu gồm 130 sản phẩm thuộc 10 danh mục khác nhau gồm món lẻ cùng các gói combo ưu đãi dành cho thực khách. 1. Tổng hợp dữ liệu thực đơn và các combo tiêu biểu: • Deal 99K Yeah nhóm Value Deals có giá 99000 đồng bao gồm 2 Burger Gà Yo cùng 2 Khoai Chiên và 2 Pepsi tiêu chuẩn. • Mức giá gốc của các món lẻ trong gói trên là 126000 đồng mang lại tỷ lệ tiết kiệm hơn 21 phần trăm cho khách. • Gói Xô Zòn Zã 159K có giá 159000 đồng gồm 5 Miếng Gà Rán với mức giảm 20000 đồng so với mức giá niêm yết. • Món lẻ tiêu chuẩn có giá 37000 đồng trong khi mua combo xô giúp chi phí giảm xuống còn 31800 đồng cho mỗi miếng gà. • Gói Cùng Dzô giá 369000 đồng gồm 12 miếng gà rán và 4 ly Pepsi tiêu chuẩn giúp tiết kiệm 26 phần trăm chi phí. 2. Thiết lập thuật toán tối ưu hóa chi phí đặt món: Bài toán đặt món tối ưu được xây dựng dưới dạng mô hình Quy hoạch Tuyến tính Nguyên nhằm tối thiểu hóa tổng chi trả. • Biến quyết định là biến nguyên mô tả số lượng gói combo hoặc món lẻ loại j được thêm vào trong giỏ hàng thanh toán. • Hàm mục tiêu yêu cầu cực tiểu hóa tổng chi phí bằng tích giữa đơn giá p_j và số lượng x_j của từng sản phẩm. • Ràng buộc toán học đảm bảo tổng số lượng từng loại món ăn nhận được luôn đáp ứng đúng định mức nhu cầu thực tế ban đầu. 3. So sánh ưu điểm và nhược điểm của các phương pháp: • Phương pháp Quy hoạch Nguyên có ưu điểm đảm bảo nghiệm tối ưu toàn cục nhưng nhược điểm là cần công cụ giải toán chuyên dụng. • Phương pháp Tham lam Động có ưu điểm tính toán siêu tốc nhưng nhược điểm là dễ chọn phương án có tổng chi phí chưa thấp nhất. Hệ thống sẵn sàng lập trình kịch bản Python tự động tính toán phương án mua combo tối ưu khi nhận được danh sách yêu cầu. Tài liệu tham khảo theo quy chuẩn APA 7: Dantzig, G. B. (1963). Linear programming and extensions. Princeton University Press. Vanderbei, R. J. (2020). Linear programming: Foundations and extensions (5th ed.). Springer.""" # Verify no dashes dashes = re.findall(r'[\-\—\–\⁃\‒\‐\‑]', content) print(f"Dashes found ({len(dashes)}): {dashes}") # Verify sentences lines = content.split('\n') for line in lines: line = line.strip() if not line: continue # If line is header or reference if line.startswith("1.") or line.startswith("2.") or line.startswith("3.") or line.startswith("Tài") or line.startswith("Dantzig") or line.startswith("Vanderbei"): continue # Check bullet or prose line text_to_check = line if text_to_check.startswith("•"): text_to_check = text_to_check[1:].strip() sentences = [s.strip() for s in text_to_check.split('.') if s.strip()] for s in sentences: words = s.split() wc = len(words) print(f"[{wc:02d} words] {s}") if not (20 <= wc <= 25): print(f" --> INVALID WORD COUNT: {wc}")