#!/bin/bash # R5.A.04 - TD Complexité algorithmique : évaluation d'une solution pour le concours # Usage : ./evaluer.sh [fichier.c] [nom] # Ajoute une ligne au fichier resultats.csv : nom;ccn_max;temps_ms # (ccn_max vaut - si Lizard n'est pas installé : elle est alors vérifiée par l'enseignant) SRC=${1:-banque.c} NOM=${2:-$(whoami)} ATTENDU="ff68d260a7a58441" EXCLUS="alea|generer_transactions" # fonctions de génération, non modifiables gcc -O2 -o banque_eval "$SRC" || { echo "Erreur de compilation"; exit 1; } # 1. Empreinte EMPREINTE=$(./banque_eval | awk '/Empreinte/ {print $NF}') if [ "$EMPREINTE" != "$ATTENDU" ]; then echo "Empreinte incorrecte : $EMPREINTE (attendu $ATTENDU). Solution refusée." exit 1 fi echo "Empreinte correcte" # 2. Temps d'exécution : médiane de 5 exécutions, en millisecondes TEMPS=$(for i in 1 2 3 4 5; do debut=$(date +%s%N); ./banque_eval > /dev/null; fin=$(date +%s%N) echo $(( (fin - debut) / 1000000 )) done | sort -n | sed -n 3p) echo "Temps (médiane de 5) : $TEMPS ms" # 3. Complexité cyclomatique maximale (optionnel : seulement si Lizard est installé) if command -v lizard > /dev/null; then CCN=$(lizard --csv "$SRC" 2>/dev/null | awk -F, -v ex="^\"($EXCLUS)\"$" '$8 !~ ex {if ($2 > m) m = $2} END {print m}') echo "Complexité cyclomatique max : $CCN" else CCN="-" echo "Complexité cyclomatique : vérifiée par l'enseignant" fi echo "$NOM;$CCN;$TEMPS" >> resultats.csv echo "Ligne ajoutée à resultats.csv : $NOM;$CCN;$TEMPS" rm -f banque_eval