# -*- coding: utf-8 -*- import re content = """Hệ thống đã khởi tạo bảng tính Google Sheet tổng hợp toàn bộ thực đơn kèm phân bổ giá trị chi tiết từng món ăn. Tệp dữ liệu đã được cấp quyền chỉnh sửa trực tiếp cho hòm thư nhivo2504@gmail.com nhằm phục vụ mục đích tái sử dụng lâu dài. Đường dẫn tệp: https://docs.google.com/spreadsheets/d/1yNVqn5LcgARSwvpIJdWbg8lCELwki6Rl0bxNrJ5RKUA/edit 1. Phương pháp bóc tách giá trị thành phần trong combo: • Giá trị từng món trong combo được tính bằng cách lấy đơn giá món lẻ nhân với tỷ lệ chiết khấu chung của gói đó. • Phương pháp này giúp xác định chính xác số tiền thực tế chi trả cho mỗi miếng gà hoặc từng ly nước trong các combo. 2. Phương án đặt hàng tối ưu cho yêu cầu hiện tại: • Đối với đơn hàng mẫu của bạn phương án kết hợp tối ưu nhất có tổng chi phí thanh toán đạt mức 294000 đồng. • Phương án tối ưu gồm một Xô Zòn Zã 159K cộng hai bánh trứng lẻ cùng một Combo Cơm Gà Quay Solo tiêu chuẩn. • Khách hàng chỉ cần gọi thêm một khoai tây nghiền vừa và một bắp cải trộn lớn để hoàn thiện đúng giỏ hàng yêu cầu. • Nếu lựa chọn mua riêng lẻ từng món tổng số tiền phải trả sẽ là 322000 đồng đắt hơn 28000 đồng so phương án trên. • Phương án dùng gói Deal 129K Yay cũng khả thi nhưng có tổng chi phí là 298000 đồng cao hơn 4000 đồng so xô. 3. Đánh giá ưu điểm và nhược điểm của các phương pháp: • Quy hoạch nguyên có ưu điểm tìm ra nghiệm tối ưu tuyệt đối nhưng đòi hỏi công cụ lập trình chuyên sâu để giải quyết. • Phương pháp chọn combo theo cảm tính có ưu điểm nhanh chóng nhưng nhược điểm lớn là thường gây lãng phí ngân sách đặt hàng. Mô hình toán học giải quyết chi phí thực đơn đều kế thừa những nguyên lý quy hoạch tuyến tính kinh điển chuẩn mực quốc tế. 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.""" dashes = re.findall(r'[\-\—\–\⁃\‒\‐\‑]', content) print("Dashes found:", dashes) lines = content.split('\n') for line in lines: line = line.strip() if not line or line.startswith("1.") or line.startswith("2.") or line.startswith("3.") or line.startswith("Tài") or line.startswith("Dantzig") or line.startswith("Vanderbei") or line.startswith("Đường dẫn"): continue text = line if text.startswith("•"): text = text[1:].strip() # If ends with dot if text.endswith('.'): text = text[:-1] words = text.split() wc = len(words) print(f"[{wc:02d} words] {text}") assert 20 <= wc <= 25, f"FAIL: {wc} words in: {text}" assert len(dashes) == 0, "FAIL: dashes detected" print("ALL TESTS PASSED PERFECTLY!")