1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | $ $ All interval problem in Essence'. $ $ $ CSPLib problem number 7 $ """ $ Given the twelve standard pitch-classes (c, c$, d, ...), represented by $ numbers 0,1,...,11, find a series in which each pitch-class occurs exactly $ once and in which the musical intervals between neighbouring notes cover $ the full set of intervals from the minor second (1 semitone) to the major $ seventh (11 semitones). That is, for each of the intervals, there is a $ pair of neigbhouring pitch-classes in the series, between which this $ interval appears. The problem of finding such a series can be easily $ formulated as an instance of a more general arithmetic problem on Z_n, $ the set of integer residues modulo n. Given n in N, find a vector $ s = (s_1, ..., s_n), such that (i) s is a permutation of $ Z_n = {0,1,...,n-1}; and (ii) the interval vector $ v = (|s_2-s_1|, |s_3-s_2|, ... |s_n-s_{n-1}|) is a permutation of $ Z_n-{0} = {1,2,...,n-1}. A vector v satisfying these conditions is $ called an all-interval series of size n; the problem of finding such $ a series is the all-interval series problem of size n. We may also be $ interested in finding all possible series of a given size. $ """ $ $ Model created by Hakan Kjellerstrand, hakank@gmail.com $ See also my Essence'/Tailor page: http://www.hakank.org/savile_row/ $ $ $ Licenced under CC-BY-4.0 : http://creativecommons.org/licenses/by/4.0/ language ESSENCE' 1.0 letting n be 12 letting range be domain int (1..n) letting range2 be domain int (1..n-1) find x: matrix indexed by [range] of range find diffs: matrix indexed by [range2] of range2 such that allDiff (diffs), allDiff (x), forall k : range2 . diffs[k] = |x[k+1]-x[k]|, $ symmetry breaking x[1] < x[n-1], diffs[1] < diffs[2] |