# -*- 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. Tổng cộng có 130 sản phẩm thuộc 10 danh mục khác nhau bao 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: • Nhóm Value Deals: Gói Deal 99K Yeah 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. • Nhóm Hot Deal: 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 giá niêm yết. • Món lẻ tiêu chuẩn: Một miếng gà rán có giá 37000 đồng trong khi mua combo xô giúp giảm xuống 31800 đồng mỗi miếng gà. • Nhóm Combo Nhóm: Gói Cùng Dzô giá 369000 đồng gồm 12 miếng gà rán và 4 ly Pepsi 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: Gọi x_j là số lượng gói combo hoặc món lẻ loại j được lựa chọn thêm vào trong giỏ hàng thanh toán. • Hàm mục tiêu: Cần 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 lựa chọn. • Ràng buộc nhu cầu: Tổng số lượng từng loại món ăn nhận được phải lớn hơn hoặc bằ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: • Quy hoạch Tuyến tính Nguyên: Ưu điểm là đảm bảo nghiệm tối ưu toàn cục nhưng nhược điểm là đòi hỏi công cụ giải toán chuyên dụng. • Giải thuật Tham lam Động: Ưu điểm là tính toán cực nhanh nhưng nhược điểm là dễ rơi vào điểm tối ưu cục bộ không hoàn hảo. Hệ thống có thể tạo kịch bản Python tự động tính toán số lượng combo tối ưu ngay khi nhận được danh sách món cần đặt. Tài liệu tham khảo 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 liệu") 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() # If there is a prefix like "Nhóm Value Deals:", check sentences # Split by periods 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}")