let ligneX n = for i = 1 to n do print_char `X` done ; print_newline () let _ = ligneX 3 let triangleX n = for i = 1 to n do for j = 1 to i do print_char `X` done ; print_newline () done let _ = triangleX 3 let retourne s = let n = string_length s -1 in for i = 0 to n/2 do let temp = s.[i] in s.[i] <- s.[n-i] ; s.[n-i] <- temp done let a = "maman" in retourne a ; print_string a let maximum tb = let max = ref tb.(0) in for i = 1 to vect_length tb -1 do if !max < tb.(i) then max := tb.(i) done; !max let c = maximum [|5;2;3;5;4;6;6;12;12;3;1|] let maximum tb = let ind = ref 0 in for i = 1 to vect_length tb -1 do if tb.(!ind) < tb.(i) then ind := i done; !ind let c =maximum [|5;6;45;1;12;3;12;01;2|] let tri tb = let modif = ref true in while !modif do modif := false ; for i = 0 to vect_length tb -2 do if tb.(i) > tb.(i+1) then let temp = tb.(i) in tb.(i) <- tb.(i+1) ; tb.(i+1) <- temp ; modif := true done done let a = [|5;2;1;2;3;4;52;4;15;12;2;1;2;42|] in tri a ; a let resoudre g = let peut_poser x y c = let peut = ref true in for i = 0 to 8 do if g.(x).(i) = c || g.(i).(y) =c then peut := false done; for nx = (x/3)*3 to (x/3)*3+2 do for ny = (y/3)*3 to (y/3)*3+2 do if g.(nx).(ny) = c then peut := false done done; !peut in let rec foo (x,y) = if y > 8 then foo (x+1,0) else if (x,y) = (9,0) then begin for x = 0 to 8 do for y = 0 to 8 do print_int g.(x).(y) done ; print_newline () ; done; failwith "trouve" end else if g.(x).(y) = 0 then for c = 1 to 9 do if peut_poser x y c then (g.(x).(y) <- c ; foo (x,y+1) ; g.(x).(y) <- 0) done else foo (x,y+1) in foo (0,0) let c = let g = [| [|1;0;0; 0;0;7; 0;9;0|]; [|0;3;0; 0;2;0; 0;0;8|]; [|0;0;9; 6;0;0; 5;0;0|]; [|0;0;5; 3;0;0; 9;0;0|]; [|0;1;0; 0;8;0; 0;0;2|]; [|6;0;0; 0;0;4; 0;0;0|]; [|3;0;0; 0;0;0; 0;1;0|]; [|0;4;0; 0;0;0; 0;0;7|]; [|0;0;7; 0;0;0; 3;0;0|]; |] in resous g let huit_dame ()= let g = make_matrix 24 24 0 in let aff = let s = make_string 72 ` ` in for i = 0 to 7 do s.[i*9+8] <- `\n` done; s in let affiche = let r = ref 0 in fun () -> incr r;print_int !r ;print_newline();print_string aff; print_newline() in let pose x y v = for i = -7 to 7 do g.(x).(y+i) <- g.(x).(y+i)+ v ; g.(x+i).(y) <-g.(x+i).(y)+ v ; g.(x+i).(y+i) <-g.(x+i).(y+i)+v ; g.(x+i).(y-i) <- g.(x+i).(y-i)+ v done ; if v > 0 then aff.[(x-8)*9+y-8]<- `*` else aff.[(x-8)*9+y-8]<- ` ` in let rec foo y = if y > 15 then affiche () else for x = 8 to 15 do if g.(x).(y) = 0 then ( pose x y 1 ; foo (y+1) ; pose x y (-1)) done in foo 8 let _ = huit_dame ()