Commit 1c0b2f5f authored by Guillaume CLOCHARD's avatar Guillaume CLOCHARD
Browse files

Merge branch 'stats_courbe' into 'master'

Stats courbe

Rajout du fichier courbe.py
Permet d'afficher les occurence des nombres de mouvement sous forme d'une courbe grâce au module pyplot.

See merge request !28
parents 58892b8e 165de5b3
......@@ -31,6 +31,9 @@ import re
from sys import argv
from Cube import Cube
from lire_entree import lecture_cube
from utils import croix_valide, ftl_valide, cfop_valide
from stats import moyenne,ecart_type
from utils import croix_valide, ftl_valide, cfop_valide, replace_sublist
SHORTCUTS = "shortcuts.json"
......@@ -1596,7 +1599,6 @@ if __name__ == '__main__':
len(mouvements)
)
)
listeMoyenne[4].append(len(mouv+mouv2+mouv3+mouv4))
listeMoyenne[0].append(len(mouv))
listeMoyenne[1].append(len(mouv2))
......@@ -1615,25 +1617,36 @@ if __name__ == '__main__':
round(moyenne(listeMoyenne[4]), 2),
TermColors.end + '\n'
)
#Tests insolvabilité
#Voir http://jeays.net/rubiks.htm#unsolvable
tests = [
#One edge piece is flipped in place and all other pieces are correct.
'YYYOYYYYYOYOBBBRRRGGGOOOBBBRRRGGGOOOBBBRRRGGGWWWWWWWWW',
#Two edge pieces need to be swapped and all other pieces are correct.
'YYYYYYYYYOROBBBRORGGGOOOBBBRRRGGGOOOBBBRRRGGGWWWWWWWWW',
#One corner piece needs rotating and all other pieces are correct.
'OYYYYYYYYGOOBBBRRRGGYOOOBBBRRRGGGOOOBBBRRRGGGWWWWWWWWW',
#Two corner pieces need to be swapped and all other pieces are correct.
'YYYYYYYYYROOBBGORRGGBOOOBBBRRRGGGOOOBBBRRRGGGWWWWWWWWW'
]
for t in tests:
err, c = lecture_cube(t)
assert(not err)
err, _ = algo_cfop(c)
print(TermColors.bgGreen + "Insolvable" + TermColors.end, c.to_line())
print('\n' + TermColors.bold + 'Ecarts types :' + TermColors.end)
print('☞ Croix :', round(ecart_type(listeMoyenne[0]), 2))
print('☞ FTL :', round(ecart_type(listeMoyenne[1]), 2))
print('☞ OLL :', round(ecart_type(listeMoyenne[2]), 2))
print('☞ PLL :', round(ecart_type(listeMoyenne[3]), 2))
print(
'☞ ' + TermColors.bold + 'Total :',
round(ecart_type(listeMoyenne[4]), 2),
TermColors.end + '\n'
)
#Tests insolvabilité
#Voir http://jeays.net/rubiks.htm#unsolvable
tests = [
#One edge piece is flipped in place and all other pieces are correct.
'YYYOYYYYYOYOBBBRRRGGGOOOBBBRRRGGGOOOBBBRRRGGGWWWWWWWWW',
#Two edge pieces need to be swapped and all other pieces are correct.
'YYYYYYYYYOROBBBRORGGGOOOBBBRRRGGGOOOBBBRRRGGGWWWWWWWWW',
#One corner piece needs rotating and all other pieces are correct.
'OYYYYYYYYGOOBBBRRRGGYOOOBBBRRRGGGOOOBBBRRRGGGWWWWWWWWW',
#Two corner pieces need to be swapped and all other pieces are correct.
'YYYYYYYYYROOBBGORRGGBOOOBBBRRRGGGOOOBBBRRRGGGWWWWWWWWW'
]
for t in tests:
err, c = lecture_cube(t)
assert(not err)
err, _ = algo_cfop(c)
print(TermColors.bgGreen + "Insolvable" + TermColors.end, c.to_line())
\ No newline at end of file
import matplotlib.pyplot as plt
from Cube import *
from algo import algo_cfop
import json
from lire_entree import lecture_cube
from stats import moyenne
JEU_TEST = 'tests/samples/liste-sample.json'
with open(JEU_TEST) as data_file: #on parse le jeu de test JSON
data = json.load(data_file)
tests = data["cubes"]
# dictionnaire pour stocker en clé : nbMouvement et
#en valeur : Occurence sur les n tests
listeNbMouvements = {}
for test in tests: # on parcours tout les cubes
b,c = lecture_cube(test)
c,mouv = algo_cfop(c) # on fais l'algo
# si le nombre de mouvements est deja dans la dictionnaire,
# on ajoute 1 à son occurence
if len(mouv) in listeNbMouvements:
listeNbMouvements[len(mouv)] += 1
else:
listeNbMouvements[len(mouv)] = 1 # sinon on l'ajoute
listeX = []
listeY = []
# on "separe" le dictionnaire en deux liste correspondant aux clés et aux valeurs
for x,y in listeNbMouvements.items():
listeX.append(x)
listeY.append(y)
plt.plot(listeX,listeY) # affichage de la courbe dans pyplot
plt.xlabel('Nombre de mouvements')
plt.ylabel('Occurence sur '+str(len(tests))+' test')
plt.show()
from math import sqrt,fabs
def moyenne (liste):
moyenne = 0
for i in liste:
moyenne += i
return moyenne/len(liste)
def variance(liste):
variance = 0
moy = moyenne(liste)
for i in liste:
variance += (i-moy)*(i-moy)
return variance/len(liste)
def ecart_type(liste):
return sqrt(variance(liste))
def ecart_moyen(liste):
ecart_moyen = 0
moy = moyenne(liste)
for i in liste:
ecart_moyen += fabs(i-moy)
return ecart_moyen/len(liste)
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment