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

Private GIT Repository
ajout de cr
[14Secrypt.git] / experiments / genPrologFile.py
1
2
3
4 n=2
5 deuxExpN = pow(2,n)
6
7
8  
9 def bin(elem,n):
10     """Convertit un nombre en binaire"""
11     q = -1
12     res =[0 for i in range(n)]
13     i = 1
14     while q != 0:
15         q = elem // 2
16         r = elem % 2
17         res[n-i] =  r
18         elem = q
19         i+=1
20     return res
21
22 def dec(ch,n):
23     l = len(ch)
24     acc = 0
25     for i in range(l):
26         if ch[i]==1:
27             acc = acc + 2**(n-i-1)        
28     return acc
29
30
31 def dist(i,j):
32     ib = bin(i,deuxExpN)
33     jb = bin(j,deuxExpN)
34     return sum([1 if ib[k] !=jb[k] else 0 for k in range(deuxExpN)])
35
36 st = "sc"+str(n)+"(X1):-\n"
37 for i in range(1,deuxExpN):
38     st += "\t mmult(X1,X"+str(i)+",X"+str(i+1)+"),\n"
39 st += "\t summ(X1,X2,S2),\n"
40 for i in range(2,deuxExpN):
41     st += "\t summ(S"+str(i)+",X"+str(i+1)+",S"+str(i+1)+"),\n"
42 st += "\t touspositifs(S"+str(deuxExpN)+").\n\n"
43
44
45
46
47 st += "bistoc(X):-\n"
48 # construction de X
49 X=[]
50 for i in range(deuxExpN):
51     XL=[]
52     for j in range(deuxExpN) :
53         XL.append('M'+str(i)+"X"+str(j))
54
55     X.append(XL)
56
57
58 st += "\t X=" +str(X).replace('\'','')+",\n"
59
60 # domaine des variables
61 for i in range(deuxExpN):
62     for j in range(deuxExpN):
63         if dist(i,j)> 1 :
64             st += "\t M"+str(i)+"X"+str(j)+" is 0 ,\n" 
65         else : 
66             if i == j :
67                 st += "\t M"+str(i)+"X"+str(j)+" in 0.."+str(n)+",\n"
68             else :
69                 st += "\t M"+str(i)+"X"+str(j)+" in 0..1"+",\n"
70
71 # stochastiques
72
73 for i in range(deuxExpN):
74     stl =""
75     for j in range(deuxExpN):
76         stl += "M"+str(i)+"X"+str(j) +"+ "
77     stl = stl[:-2]
78     st += "\t "+stl + " #="+str(n)+" ,\n"
79     
80
81 # bistochastiques
82
83 for i in range(deuxExpN):
84     stl,stlb ="",""
85     for j in range(deuxExpN):
86         stlb += "M"+str(j)+"X"+str(i) +"+ "
87     stlb = stlb[:-2]
88     st += "\t "+stlb + " #="+str(n)+" ,\n"
89
90
91 # label
92 lbl= []
93 for i in range(deuxExpN):
94     for j in range(deuxExpN):
95         lbl.append('M'+str(i)+"X"+str(j))
96
97 st += "\t label("+ str(lbl).replace('\'','')+"),\n"
98
99 st+= "\t sc"+str(n)+"(X), \n"
100 st+= "\t open('res"+str(n)+".txt',append,Stream),\n" 
101 st+= "\t write(Stream,X),\n"
102 st+= "\t close(Stream).\n\n"
103
104 print st
105
106
107 """            
108     sc2(X).
109 """