# Imports : z3 (solveur SMT + Optimize + pseudo-Booleen) + time (mesure de resolution).
from z3 import (Solver, Optimize, Int, Bool, And, Or, Not, Implies, If,
Sum, PbEq, sat, unsat, set_param)
import time
set_param('parallel.enable', False)
# Base de donnees nutritionnelle : (nom, kcal, proteines_g, cout_centimes, categorie).
FOODS = [
("Salade verte", 80, 2, 300, "entree"),
("Soupe de legumes", 120, 4, 250, "entree"),
("Carpaccio", 150, 15, 600, "entree"),
("Poulet roti", 350, 30, 500, "plat"),
("Saumon grille", 300, 28, 800, "plat"),
("Pates bolognaise", 450, 18, 350, "plat"),
("Risotto", 400, 10, 400, "plat"),
("Salade de fruits", 100, 1, 200, "dessert"),
("Mousse au chocolat",200, 5, 250, "dessert"),
("Tiramisu", 250, 7, 350, "dessert"),
]
NAMES, KCALS, PROTS, COSTS, CATS = map(list, zip(*FOODS))
CATS_SET = ("entree", "plat", "dessert")
print(f"Base nutritionnelle : {len(FOODS)} aliments ({sum(c=='entree' for c in CATS)} entrees, "
f"{sum(c=='plat' for c in CATS)} plats, {sum(c=='dessert' for c in CATS)} desserts).")