{-# LANGUAGE BangPatterns, NoImplicitPrelude #-}
module Phladiprelio.RulesIntervals where
import GHC.Base
import GHC.Num ((+))
import GHC.Float (logBase)
import Data.Lists.FLines (newLineEnding)
import GHC.Real (ceiling, even)
import GHC.Float (int2Float)
import Data.Maybe (fromMaybe)
import Data.List (filter, words)
import Text.Read (readMaybe)
import Text.Show (show)
sturgesH :: Int -> Int
sturgesH :: Int -> Int
sturgesH Int
n
| forall a. Ord a => a -> a -> Ordering
compare Int
n Int
0 forall a. Eq a => a -> a -> Bool
== Ordering
GT = forall a b. (RealFrac a, Integral b) => a -> b
ceiling (forall a. Floating a => a -> a -> a
logBase Float
2 (Int -> Float
int2Float Int
n))
| Bool
otherwise = forall a. HasCallStack => [Char] -> a
error forall a b. (a -> b) -> a -> b
$ [Char]
"Phladiprelio.RulesIntervals.sturgesH: undefined for the argument " forall a. [a] -> [a] -> [a]
++ forall a. Show a => a -> [Char]
show Int
n forall a. [a] -> [a] -> [a]
++ [Char]
newLineEnding
{-# INLINE sturgesH #-}
levynskyiMod :: Int -> Int
levynskyiMod :: Int -> Int
levynskyiMod Int
n
| forall a. Ord a => a -> a -> Ordering
compare Int
n Int
100 forall a. Eq a => a -> a -> Bool
== Ordering
LT = forall {a} {a}. (Ord a, Num a, Num a) => a -> a
g Int
n
| forall a. Ord a => a -> a -> Ordering
compare Int
n Int
200 forall a. Eq a => a -> a -> Bool
== Ordering
LT = Int
11
| forall a. Ord a => a -> a -> Ordering
compare Int
n Int
300 forall a. Eq a => a -> a -> Bool
== Ordering
LT = Int
13
| forall a. Ord a => a -> a -> Ordering
compare Int
n Int
400 forall a. Eq a => a -> a -> Bool
== Ordering
LT = Int
15
| forall a. Ord a => a -> a -> Ordering
compare Int
n Int
500 forall a. Eq a => a -> a -> Bool
== Ordering
LT = Int
17
| Bool
otherwise = let !k :: Int
k = Int -> Int
sturgesH Int
n in if forall a. Integral a => a -> Bool
even Int
k then Int
k forall a. Num a => a -> a -> a
+ Int
7 else Int
k forall a. Num a => a -> a -> a
+ Int
8
where g :: a -> a
g a
n
| forall a. Ord a => a -> a -> Ordering
compare a
n a
60 forall a. Eq a => a -> a -> Bool
== Ordering
GT = a
9
| forall a. Ord a => a -> a -> Ordering
compare a
n a
40 forall a. Eq a => a -> a -> Bool
== Ordering
GT = a
7
| forall a. Ord a => a -> a -> Ordering
compare a
n a
20 forall a. Eq a => a -> a -> Bool
== Ordering
GT = a
5
| Bool
otherwise = a
3
{-# INLINABLE levynskyiMod #-}