]> AND Private Git Repository - 14Secrypt.git/blob - experiments/smm3.pl
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
ajout de cr
[14Secrypt.git] / experiments / smm3.pl
1 :-use_module(library(clpfd)).
2
3
4 % N is the dot product of lists V1 and V2.
5 dot(V1, V2, N) :- maplist(product,V1,V2,P), sumlist(P,N).
6 product(N1,N2,N3) :- N3 is N1*N2.
7
8 % Matrix multiplication with matrices represented
9 % as lists of lists. M3 is the product of M1 and M2
10 mmult(M1, M2, M3) :- transpose(M2,MT), maplist(mm_helper(MT), M1, M3).
11 mm_helper(M2, I1, M3) :- maplist(dot(I1), M2, M3).
12
13
14 suml([],[],[]).
15
16 suml(L1,L2,[E1 + E2|R2]):-
17     L1 = [E1|T1],
18     L2 = [E2|T2],
19     suml(T1,T2,R2).
20
21
22
23 summ([],[],[]).
24 summ(M1,M2,[Lr|R2]):-
25     M1 = [E1|T1],
26     M2 = [E2|T2],
27     suml(E1,E2,Lr),
28     summ(T1,T2,R2).
29
30
31 flatten(List, Flattened):-
32   flatten(List, [], Flattened).
33
34 flatten([], Flattened, Flattened).
35 flatten([Item|Tail], L, Flattened):-
36   flatten(Item, L1, Flattened),
37   flatten(Tail, L, L1).
38 flatten(Item, Flattened, [Item|Flattened]):-
39   \+ is_list(Item).
40
41 touspositifs(X):-
42     flatten(X,XF),
43     tp(XF).
44
45 tp([]).
46 tp(X):-
47     X = [E|L],
48     E #> 0,
49     tp(L).
50
51
52 sc3(X1):-
53          mmult(X1,X1,X2),
54          mmult(X1,X2,X3),
55          mmult(X1,X3,X4),
56          mmult(X1,X4,X5),
57          mmult(X1,X5,X6),
58          mmult(X1,X6,X7),
59          mmult(X1,X7,X8),
60          summ(X1,X2,S2),
61          summ(S2,X3,S3),
62          summ(S3,X4,S4),
63          summ(S4,X5,S5),
64          summ(S5,X6,S6),
65          summ(S6,X7,S7),
66          summ(S7,X8,S8),
67          touspositifs(S8).
68
69 bistoc(X):-
70          X=[[M0X0, M0X1, M0X2, M0X3, M0X4, M0X5, M0X6, M0X7], [M1X0, M1X1, M1X2, M1X3, M1X4, M1X5, M1X6, M1X7], [M2X0, M2X1, M2X2, M2X3, M2X4, M2X5, M2X6, M2X7], [M3X0, M3X1, M3X2, M3X3, M3X4, M3X5, M3X6, M3X7], [M4X0, M4X1, M4X2, M4X3, M4X4, M4X5, M4X6, M4X7], [M5X0, M5X1, M5X2, M5X3, M5X4, M5X5, M5X6, M5X7], [M6X0, M6X1, M6X2, M6X3, M6X4, M6X5, M6X6, M6X7], [M7X0, M7X1, M7X2, M7X3, M7X4, M7X5, M7X6, M7X7]],
71          M0X0 in 0..3,
72          M0X1 in 0..1,
73          M0X2 in 0..1,
74          M0X3 is 0 ,
75          M0X4 in 0..1,
76          M0X5 is 0 ,
77          M0X6 is 0 ,
78          M0X7 is 0 ,
79          M1X0 in 0..1,
80          M1X1 in 0..3,
81          M1X2 is 0 ,
82          M1X3 in 0..1,
83          M1X4 is 0 ,
84          M1X5 in 0..1,
85          M1X6 is 0 ,
86          M1X7 is 0 ,
87          M2X0 in 0..1,
88          M2X1 is 0 ,
89          M2X2 in 0..3,
90          M2X3 in 0..1,
91          M2X4 is 0 ,
92          M2X5 is 0 ,
93          M2X6 in 0..1,
94          M2X7 is 0 ,
95          M3X0 is 0 ,
96          M3X1 in 0..1,
97          M3X2 in 0..1,
98          M3X3 in 0..3,
99          M3X4 is 0 ,
100          M3X5 is 0 ,
101          M3X6 is 0 ,
102          M3X7 in 0..1,
103          M4X0 in 0..1,
104          M4X1 is 0 ,
105          M4X2 is 0 ,
106          M4X3 is 0 ,
107          M4X4 in 0..3,
108          M4X5 in 0..1,
109          M4X6 in 0..1,
110          M4X7 is 0 ,
111          M5X0 is 0 ,
112          M5X1 in 0..1,
113          M5X2 is 0 ,
114          M5X3 is 0 ,
115          M5X4 in 0..1,
116          M5X5 in 0..3,
117          M5X6 is 0 ,
118          M5X7 in 0..1,
119          M6X0 is 0 ,
120          M6X1 is 0 ,
121          M6X2 in 0..1,
122          M6X3 is 0 ,
123          M6X4 in 0..1,
124          M6X5 is 0 ,
125          M6X6 in 0..3,
126          M6X7 in 0..1,
127          M7X0 is 0 ,
128          M7X1 is 0 ,
129          M7X2 is 0 ,
130          M7X3 in 0..1,
131          M7X4 is 0 ,
132          M7X5 in 0..1,
133          M7X6 in 0..1,
134          M7X7 in 0..3,
135          M0X0+ M0X1+ M0X2+ M0X3+ M0X4+ M0X5+ M0X6+ M0X7 #=3 ,
136          M1X0+ M1X1+ M1X2+ M1X3+ M1X4+ M1X5+ M1X6+ M1X7 #=3 ,
137          M2X0+ M2X1+ M2X2+ M2X3+ M2X4+ M2X5+ M2X6+ M2X7 #=3 ,
138          M3X0+ M3X1+ M3X2+ M3X3+ M3X4+ M3X5+ M3X6+ M3X7 #=3 ,
139          M4X0+ M4X1+ M4X2+ M4X3+ M4X4+ M4X5+ M4X6+ M4X7 #=3 ,
140          M5X0+ M5X1+ M5X2+ M5X3+ M5X4+ M5X5+ M5X6+ M5X7 #=3 ,
141          M6X0+ M6X1+ M6X2+ M6X3+ M6X4+ M6X5+ M6X6+ M6X7 #=3 ,
142          M7X0+ M7X1+ M7X2+ M7X3+ M7X4+ M7X5+ M7X6+ M7X7 #=3 ,
143          M0X0+ M0X1+ M0X2+ M0X3+ M0X4+ M0X5+ M0X6+ M0X7 #=3 ,
144          M0X0+ M1X0+ M2X0+ M3X0+ M4X0+ M5X0+ M6X0+ M7X0 #=3 ,
145          M1X0+ M1X1+ M1X2+ M1X3+ M1X4+ M1X5+ M1X6+ M1X7 #=3 ,
146          M0X1+ M1X1+ M2X1+ M3X1+ M4X1+ M5X1+ M6X1+ M7X1 #=3 ,
147          M2X0+ M2X1+ M2X2+ M2X3+ M2X4+ M2X5+ M2X6+ M2X7 #=3 ,
148          M0X2+ M1X2+ M2X2+ M3X2+ M4X2+ M5X2+ M6X2+ M7X2 #=3 ,
149          M3X0+ M3X1+ M3X2+ M3X3+ M3X4+ M3X5+ M3X6+ M3X7 #=3 ,
150          M0X3+ M1X3+ M2X3+ M3X3+ M4X3+ M5X3+ M6X3+ M7X3 #=3 ,
151          M4X0+ M4X1+ M4X2+ M4X3+ M4X4+ M4X5+ M4X6+ M4X7 #=3 ,
152          M0X4+ M1X4+ M2X4+ M3X4+ M4X4+ M5X4+ M6X4+ M7X4 #=3 ,
153          M5X0+ M5X1+ M5X2+ M5X3+ M5X4+ M5X5+ M5X6+ M5X7 #=3 ,
154          M0X5+ M1X5+ M2X5+ M3X5+ M4X5+ M5X5+ M6X5+ M7X5 #=3 ,
155          M6X0+ M6X1+ M6X2+ M6X3+ M6X4+ M6X5+ M6X6+ M6X7 #=3 ,
156          M0X6+ M1X6+ M2X6+ M3X6+ M4X6+ M5X6+ M6X6+ M7X6 #=3 ,
157          M7X0+ M7X1+ M7X2+ M7X3+ M7X4+ M7X5+ M7X6+ M7X7 #=3 ,
158          M0X7+ M1X7+ M2X7+ M3X7+ M4X7+ M5X7+ M6X7+ M7X7 #=3 ,
159          label([M0X0, M0X1, M0X2, M0X3, M0X4, M0X5, M0X6, M0X7, M1X0, M1X1, M1X2, M1X3, M1X4, M1X5, M1X6, M1X7, M2X0, M2X1, M2X2, M2X3, M2X4, M2X5, M2X6, M2X7, M3X0, M3X1, M3X2, M3X3, M3X4, M3X5, M3X6, M3X7, M4X0, M4X1, M4X2, M4X3, M4X4, M4X5, M4X6, M4X7, M5X0, M5X1, M5X2, M5X3, M5X4, M5X5, M5X6, M5X7, M6X0, M6X1, M6X2, M6X3, M6X4, M6X5, M6X6, M6X7, M7X0, M7X1, M7X2, M7X3, M7X4, M7X5, M7X6, M7X7]),
160          sc3(X), 
161          open('res3.txt',append,Stream),
162          write(Stream,X),
163          close(Stream).
164
165
166     
167
168 display_m([]).
169 display_m([El|R]):-
170     write(El),
171     display_m(R).
172
173
174 solution(L):-
175     get_time(T0),
176     findall(X,bistoc(X),L),
177     get_time(T1),
178     DT is T1 - T0,
179     write('but : '),writeln(DT),
180     display_m(L).
181
182
183
184