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

correction:la roue ne reviens pas toute seule à son état initial

parent 0bf613e4
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
CC=ocamlc
CC=ocamlopt
FLAGS=
all: main.out
......
Aucun aperçu pour ce type de fichier
Fichier ajouté
Aucun aperçu pour ce type de fichier
Fichier ajouté
......@@ -33,27 +33,47 @@ print_elt 1 (parse_input());;*)
(*définition de la roue*)
let roue = ' '::'A'::'B'::'C'::'D'::'E'::'F'::'G'::'H'::'I'::'J'::'K'::'L'::'M'::'N'::'O'::'P'::'Q'::'R'::'S'::'T'::'U'::'V'::'W'::'X'::'Y'::'Z'::[];;
(*[translate c] traduit le charactère c en sa commande
* la limite d'optimalité pour choisir entre P et N est le charactère 'M' qui demande 13N et 14P*)
(*[first_to_last c n roue] tourne la roue n fois vers la gauche si c='N' et vers la droite si c='P'*)
exception RoueVide;;
let rec tourner c n roue =
if n = 0 then roue
else match roue with
|[] -> raise RoueVide
|e::l -> if c='N' then (tourner 'N' (n-1) (List.concat (l::(e::[])::[])))
else if c='P' then List.rev (tourner 'N' n (List.rev roue))
else roue;;
(*[char_to_index i a r] cherche récursivement l'indice du charactère a dans la roue r*)
exception BadCharacter of char;;
let translate c =
(*[char_to_index i a r] cherche récursivement l'indice du charactère a dans la roue r*)
let rec char_to_index i a r=
match r with
| [] -> raise (BadCharacter a)
| e::l -> if a == e then i
else char_to_index (i+1) a l
in
let n = char_to_index 0 c roue in
if (n < 14) then String.concat "" ((String.make n 'N')::"E"::[])
else String.concat "" ((String.make (27-n) 'P')::"E"::[]);;
(*[commande (i,l)] prend le résultat de l'input et renvoie la commande complète associée'*)
(*let commande (i,l) = List.fold_left (fun acc e -> (String.concat "" (acc::(translate e)::[]))) [] l;;*)
let rec char_to_index i a r=
match r with
| [] -> raise (BadCharacter a)
| e::l -> if a = e then i
else char_to_index (i+1) a l;;
(*[translate c roue] traduit le charactère c en sa commande en fonction de la roue 'roue'
* la limite d'optimalité pour choisir entre P et N est le charactère 'M' qui demande 13N et 14P*)
let translate c roue =
let n = char_to_index 0 c roue in
if (n < 14) then String.concat "" ((String.make n 'N')::"E"::[]),n
else String.concat "" ((String.make (27-n) 'P')::"E"::[]),(27-n);;
(*[commande (i,l) roue] prend le résultat de l'input et renvoie la commande complète associée'*)
exception InputVide;;
let rec commande (i,l) = match l with
let rec commande (i,l) roue = match l with
| [] -> ""
| e::r -> String.concat "" ((translate e)::(commande (i,r))::[]);;
| e::r -> let (c,n) = translate e roue in
String.concat "" (c::(commande (i,r) (tourner c.[0] n roue))::[]);;
print_string (commande (parse_input()) roue);;
print_string (commande (parse_input()));;
let temps_lettre l =
if (l='N' || l='P') then 3
else if l='S' then 1
else if l='E' then 5
else 0;;
(*
let temps_commande c =
let liste = split_string c in
*)
Fichier ajouté
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