20 Jul 2016, 14:05

Allez, pour me remettre dans le bain, voici une description de l'algo 😉

Une valeur est donnée à chaque attribut dans l'ordre (Premier attribut de la liste = 0, deuxième = 1, etc...)

Ensuite chaque fichier est passé au crible pour définir les "doublons" en excluant les attributs et extension (un "mario (europe) [V2.0].zip" devient donc un "mario" tout court)

On donne ensuite la valeur poids 1 à chaque fichier (pour que même les fichiers sans attributs soit conservés. ça fait partie de mes dernières modifs ^^)
Pour chaque "doublon" on calcul la valeur de ses attributs selon le calcul balaise suivant :
Le premier attribut du fichier = (la valeur de l'attribut + 1) *1000000
Donc un fichier avec 1 seul attribut et dont l'attribut est le premier de la liste aura un poids de 1 + ((0+1)*1000000) soit 1000001
Ensuite les attributs suivant pondère cette valeur en soustrayant le calcul suivant du poids actuel : (10000 - (((Valeur de l'attribut + 1)*10000)/(le nombre total d'attribut+1)))

Avec un exemple c'est plus simple 😉
Voici 3 fichiers :
Mario (Europe)(V1.0).zip
Mario (Europe)(V2.0).zip
Mario (US).zip

Dans l'ordre les attributs sont trié (avec en face leur valeur du coup) :
Europe = 0
US = 1
V2.0 = 2
V1.0 = 3

Maintenant on passe au calcul du poids :
Mario (Europe)(V1.0).zip
Europe (premier attribut) = (0+1)*1000000 = 1000000 (POIDS du fichier = 1 + 1000000 = 1000001)
V1.0 = 10000 - (((3+1)*10000)/3+1) = 0 (comme il s'agit d'un attribut supplémentaire, je soustrais la valeur. POIDS du fichier = 1000001 - (0) = 1000001)
Mario (Europe)(V1.0).zip = 1000001

Mario (Europe)(V2.0).zip
Europe (premier attribut) = (0+1)*1000000 = 1000000 (POIDS du fichier = 1 + 1000000 = 1000001)
V2.0 = 10000 - (((2+1)*10000)/3+1) = 2500 (comme il s'agit d'un attribut supplémentaire, je soustrais la valeur. POIDS du fichier = 1000001 - (2500) = 997501)
Mario (Europe)(V2.0).zip = 997501

Mario (US).zip US
(premier attribut) = (1+1)*1000000 = 2000000 (POIDS du fichier = 1 + 2000000 = 2000001)
Mario (US).zip = 2000001

Il ne me reste plus qu'à trier par poids. Et de ne garder que le poids le plus faible :
Mario (Europe)(V2.0).zip = 997501 -> OK
Mario (Europe)(V1.0).zip = 1000001 -> KO
Mario (US).zip = 2000001 -> KO

Avant je ne gardais que le premier poids le plus faible.
Maintenant avec la dernière modif, je garde tous les fichiers ayant un poids le plus faible identique.

Exemple : Si les attributs (Disk 1-2) et (Disk 2-2) sont ignoré (donc non pris en compte dans le calcul)
Mario (Europe)(V2.0) (Disk 1-2).zip = 997501 -> OK
Mario (Europe)(V2.0) (Disk 2-2).zip = 997501 -> OK
Mario (Europe)(V1.0).zip = 1000001 -> KO
Mario (US).zip = 2000001 -> KO
Les 2 premiers fichier ayant le même poids et celui-ci étant le plus faible, ils sont conservé tous les 2 ^^ (Il ne faut pas oublié qu'avant tout ça la liste est purgé des fichiers contenant un attribut de la liste des "non conservés")