{-# LANGUAGE NoImplicitPrelude, BangPatterns #-}
{-# OPTIONS_HADDOCK show-extensions #-}
module Rhythmicity.MarkerSeqs where
import GHC.Num
import GHC.Real
import GHC.Base
import Data.List hiding (foldr)
import GHC.Show
import Data.Bits
import Numeric (showIntAtBase,showInt)
import Data.Foldable (Foldable)
import GHC.Int
import Data.Char (isDigit)
import Data.Maybe (mapMaybe, catMaybes)
import Rhythmicity.BasicF
import Text.Read
import GHC.Enum (fromEnum)
import GHC.Arr (listArray,unsafeAt)
showBin :: Int -> [Char]
showBin :: Int -> [Char]
showBin Int
x = Char
'0'forall a. a -> [a] -> [a]
:Char
'b'forall a. a -> [a] -> [a]
:forall a. (Integral a, Show a) => a -> (Int -> Char) -> a -> ShowS
showIntAtBase Int
2 (forall a. [a] -> a
head forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b c. (a -> b -> c) -> b -> a -> c
flip forall a. Integral a => a -> ShowS
showInt [Char]
"") Int
x [Char]
""
{-# INLINE showBin #-}
unionCount :: (Bits a) => a -> a -> Integer
unionCount :: forall a. Bits a => a -> a -> Integer
unionCount a
x = forall a. Integral a => a -> Integer
toInteger forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Bits a => a -> Int
popCount forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Bits a => a -> a -> a
(.&.) a
x
{-# INLINE unionCount #-}
countWeightsQs :: (Foldable t) => [t a -> Int] -> [t a] -> [[Int]]
countWeightsQs :: forall (t :: * -> *) a.
Foldable t =>
[t a -> Int] -> [t a] -> [[Int]]
countWeightsQs [t a -> Int]
fs [t a]
xs = forall a b. (a -> b) -> [a] -> [b]
map (forall a b c. (a -> b -> c) -> b -> a -> c
flip forall a b. (a -> b) -> [a] -> [b]
map [t a]
xs) [t a -> Int]
fs
data Sort2 a = S2 {
forall a. Sort2 a -> Int8
id :: Int8,
forall a. Sort2 a -> a
val :: a
}
instance Eq a => Eq (Sort2 a) where
S2 Int8
_ a
x == :: Sort2 a -> Sort2 a -> Bool
== S2 Int8
_ a
y = a
x forall a. Eq a => a -> a -> Bool
== a
y
instance Ord a => Ord (Sort2 a) where
compare :: Sort2 a -> Sort2 a -> Ordering
compare (S2 Int8
_ a
x) (S2 Int8
_ a
y) = forall a. Ord a => a -> a -> Ordering
compare a
y a
x
S2 Int8
_ a
x > :: Sort2 a -> Sort2 a -> Bool
> S2 Int8
_ a
y = a
x forall a. Ord a => a -> a -> Bool
< a
y
S2 Int8
_ a
x < :: Sort2 a -> Sort2 a -> Bool
< S2 Int8
_ a
y = a
x forall a. Ord a => a -> a -> Bool
> a
y
S2 Int8
_ a
x >= :: Sort2 a -> Sort2 a -> Bool
>= S2 Int8
_ a
y = a
x forall a. Ord a => a -> a -> Bool
<= a
y
S2 Int8
_ a
x <= :: Sort2 a -> Sort2 a -> Bool
<= S2 Int8
_ a
y = a
x forall a. Ord a => a -> a -> Bool
>= a
y
instance Functor Sort2 where
fmap :: forall a b. (a -> b) -> Sort2 a -> Sort2 b
fmap a -> b
f (S2 Int8
k a
x) = forall a. Int8 -> a -> Sort2 a
S2 Int8
k forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> b
f forall a b. (a -> b) -> a -> b
$ a
x
instance Show a => Show (Sort2 a) where
show :: Sort2 a -> [Char]
show (S2 Int8
k a
x) = forall a. Show a => a -> [Char]
show Int8
k forall a. [a] -> [a] -> [a]
++ Char
'~'forall a. a -> [a] -> [a]
:forall a. Show a => a -> [Char]
show a
x
data ASort3 a = As3 {
forall a. ASort3 a -> Int8
id3 :: Int8,
forall a. ASort3 a -> Int8
orD :: Int8,
forall a. ASort3 a -> a
val3 :: a
}
instance Eq a => Eq (ASort3 a) where
As3 Int8
_ Int8
_ a
x == :: ASort3 a -> ASort3 a -> Bool
== As3 Int8
_ Int8
_ a
y = a
x forall a. Eq a => a -> a -> Bool
== a
y
instance Show a => Show (ASort3 a) where
show :: ASort3 a -> [Char]
show (As3 Int8
n Int8
k a
x) = forall a. Show a => a -> [Char]
show Int8
n forall a. [a] -> [a] -> [a]
++ Char
'&'forall a. a -> [a] -> [a]
:forall a. Show a => a -> [Char]
show Int8
k forall a. [a] -> [a] -> [a]
++ Char
'~'forall a. a -> [a] -> [a]
:forall a. Show a => a -> [Char]
show a
x
splitF :: Int -> [a] -> [[a]]
splitF :: forall a. Int -> [a] -> [[a]]
splitF Int
n [a]
ys = let q :: Int
q = forall (t :: * -> *) a. Foldable t => t a -> Int
length [a]
ys forall a. Integral a => a -> a -> a
`quot` Int
n in forall a. Int -> [a] -> [a]
take Int
q forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall {t} {a}. (t -> (a, t)) -> t -> [a]
g (forall a. Int -> [a] -> ([a], [a])
splitAt Int
n) forall a b. (a -> b) -> a -> b
$ [a]
ys
where {-# INLINE g #-}
g :: (t -> (a, t)) -> t -> [a]
g t -> (a, t)
f t
b0 = forall a. (forall b. (a -> b -> b) -> b -> b) -> [a]
build (\a -> b -> b
c b
n ->
let go :: t -> b
go t
b = case t -> (a, t)
f t
b of
(a
a, t
new_b) -> a
a a -> b -> b
`c` t -> b
go t
new_b in t -> b
go t
b0)
getHashes2
:: Ord a => Int8
-> [Int8]
-> [a]
-> [[Integer]]
getHashes2 :: forall a. Ord a => Int8 -> [Int8] -> [a] -> [[Integer]]
getHashes2 Int8
selmarkNum [Int8]
ks [a]
xs = forall a b. (a -> b) -> [a] -> [b]
map (forall a b. (a -> b) -> [a] -> [b]
map [Int8] -> Integer
toNum forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. (a -> Bool) -> [a] -> [a]
filter (Bool -> Bool
not forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (t :: * -> *) a. Foldable t => t a -> Bool
null) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (a -> b) -> [a] -> [b]
map (forall a. Eq a => [Int8] -> [ASort3 a] -> [Int8]
idList [Int8]
ks) forall b c a. (b -> c) -> (a -> b) -> a -> c
.
forall {a}. Eq a => [Int8] -> [Sort2 a] -> [[ASort3 a]]
g [Int8
selmarkNumforall a. Num a => a -> a -> a
-Int8
1,Int8
selmarkNumforall a. Num a => a -> a -> a
-Int8
2..] forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Ord a => [a] -> [a]
sort forall b c a. (b -> c) -> (a -> b) -> a -> c
.
forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith forall a. Int8 -> a -> Sort2 a
S2 [Int8
selmarkNumforall a. Num a => a -> a -> a
-Int8
1,Int8
selmarkNumforall a. Num a => a -> a -> a
-Int8
2..]) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Int -> [a] -> [[a]]
splitF (forall a b. (Integral a, Num b) => a -> b
fromIntegral Int8
selmarkNum) forall a b. (a -> b) -> a -> b
$ [a]
xs
where g :: [Int8] -> [Sort2 a] -> [[ASort3 a]]
g (Int8
q:[Int8]
qs) xs :: [Sort2 a]
xs@(Sort2 a
x:[Sort2 a]
ys) = let ([Sort2 a]
js,[Sort2 a]
rs) = forall a. (a -> Bool) -> [a] -> ([a], [a])
span (forall a. Eq a => a -> a -> Bool
== Sort2 a
x) [Sort2 a]
ys in forall a b. (a -> b) -> [a] -> [b]
map (\(S2 Int8
k a
y) -> forall a. Int8 -> Int8 -> a -> ASort3 a
As3 Int8
k Int8
q a
y) (Sort2 a
xforall a. a -> [a] -> [a]
:[Sort2 a]
js) forall a. a -> [a] -> [a]
: [Int8] -> [Sort2 a] -> [[ASort3 a]]
g [Int8]
qs [Sort2 a]
rs
g [Int8]
_ [Sort2 a]
_ = []
countHashesPrioritized :: [[b]] -> [[Integer]]
countHashesPrioritized tss :: [[b]]
tss@([b]
ts:[b]
vs:[[b]]
xss) = forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith forall a. Bits a => a -> a -> Integer
unionCount [b]
ts [b]
vs forall a. a -> [a] -> [a]
: [[b]] -> [[Integer]]
countHashesPrioritized ([b]
vsforall a. a -> [a] -> [a]
:[[b]]
xss)
countHashesPrioritized [[b]]
_ = []
count1Hashes
:: Ord a => Int8
-> [Int8]
-> [a]
-> Integer
count1Hashes :: forall a. Ord a => Int8 -> [Int8] -> [a] -> Integer
count1Hashes Int8
groupLength [Int8]
ks = forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a
sum forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (a -> b) -> [a] -> [b]
map [Integer] -> Integer
createNewHash forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall {b}. Bits b => [[b]] -> [[Integer]]
countHashesPrioritized forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Ord a => Int8 -> [Int8] -> [a] -> [[Integer]]
getHashes2 Int8
groupLength [Int8]
ws
where !ws :: [Int8]
ws = forall b a. Ord b => (a -> b) -> [a] -> [a]
sortOn (forall a. Num a => a -> a -> a
*(-Int8
1)) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. (a -> Bool) -> [a] -> [a]
filter (forall a. Ord a => a -> a -> Bool
>= Int8
0) forall a b. (a -> b) -> a -> b
$ [Int8]
ks
{-# INLINE count1Hashes #-}
data HashCorrections = H [Int8] Int8 deriving (HashCorrections -> HashCorrections -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: HashCorrections -> HashCorrections -> Bool
$c/= :: HashCorrections -> HashCorrections -> Bool
== :: HashCorrections -> HashCorrections -> Bool
$c== :: HashCorrections -> HashCorrections -> Bool
Eq, Int -> HashCorrections -> ShowS
[HashCorrections] -> ShowS
HashCorrections -> [Char]
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
showList :: [HashCorrections] -> ShowS
$cshowList :: [HashCorrections] -> ShowS
show :: HashCorrections -> [Char]
$cshow :: HashCorrections -> [Char]
showsPrec :: Int -> HashCorrections -> ShowS
$cshowsPrec :: Int -> HashCorrections -> ShowS
Show)
hashCorrections2F :: HashCorrections -> (Int8 -> [Integer] -> Integer)
hashCorrections2F :: HashCorrections -> Int8 -> [Integer] -> Integer
hashCorrections2F (H [Int8]
_ Int8
k)
| Int8
k forall a. Ord a => a -> a -> Bool
> Int8
0 = Int8 -> [Integer] -> Integer
hashPosLF2
| Int8
k forall a. Eq a => a -> a -> Bool
== Int8
0 = Int8 -> [Integer] -> Integer
hashBalancingLF2
| Bool
otherwise = Int8 -> [Integer] -> Integer
hashBasicLF2
{-# INLINE hashCorrections2F #-}
hashList :: HashCorrections -> [Int8]
hashList :: HashCorrections -> [Int8]
hashList (H [Int8]
_ Int8
1) = [Int8
24,Int8
23..]
hashList (H [Int8]
_ Int8
2) = [Int8
1..Int8
21] forall a. Monoid a => a -> a -> a
`mappend` forall a. [a] -> [a]
cycle [Int8
0]
hashList (H [Int8]
xs Int8
_) = [Int8]
xs forall a. Monoid a => a -> a -> a
`mappend` forall a. [a] -> [a]
cycle [Int8
0]
{-# INLINE hashList #-}
readHashCorrections :: String -> HashCorrections
readHashCorrections :: [Char] -> HashCorrections
readHashCorrections [Char]
xs = if forall (t :: * -> *) a. Foldable t => t a -> Int
length [Char]
ys forall a. Ord a => a -> a -> Bool
> Int
1 then let ([Char]
ts,[Char]
us) = forall a. Int -> [a] -> ([a], [a])
splitAt Int
1 [Char]
ys in [Int8] -> Int8 -> HashCorrections
H (forall a b. (a -> b) -> [a] -> [b]
map (\Char
x -> forall a. Read a => [Char] -> a
read [Char
x]::Int8) [Char]
us) (if Bool
sgn then (-(forall a. Read a => [Char] -> a
read [Char]
ts::Int8)) else (forall a. Read a => [Char] -> a
read [Char]
ts::Int8)) else [Int8] -> Int8 -> HashCorrections
H [Int8
0,Int8
0..] Int8
0
where ys :: [Char]
ys = forall a. (a -> Bool) -> [a] -> [a]
filter (\Char
x -> Char -> Bool
isDigit Char
x) [Char]
xs
sgn :: Bool
sgn = forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
any (forall a. Eq a => a -> a -> Bool
== Char
'-') [Char]
xs
grouppingR :: String -> (Int8, [Int8])
grouppingR :: [Char] -> (Int8, [Int8])
grouppingR [Char]
xs = if forall (t :: * -> *) a. Foldable t => t a -> Int
length [Char]
ys forall a. Ord a => a -> a -> Bool
> Int
1 then let ([Char]
ts,[Char]
us) = forall a. Int -> [a] -> ([a], [a])
splitAt Int
1 [Char]
ys in (forall a. Read a => [Char] -> a
read [Char]
ts::Int8, forall a b. (a -> b) -> [a] -> [b]
map (\Char
x -> forall a. Read a => [Char] -> a
read [Char
x]::Int8) [Char]
us) else (Int8
4,[Int8
3,Int8
2])
where ys :: [Char]
ys = forall a. Int -> [a] -> [a]
take Int
8 forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. (a -> Bool) -> [a] -> [a]
filter (\Char
x -> Char -> Bool
isDigit Char
x) forall a b. (a -> b) -> a -> b
$ [Char]
xs
countHashesG
:: Ord a => HashCorrections
-> Int8
-> [Int8]
-> [a]
-> [Integer]
countHashesG :: forall a.
Ord a =>
HashCorrections -> Int8 -> [Int8] -> [a] -> [Integer]
countHashesG HashCorrections
hc Int8
groupLength [Int8]
ks =
forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith ((Int8 -> [Integer] -> Integer) -> Int8 -> [Integer] -> Integer
createHashG Int8 -> [Integer] -> Integer
f) [Int8]
positions forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall {b}. Bits b => [[b]] -> [[Integer]]
countHashesPrioritized forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Ord a => Int8 -> [Int8] -> [a] -> [[Integer]]
getHashes2 Int8
groupLength [Int8]
ws
where f :: Int8 -> [Integer] -> Integer
f = HashCorrections -> Int8 -> [Integer] -> Integer
hashCorrections2F HashCorrections
hc
positions :: [Int8]
positions = HashCorrections -> [Int8]
hashList HashCorrections
hc
!ws :: [Int8]
ws = forall b a. Ord b => (a -> b) -> [a] -> [a]
sortOn (forall a. Num a => a -> a -> a
*(-Int8
1)) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. (a -> Bool) -> [a] -> [a]
filter (forall a. Ord a => a -> a -> Bool
>= Int8
0) forall a b. (a -> b) -> a -> b
$ [Int8]
ks
{-# INLINE countHashesG #-}
countHashes2G
:: Ord a => Int
-> HashCorrections
-> Int8
-> [Int8]
-> [a]
-> [Integer]
countHashes2G :: forall a.
Ord a =>
Int -> HashCorrections -> Int8 -> [Int8] -> [a] -> [Integer]
countHashes2G Int
k HashCorrections
hc Int8
groupLength [Int8]
ks =
forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith (Int -> HashCorrections -> Int8 -> [Integer] -> Integer
createHash2G Int
k HashCorrections
hc) [Int8]
positions forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall {b}. Bits b => [[b]] -> [[Integer]]
countHashesPrioritized forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Ord a => Int8 -> [Int8] -> [a] -> [[Integer]]
getHashes2 Int8
groupLength [Int8]
ws
where positions :: [Int8]
positions = HashCorrections -> [Int8]
hashList HashCorrections
hc
!ws :: [Int8]
ws = forall b a. Ord b => (a -> b) -> [a] -> [a]
sortOn (forall a. Num a => a -> a -> a
*(-Int8
1)) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. (a -> Bool) -> [a] -> [a]
filter (forall a. Ord a => a -> a -> Bool
>= Int8
0) forall a b. (a -> b) -> a -> b
$ [Int8]
ks
{-# INLINE countHashes2G #-}
createNewHash :: [Integer] -> Integer
createNewHash :: [Integer] -> Integer
createNewHash (Integer
x1:Integer
x2:Integer
x3:Integer
x4:Integer
x5:Integer
x6:Integer
x7:[Integer]
_) = forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a
sum [forall a. Bits a => a -> Int -> a
shiftL Integer
x1 Int
120, forall a. Bits a => a -> Int -> a
shiftL Integer
x2 Int
100, forall a. Bits a => a -> Int -> a
shiftL Integer
x3 Int
80, forall a. Bits a => a -> Int -> a
shiftL Integer
x4 Int
60, forall a. Bits a => a -> Int -> a
shiftL Integer
x5 Int
40, forall a. Bits a => a -> Int -> a
shiftL Integer
x6 Int
20, Integer
x7]
createNewHash (Integer
x1:Integer
x2:Integer
x3:Integer
x4:Integer
x5:Integer
x6:[Integer]
_) = forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a
sum [forall a. Bits a => a -> Int -> a
shiftL Integer
x1 Int
120, forall a. Bits a => a -> Int -> a
shiftL Integer
x2 Int
100, forall a. Bits a => a -> Int -> a
shiftL Integer
x3 Int
80, forall a. Bits a => a -> Int -> a
shiftL Integer
x4 Int
60, forall a. Bits a => a -> Int -> a
shiftL Integer
x5 Int
40, forall a. Bits a => a -> Int -> a
shiftL Integer
x6 Int
20]
createNewHash (Integer
x1:Integer
x2:Integer
x3:Integer
x4:Integer
x5:[Integer]
_) = forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a
sum [forall a. Bits a => a -> Int -> a
shiftL Integer
x1 Int
120, forall a. Bits a => a -> Int -> a
shiftL Integer
x2 Int
100, forall a. Bits a => a -> Int -> a
shiftL Integer
x3 Int
80, forall a. Bits a => a -> Int -> a
shiftL Integer
x4 Int
60, forall a. Bits a => a -> Int -> a
shiftL Integer
x5 Int
40]
createNewHash (Integer
x1:Integer
x2:Integer
x3:Integer
x4:[Integer]
_) = forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a
sum [forall a. Bits a => a -> Int -> a
shiftL Integer
x1 Int
120, forall a. Bits a => a -> Int -> a
shiftL Integer
x2 Int
100, forall a. Bits a => a -> Int -> a
shiftL Integer
x3 Int
80, forall a. Bits a => a -> Int -> a
shiftL Integer
x4 Int
60]
createNewHash (Integer
x1:Integer
x2:Integer
x3:[Integer]
_) = forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a
sum [forall a. Bits a => a -> Int -> a
shiftL Integer
x1 Int
120, forall a. Bits a => a -> Int -> a
shiftL Integer
x2 Int
100, forall a. Bits a => a -> Int -> a
shiftL Integer
x3 Int
80]
createNewHash (Integer
x1:Integer
x2:[Integer]
_) = forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a
sum [forall a. Bits a => a -> Int -> a
shiftL Integer
x1 Int
120, forall a. Bits a => a -> Int -> a
shiftL Integer
x2 Int
100]
createNewHash (Integer
x1:[Integer]
_) = forall a. Bits a => a -> Int -> a
shiftL Integer
x1 Int
120
createNewHash [Integer]
_ = Integer
0
createHashG :: (Int8 -> [Integer] -> Integer) -> Int8 -> [Integer] -> Integer
createHashG :: (Int8 -> [Integer] -> Integer) -> Int8 -> [Integer] -> Integer
createHashG Int8 -> [Integer] -> Integer
f Int8
pos = Int8 -> [Integer] -> Integer
f Int8
pos forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith (\Int
n Integer
x -> forall a. Bits a => a -> Int -> a
shift Integer
x (Int
nforall a. Num a => a -> a -> a
*Int
20)) [Int
6,Int
5..Int
0]
{-# INLINE createHashG #-}
createHash2G :: Int -> HashCorrections -> Int8 -> [Integer] -> Integer
createHash2G :: Int -> HashCorrections -> Int8 -> [Integer] -> Integer
createHash2G Int
k hc :: HashCorrections
hc@(H [Int8]
_ Int8
0) Int8
pos = (Int -> Int8 -> [Integer] -> Integer
hashBalancingLF2G Int
k) Int8
pos forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith (\Int
n Integer
x -> forall a. Bits a => a -> Int -> a
shift Integer
x (Int
nforall a. Num a => a -> a -> a
*Int
k)) [Int
6,Int
5..Int
0]
createHash2G Int
k (H [Int8]
_ Int8
m) Int8
pos = (if Int8
m forall a. Ord a => a -> a -> Bool
> Int8
0 then Int8 -> [Integer] -> Integer
hashPosLF2 else Int8 -> [Integer] -> Integer
hashBasicLF2) Int8
pos forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith (\Int
n Integer
x -> forall a. Bits a => a -> Int -> a
shift Integer
x (Int
nforall a. Num a => a -> a -> a
*Int
k)) [Int
6,Int
5..Int
0]
{-# INLINE createHash2G #-}
createNHash :: [Int8] -> [Integer] -> Integer
createNHash :: [Int8] -> [Integer] -> Integer
createNHash [Int8]
_ = [Integer] -> Integer
createNewHash forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Int -> [a] -> [a]
take Int
7
{-# INLINE createNHash #-}
idList :: Eq a => [Int8] -> [ASort3 a] -> [Int8]
idList :: forall a. Eq a => [Int8] -> [ASort3 a] -> [Int8]
idList [Int8]
orDs [ASort3 a]
ys = forall a b. (a -> b) -> [a] -> [b]
map (\(As3 Int8
k Int8
_ a
_) -> Int8
k) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. (a -> Bool) -> [a] -> [a]
filter (\(As3 Int8
_ Int8
n a
_) -> Int8
n forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` [Int8]
orDs) forall a b. (a -> b) -> a -> b
$ [ASort3 a]
ys
toNum :: [Int8] -> Integer
toNum :: [Int8] -> Integer
toNum [Int8]
xs = forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl' forall a. Bits a => a -> Int -> a
setBit Integer
0 forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (a -> b) -> [a] -> [b]
map forall a. Enum a => a -> Int
fromEnum forall a b. (a -> b) -> a -> b
$ [Int8]
xs
toNum2 :: [Int8] -> Integer
toNum2 :: [Int8] -> Integer
toNum2 [Int8]
xs = (forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a
sum forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (a -> b) -> [a] -> [b]
map (forall a. Bits a => a -> Int -> a
shiftL Integer
1 forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Enum a => a -> Int
fromEnum) forall a b. (a -> b) -> a -> b
$ [Int8]
xs)::Integer
showZerosFor2Period
:: (Ord a) => [[a]]
-> Int
-> (b -> String)
-> [[[b]]]
-> (String, [Integer])
showZerosFor2Period :: forall a b.
Ord a =>
[[a]] -> Int -> (b -> [Char]) -> [[[b]]] -> ([Char], [Integer])
showZerosFor2Period [[a]]
structData Int
syllN b -> [Char]
f [[[b]]]
sylls = ([Char]
breaks, [Integer]
rs)
where rs :: [Integer]
rs = forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall {b}. Bits b => [[b]] -> [[Integer]]
countHashesPrioritized forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Ord a => Int8 -> [Int8] -> [a] -> [[Integer]]
getHashes2 Int8
2 [Int8
1] forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Monoid a => [a] -> a
mconcat forall a b. (a -> b) -> a -> b
$ [[a]]
structData
indeces :: [Int]
indeces = forall a. (a -> Bool) -> [a] -> [Int]
findIndices (forall a. Eq a => a -> a -> Bool
== Integer
0) [Integer]
rs
resSylls :: Array Int [Char]
resSylls = forall i e. Ix i => (i, i) -> [e] -> Array i e
listArray (Int
0,Int
syllN forall a. Num a => a -> a -> a
- Int
1) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (a -> b) -> [a] -> [b]
map (forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b]
concatMap b -> [Char]
f) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat forall a b. (a -> b) -> a -> b
$ [[[b]]]
sylls
addlist :: [[Int]]
addlist
| Int
syllN forall a. Integral a => a -> a -> a
`rem` Int
2 forall a. Eq a => a -> a -> Bool
== Int
0 = [Int
0,Int
1,Int
2] forall a. a -> [a] -> [a]
: ((forall a. Int -> [a] -> [[a]]
splitF Int
2 forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Int -> [a] -> [a]
take (Int
syllN forall a. Num a => a -> a -> a
- Int
6) forall a b. (a -> b) -> a -> b
$ [Int
3,Int
4..]) forall a. Monoid a => a -> a -> a
`mappend` [[Int
syllN forall a. Num a => a -> a -> a
- Int
3, Int
syllN forall a. Num a => a -> a -> a
- Int
2, Int
syllN forall a. Num a => a -> a -> a
- Int
1]])
| Bool
otherwise = [Int
0,Int
1,Int
2] forall a. a -> [a] -> [a]
: (forall a. Int -> [a] -> [[a]]
splitF Int
2 forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Int -> [a] -> [a]
take (Int
syllN forall a. Num a => a -> a -> a
- Int
3) forall a b. (a -> b) -> a -> b
$ [Int
3,Int
4..])
arrinds :: Array Int [Int]
arrinds = forall i e. Ix i => (i, i) -> [e] -> Array i e
listArray (Int
0,Int
syllN forall a. Integral a => a -> a -> a
`quot` Int
2) [[Int]]
addlist
neededinds :: [[Int]]
neededinds = forall a b. (a -> b) -> [a] -> [b]
map (forall i e. Array i e -> Int -> e
unsafeAt Array Int [Int]
arrinds) [Int]
indeces
neededsylls :: [[[Char]]]
neededsylls = forall a b. (a -> b) -> [a] -> [b]
map (forall a b. (a -> b) -> [a] -> [b]
map (forall i e. Array i e -> Int -> e
unsafeAt Array Int [Char]
resSylls)) [[Int]]
neededinds
breaks :: [Char]
breaks = forall a. [a] -> [[a]] -> [a]
intercalate [Char]
" ... " forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (a -> b) -> [a] -> [b]
map [[Char]] -> [Char]
unwords forall a b. (a -> b) -> a -> b
$ [[[Char]]]
neededsylls