-- | Calculs d’arrangements. module Htirage.Sequence where import Data.Bool import Data.Foldable (any, foldr) import Data.Functor ((<$>)) import Data.List (length) import Data.Ord (Ord(..)) import Prelude (Integral(..), Num(..), undefined) -- | @'nAk' n k@ retourne le nombre de combinaisons -- de longueur 'k' d’un ensemble de longueur 'n'. nAk :: Integral i => i -> i -> i n`nAk`k | n<0||k<0||n i -> i -> i -> [i] sequenceOfRank n k rk | rk<0||n`nAk`k x : ((\x' -> if x' >= x then x'+1 else x') <$> acc)) [] rankOfSequence :: Integral i => i -> [i] -> i rankOfSequence n ns | any (\x -> x<1||n if x < x' then x'-1 else x') <$> xs