Bonjour,

En vu de gagner en rapidité d’exécution est-il possible de transformer simplement le code de cette fonction écrit en python3 à l'aide de cython, je m'y suis déjà un peu frotté mais cela fait appel a des notions trop avancées en C pour moi. Je pensais sinon me diriger vers le langage Julia mais je n'arrive pas à utiliser le compilateur.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
 
cpdef list reglesTour(int selfi,int selfj,int selftest,list selfpieces,list selfpermutation,list selftableaupos):
    selfi,selfj,selftest,selfpieces,selfpermutation,selftableaupos=selfi,selfj,selftest,selfpieces,selfpermutation,selftableaupos
    global selflienlettrepos
    global tableauposlettre
    cdef int nbrelem=len(selfpieces[selftest])
    pos=selfpieces[selftest][nbrelem-1]
    posactuelle=selflienlettrepos.get(pos)
    selfpostotaldeblettre, postotal, postotal1, postotal2, postotal3, postotal4=[], [], [], [], [], []
    if posactuelle!=None:
        if 0<=posactuelle[0]<=7 and 0<=posactuelle[1]<=7: 
            if selftest<17:
                val="N"
            elif selftest>16:
                val="B"
            for a in range(1, 8):
                if posactuelle[0]+a>7:
                    break
                else:
                    postotal1.append((posactuelle[0]+a,posactuelle[1]))
            for n in postotal1:
                if selftableaupos[n[0]][n[1]] in ("V", val):
                    postotal.append(n)
                    if selftableaupos[n[0]][n[1]]==val:
                        break
                else:
                    break
            for a in range(1, 8):        
                if posactuelle[0]-a<0:
                    break
                else:
                    postotal2.append((posactuelle[0]-a,posactuelle[1]))
            for n in postotal2:
                if selftableaupos[n[0]][n[1]] in ("V", val):
                    postotal.append(n)
                    if selftableaupos[n[0]][n[1]]==val:
                        break
                else:
                    break
            for a in range(1, 8):
                if posactuelle[1]+a>7:
                    break
                else:
                    postotal3.append((posactuelle[0],posactuelle[1]+a))
            for n in postotal3:
                if selftableaupos[n[0]][n[1]] in ("V", val):
                    postotal.append(n)
                    if selftableaupos[n[0]][n[1]]==val:
                        break
                else:
                    break
            for a in range(1, 8):        
                if posactuelle[1]-a<0:
                    break
                else:
                    postotal4.append((posactuelle[0],posactuelle[1]-a))
            for n in postotal4:
                if selftableaupos[n[0]][n[1]] in ("V", val):
                    postotal.append(n)
                    if selftableaupos[n[0]][n[1]]==val:
                        break
                else:
                    break
            postotal.append(posactuelle)
            for n in postotal:
                selfpostotaldeblettre.append(tableauposlettre[n[0]][n[1]])
    return selfpostotaldeblettre
Merci pour votre attention.
Bonne journée.