{-# LANGUAGE MultiWayIf #-}
{-# LANGUAGE NoImplicitPrelude #-}
module Phladiprelio.PermutationsArrMini1 (
genElementaryPermutations1
, pairsSwapP1
, genElementaryPermutationsArrN1
, genElementaryPermutationsArr1
, genElementaryPermutationsLN1
, genElementaryPermutationsL1
, genElementaryPermutationsArrLN1
, genElementaryPermutationsArrL1
) where
import GHC.Base
import GHC.Arr
import GHC.List
import GHC.Num ((-), (+), abs)
genElementaryPermutations1 :: Int -> Array Int [Int]
genElementaryPermutations1 :: Int -> Array Int [Int]
genElementaryPermutations1 Int
n = forall i e. Ix i => (i, i) -> [e] -> Array i e
listArray (Int
0,Int
lforall a. Num a => a -> a -> a
-Int
1) [[Int]]
xs
where xs :: [[Int]]
xs = [Int] -> [[Int]]
pairsSwapP1 forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Int -> [a] -> [a]
take Int
n forall a b. (a -> b) -> a -> b
$ [Int
0..]
l :: Int
l = forall a. [a] -> Int
length [[Int]]
xs
{-# INLINE genElementaryPermutations1 #-}
pairsSwapP1 :: [Int] -> [[Int]]
[Int]
xs = [Int]
xsforall a. a -> [a] -> [a]
:[Int -> Int -> [Int] -> [Int]
swap2Ls1 Int
k Int
m [Int]
xs | Int
k <- [Int]
xs, Int
m <- [Int]
xs , forall a. Num a => a -> a
abs (Int
k forall a. Num a => a -> a -> a
- Int
m) forall a. Ord a => a -> a -> Bool
> Int
1] forall a. Monoid a => a -> a -> a
`mappend` [Int -> Int -> [Int] -> [Int]
swap2Ls1 Int
k (Int
k forall a. Num a => a -> a -> a
- Int
1) [Int]
xs | Int
k <- forall a. Int -> [a] -> [a]
drop Int
1 [Int]
xs ]
{-# INLINABLE pairsSwapP1 #-}
swap2ns1 :: Int -> Int -> Int -> Int
swap2ns1 :: Int -> Int -> Int -> Int
swap2ns1 Int
k Int
n Int
m
| Int
n forall a. Ord a => a -> a -> Bool
> Int
k =
if
| Int
m forall a. Ord a => a -> a -> Bool
< Int
k -> Int
m
| Int
m forall a. Ord a => a -> a -> Bool
> Int
n -> Int
m
| Int
m forall a. Ord a => a -> a -> Bool
< Int
n -> Int
m forall a. Num a => a -> a -> a
+ Int
1
| Bool
otherwise -> Int
k
| Bool
otherwise =
if
| Int
m forall a. Ord a => a -> a -> Bool
> Int
k -> Int
m
| Int
m forall a. Ord a => a -> a -> Bool
< Int
n -> Int
m
| Int
m forall a. Ord a => a -> a -> Bool
> Int
n -> Int
m forall a. Num a => a -> a -> a
- Int
1
| Bool
otherwise -> Int
k
{-# INLINE swap2ns1 #-}
swap2Ls1 :: Int -> Int -> [Int] -> [Int]
swap2Ls1 :: Int -> Int -> [Int] -> [Int]
swap2Ls1 Int
k Int
m = forall a b. (a -> b) -> [a] -> [b]
map (Int -> Int -> Int -> Int
swap2ns1 Int
k Int
m)
{-# INLINE swap2Ls1 #-}
genElementaryPermutationsArrN1 :: Int -> Array Int (Array Int [Int])
genElementaryPermutationsArrN1 :: Int -> Array Int (Array Int [Int])
genElementaryPermutationsArrN1 Int
n = forall a b i. (a -> b) -> Array i a -> Array i b
amap Int -> Array Int [Int]
genElementaryPermutations1 forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall i e. Ix i => (i, i) -> [e] -> Array i e
listArray (Int
0,Int
n forall a. Num a => a -> a -> a
- Int
2) forall a b. (a -> b) -> a -> b
$ [Int
2..Int
n]
{-# INLINE genElementaryPermutationsArrN1 #-}
genElementaryPermutationsArr1 :: Array Int (Array Int [Int])
genElementaryPermutationsArr1 :: Array Int (Array Int [Int])
genElementaryPermutationsArr1 = Int -> Array Int (Array Int [Int])
genElementaryPermutationsArrN1 Int
10
{-# INLINE genElementaryPermutationsArr1 #-}
genElementaryPermutationsLN1 :: Int -> [Array Int Int]
genElementaryPermutationsLN1 :: Int -> [Array Int Int]
genElementaryPermutationsLN1 Int
n = forall a b. (a -> b) -> [a] -> [b]
map (\[Int]
xs -> forall i e. Ix i => (i, i) -> [e] -> Array i e
listArray (Int
0,Int
n forall a. Num a => a -> a -> a
- Int
1) [Int]
xs) forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Int] -> [[Int]]
pairsSwapP1 forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Int -> [a] -> [a]
take Int
n forall a b. (a -> b) -> a -> b
$ [Int
0..]
{-# INLINE genElementaryPermutationsLN1 #-}
genElementaryPermutationsL1 :: [Array Int Int]
genElementaryPermutationsL1 :: [Array Int Int]
genElementaryPermutationsL1 = Int -> [Array Int Int]
genElementaryPermutationsLN1 Int
10
{-# INLINE genElementaryPermutationsL1 #-}
genElementaryPermutationsArrLN1 :: Int -> Array Int [Array Int Int]
genElementaryPermutationsArrLN1 :: Int -> Array Int [Array Int Int]
genElementaryPermutationsArrLN1 Int
n = forall a b i. (a -> b) -> Array i a -> Array i b
amap Int -> [Array Int Int]
genElementaryPermutationsLN1 forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall i e. Ix i => (i, i) -> [e] -> Array i e
listArray (Int
0,Int
n forall a. Num a => a -> a -> a
- Int
2) forall a b. (a -> b) -> a -> b
$ [Int
2..Int
n]
{-# INLINE genElementaryPermutationsArrLN1 #-}
genElementaryPermutationsArrL1 :: Array Int [Array Int Int]
genElementaryPermutationsArrL1 :: Array Int [Array Int Int]
genElementaryPermutationsArrL1 = Int -> Array Int [Array Int Int]
genElementaryPermutationsArrLN1 Int
10
{-# INLINE genElementaryPermutationsArrL1 #-}