hmt-0.16: Music/Theory/Block_Design/Johnson_2007.hs
-- | Tom Johnson. \"Networks\". In Conference on Mathematics and
-- Computation in Music, Berlin, May 2007.
module Music.Theory.Block_Design.Johnson_2007 where
import Control.Arrow ((***)) {- base -}
import Data.List {- base -}
import qualified Music.Theory.List as T
-- * Designs
data Design i = Design [i] [[i]]
-- * Johnson (7,3,1), (13,4,1) and (12,4,3)
-- > c_7_3_1 == [1,3,4,2,7,6,5]
c_7_3_1 :: (Num i) => [i]
c_7_3_1 = [1,3,4,2,7,6,5]
-- > b_7_3_1 == ([[1,2,3],[3,4,7],[2,4,6],[2,5,7],[1,6,7],[3,5,6],[1,4,5]]
-- > ,[[1,2,4],[2,3,7],[4,6,7],[2,5,6],[1,5,7],[1,3,6],[3,4,5]])
b_7_3_1 :: (Ord i,Num i) => ([[i]], [[i]])
b_7_3_1 =
let c = c_7_3_1
f i (j1,j2) = sort [i,j1,j2]
in (zipWith f (T.rotate_left 3 c) (T.adj2_cyclic 1 c)
,zipWith f c (T.adj2_cyclic 1 (T.rotate_left 2 c)))
d_7_3_1 :: (Enum n,Ord n,Num n) => (Design n,Design n)
d_7_3_1 = let d = Design [1..7] in (d *** d) b_7_3_1
-- > length n_7_3_1 == 7 && sort n_7_3_1 == n_7_3_1
n_7_3_1 :: Num i => [(i,i)]
n_7_3_1 = [(3,4),(3,11),(4,1),(4,3),(4,5),(4,7),(5,2)]
-- > Music.Theory.List.histogram (concat p_9_3_1) == [(1,4),(2,4),(3,4),(4,4),(5,4),(6,4),(7,4),(8,4),(9,4)]
p_9_3_1 :: Num i => [[i]]
p_9_3_1 = [[1,8,9],[2,3,5],[4,6,7],[1,4,5],[2,6,8],[3,7,9],[1,2,7],[3,4,8],[5,6,9],[1,3,6],[2,4,9],[5,7,8]]
-- > b_13_4_1 == ([[1,2,4,10],[2,3,5,11],[3,4,6,12],[4,5,7,13],[1,5,6,8],[2,6,7,9],[3,7,8,10],[4,8,9,11],[5,9,10,12],[6,10,11,13],[1,7,11,12],[2,8,12,13]]
-- > ,[[4,8,9,11],[5,9,10,12],[6,10,11,13],[1,7,11,12],[2,8,12,13],[1,3,9,13],[1,2,4,10],[2,3,5,11],[3,4,6,12],[4,5,7,13],[1,5,6,8],[2,6,7,9]])
b_13_4_1 :: (Enum i,Num i,Ord i) => ([[i]], [[i]])
b_13_4_1 =
let c = [1..13]
c' = T.rotate_left 7 c
d = T.interleave_rotations 9 3 c
e = T.interleave_rotations 3 10 c
f (i1,i2) (j1,j2) = sort [i1,i2,j1,j2]
in (zipWith f (T.adj2 1 c) (T.adj2 2 d)
,zipWith f (T.adj2 1 c') (T.adj2 2 e))
d_13_4_1 :: (Enum n,Ord n,Num n) => (Design n,Design n)
d_13_4_1 = let d = Design [1..13] in (d *** d) b_13_4_1
-- > length n_13_4_1 == 13 && sort n_13_4_1 == n_13_4_1
n_13_4_1 :: Num i => [(i,i)]
n_13_4_1 = [(3,0),(3,2),(3,5),(3,7),(3,10),(4,0),(4,3),(4,5),(4,8),(4,10),(5,1),(5,3),(5,6)]
-- > histogram (concat b_12_4_3) == [(1,11),(2,11),(3,11),(4,11),(5,11),(6,11),(7,11),(8,11),(9,11),(10,11),(11,11),(12,11)]
-- > histogram (map (sort.concat) (chunksOf 3 b_12_4_3)) == [([1,2,3,4,5,6,7,8,9,10,11,12],11)]
-- > map length (adj_intersect 1 b_12_4_3) == [0,0,3,0,0,3,0,0,3,0,0,3,0,0,3,0,0,3,0,0,3,0,0,3,0,0,3,0,0,3,0,0]
-- > map (map length . adj_intersect 1) (cycles 3 b_12_4_3) == [[1,1,1,1,1,1,1,1,1,1],[2,2,2,2,2,2,2,2,2,2],[1,1,1,1,1,1,1,1,1,1]]
-- > map adj_intersect 1 (cycles 3 b_12_4_3) == [[[12],[12],[12],[12],[12],[12],[12],[12],[12],[12]]
-- > ,[[8,9],[7,8],[6,7],[5,6],[4,5],[3,4],[2,3],[1,2],[1,11],[10,11]]
-- > ,[[3],[2],[1],[11],[10],[9],[8],[7],[6],[5]]]
b_12_4_3 :: Integral i => [[i]]
b_12_4_3 =
[[1,5,7,12]
,[2,8,9,10]
,[3,4,6,11]
,[4,6,11,12]
,[1,7,8,9]
,[2,3,5,10]
,[3,5,10,12]
,[6,7,8,11]
,[1,2,4,9]
,[2,4,9,12]
,[5,6,7,10]
,[1,3,8,11]
,[1,3,8,12]
,[4,5,6,9]
,[2,7,10,11]
,[2,7,11,12]
,[3,4,5,8]
,[1,6,9,10]
,[1,6,10,12]
,[2,3,4,7]
,[5,8,9,11]
,[5,9,11,12]
,[1,2,3,6]
,[4,7,8,10]
,[4,8,10,12]
,[1,2,5,11]
,[3,6,7,9]
,[3,7,9,12]
,[1,4,10,11]
,[2,5,6,8]
,[2,6,8,12]
,[3,9,10,11]
,[1,4,5,7]]
-- > length n_12_4_3 == 12 && sort n_12_4_3 == n_12_4_3
n_12_4_3 :: Num i => [(i,i)]
n_12_4_3 = [(3,2),(3,5),(3,6),(3,9),(3,10),(4,1),(4,4),(4,7),(4,8),(4,11),(5,0),(5,3)]
-- Local Variables:
-- truncate-lines:t
-- End: