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

Private GIT Repository
ajout de cr
[14Secrypt.git] / experiments / smm2.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
53
54 sc2(X):-
55     mmult(X,X,X2),
56     mmult(X,X2,X3),
57     mmult(X,X3,X4),
58     summ(X,X2,S1),
59     summ(S1,X3,S2),
60     summ(S2,X4,S3),
61     touspositifs(S3).
62
63
64
65
66
67 bistoc(X):-
68     X=[[A,B,C,0],[F,E,0,G],[H,0,I,J],[0,K,L,M]],
69     A in 0..2,
70     E in 0..2,
71     I in 0..2,
72     M in 0..2,
73     B in 0..1,
74     C in 0..1,
75     F in 0..1,
76     G in 0..1,
77     H in 0..1,
78     J in 0..1,
79     K in 0..1,
80     L in 0..1,
81     A + B + C  #= 2,
82     E + F+  G #= 2,
83     H+ I+ J#= 2,
84     K+L +M #= 2,
85     A+F + H#= 2,
86     B+E +K #= 2,
87     C+I + L#= 2,
88     G+ J+M #= 2,
89     label([A,B,C,F,E,G,H,I,J,K,L,M]),
90     sc2(X),
91     open('res2.txt',append,Stream), 
92     write(Stream,X),  
93     close(Stream).
94     
95
96 display_m([]).
97 display_m([El|R]):-
98     write(El),
99     display_m(R).
100
101
102 solution(L):-
103     get_time(T0),
104     findall(X,bistoc(X),L),
105     get_time(T1),
106     DT is T1 - T0,
107     write('but : '),writeln(DT).
108
109
110
111
112
113
114
115
116