-
Notifications
You must be signed in to change notification settings - Fork 74
/
all_interval.eprime
44 lines (40 loc) · 1.68 KB
/
all_interval.eprime
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
$
$ All interval problem in Essence'.
$
$
$ CSPLib problem number 7
$ http://www.cs.st-andrews.ac.uk/~ianm/CSPLib/prob/prob007/index.html
$ """
$ 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@bonetmail.com
$ See also my Essence'/Tailor page: http://www.hakank.org/minion_tailor
$
language ESSENCE' 1.0
letting n be 12
find x: matrix indexed by [int(1..n)] of int(1..n)
find diffs: matrix indexed by [int(1..n-1)] of int(1..n-1)
such that
allDiff(diffs),
allDiff(x),
forall k : int(1..n-1) . (
diffs[k] = |x[k+1]-x[k]|
),
x[1] < x[n-1],
diffs[1] < diffs[2]