Skip to content
Extraits de code Groupes Projets
Valider 06eb852f rédigé par Loïc DUBARD's avatar Loïc DUBARD :speech_balloon:
Parcourir les fichiers

correction de la phase2 n donne le nombre d'antennes à utiliser

parent 51acd057
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
Aucun aperçu pour ce type de fichier
Aucun aperçu pour ce type de fichier
Aucun aperçu pour ce type de fichier
......@@ -120,18 +120,20 @@ let rec make_liste_index l c = match l with
* @ensure : renvoi l'indice de la roue (dans la liste de roues l) avec laquelle il est plus rapide de traduire c
*)
let quelle_roue l c index_init =
let index = (char_to_index 0 c roue) in
let m = (if index < 14 then index else 27-index) in
let test = char_to_index 0 c (List.nth l index_init) in
let test_opt = (if test < 14 then test else 27-test) in
if (test_opt <= m) then index_init else
(*i doit être 0 lors du premier appel*)
let index = (char_to_index 0 c (List.nth l index_init)) in
let m = (if index < 14 then index else 27-index) in
(*
* i doit être 0 lors du premier appel
* m est le decalage (gauche ou droite) à faire pour trouver c
* r est la liste des décalages pour chaque roue
* n est l'indice du min des décalages de i0 à i
* *)
let rec index_min m n i r = match r with
| [] -> n
| e::t -> if e < 14 then (if e < m then (index_min e i (i+1) t) else index_min m n (i+1) t)
else (if 27-e < m then (index_min (27-e) i (i+1) t) else index_min m n (i+1) t)
in
index_min m (List.length l) 0 (make_liste_index l c);;
index_min m index_init 0 (make_liste_index l c);;
(*
......@@ -144,21 +146,31 @@ let rec tourner_list c n i l =
| e::t -> if i = 0 then (List.append ((tourner c n e)::[]) t)
else (List.append (e::[]) (tourner_list c n (i-1) t));;
(*
* initialise une liste de taille n entièrement remplie avec un élément a
*)
let rec initialize_list n a = if n = 1 then [a] else if n = 0 then [] else a::(initialize_list (n-1) a);;
(*
* @ensure : traduit le message l en commande en selectionnant pour chaque lettre la bonne antenne
*)
let rec commande_phase2 (i,l) liste_roues index_init = match l with
let commande (n,m) =
let rec commande_phase2 l liste_roues index_init = match l with
| [] -> ""
| e::t -> let index = quelle_roue liste_roues e index_init in
let r = (if index = (List.length liste_roues) then roue else (List.nth liste_roues index)) in
let (s,n) = translate e r in
let sres = (if index = index_init then s else (String.concat "" ("S"::(string_of_int index)::s::[])) ) in
let new_liste = tourner_list s.[0] n index liste_roues in
Printf.printf "%d\n" index;
String.concat "" (sres::(commande_phase2 (i,t) new_liste index)::[]);;
let r = (List.nth liste_roues index) in
let (s,i) = translate e r in
let sres = (if index = index_init then s else ("S"^(string_of_int index)^s)) in
let new_liste = tourner_list s.[0] i index liste_roues in
(*Printf.printf "%d\n" index;*)
sres^(commande_phase2 t new_liste index)
in
let liste = initialize_list n roue
in
commande_phase2 m liste 0;;
(*@ensure : test commande_phase 2*)
let com2 = commande_phase2 input liste_roues 0;;
let com2 = commande input;;
print_string com2;;
Printf.printf "\n %d s \n" (temps_commande com2);;
......
Aucun aperçu pour ce type de fichier
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter