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
include "globals.mzn";

enum Signals = { A, B, C, D, E, F, G };

set of Signals: Zero = { A, B, C, E, F, G };
set of Signals: One = { C, F };
set of Signals: Two = { A, C, D, E, G };
set of Signals: Three = { A, C, D, F, G };
set of Signals: Four = { B, C, D, F };
set of Signals: Five = { A, B, D, F, G };
set of Signals: Six = { A, B, D, E, F, G };
set of Signals: Seven = { A, C, F };
set of Signals: Eight = { A, B, C, D, E, F, G };
set of Signals: Nine = { A, B, C, D, F, G };
array[1..10] of set of Signals: AllSignals = [ Zero, One, Two, Three, Four, Five, Six, Seven, Eight, Nine ];

array[1..10] of set of Signals: Patterns;
% Patterns = [
%   { A, C, E, D, G, F, B },
%   { C, D, F, B, E },
%   { G, C, D, F, A },
%   { F, B, C, A, D },
%   { D, A, B },
%   { C, E, F, A, B, D },
%   { C, D, F, G, E, B },
%   { E, A, F, B },
%   { C, A, G, E, D, B },
%   { A, B },
% ];

array [Signals] of var Signals: Map;

constraint alldifferent(Map);
constraint forall(pattern in [ { Map[x] | x in pattern } | pattern in Patterns])(
  exists(digit in AllSignals)(pattern = digit)
);

output [show(Map)];