Solution pour $k=11$ :

let sol = [|[|6; 5; 0; 0; 3; 7; 1|];
            [|0; 6; 5; 0; 7; 0; 8|];
            [|8; 0; 4; 3; 1; 2; 0|];
            [|3; 6; 0; 0; 2; 4; 7|];
            [|0; 4; 0; 5; 4; 1; 0|];
            [|3; 1; 6; 0; 0; 2; 8|];
            [|8; 0; 5; 0; 7; 2; 0|]|];;

Pour afficher une grille d'entiers :

let disp tab =
  for i=0 to Array.length tab - 1 do
    Array.iter (fun i -> print_int i; print_string " ") tab.(i);
    print_newline ()
  done;;

Problème de type suguru :

let grp = [|[|0; 1; 2; 2; 2; 3; 3|];
            [|0; 1; 2; 2; 4; 3; 3|];
            [|0; 1; 1; 1; 4; 3; 3|];
            [|0; 0; 1; 1; 4; 5; 3|];
            [|0; 6; 6; 6; 5; 5; 7|];
            [|8; 6; 6; 5; 5; 5; 7|];
            [|8; 8; 6; 6; 9; 5; 10|];
            [|8; 8; 11; 11; 11; 11; 10|];
            [|12; 12; 11; 11; 11; 10; 10|]|];;

let ind = [|[|3; 0; 0; 0; 0; 2; 0|];
            [|4; 1; 0; 5; 0; 0; 7|];
            [|0; 0; 7; 0; 0; 6; 0|];
            [|2; 1; 0; 4; 0; 0; 5|];
            [|0; 7; 0; 0; 0; 7; 1|];
            [|0; 6; 0; 0; 0; 0; 0|];
            [|3; 0; 0; 0; 0; 0; 3|];
            [|0; 0; 0; 3; 0; 0; 0|];
            [|0; 0; 0; 6; 0; 2; 0|]|];;