Trouver la n eme permutation lexicographique des elements d'une liste

Contenu du snippet

(*factorielle*)
let fact n =
    let rec f acc = function
        | 0 -> acc
        | n -> f (n*acc) (n-1)
    in f 1 n;;
(*trouve la nth eme permutation des elements de la liste li, constituee de nbr elements*)
let rec perm nth nbr li=
    let rec f nth nbr li = function
        | [] -> li
        |hd::lt ->
        let fnbr=fact (nbr -1)
        in if nth < fnbr then
            hd:: (perm nth (nbr-1) (List.filter (fun x -> x <> hd) li))
        else
            f (nth - fnbr) nbr li lt
    in f nth nbr li li;;
perm 999999 10 [0;1;2;3;4;5;6;7;8;9];;

Compatibilité : ObjectiveCaml

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.