[SOFT] Universal ROM Cleaner – Nettoyez vos romset d'une main (Clean your Romset with one hand)
-
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).zipDans l'ordre les attributs sont trié (avec en face leur valeur du coup) :
Europe = 0
US = 1
V2.0 = 2
V1.0 = 3Maintenant 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 = 1000001Mario (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 = 997501Mario (US).zip US
(premier attribut) = (1+1)*1000000 = 2000000 (POIDS du fichier = 1 + 2000000 = 2000001)
Mario (US).zip = 2000001Il 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 -> KOAvant 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") -
@screech , merci pour le détail ! Bon donc le soucis se pose bien quand il y a une liste "trop" longue d'attribut. Par exemple, imaginons une liste de 200 attributs ordonnés.
- Le 150eme aura pour poids : (100 – (((150 + 1)*100)/(200))) = 24,5 (soit une valeur positive, ce qui soustraira au poids au lieu d'ajouter...?!)
- Le 151eme aura pour poids : (100 – (((151 + 1)*100)/(200))) = 24
J'imagine qu'il y a un jeux d'arrondit d'entier ce qui expliquerait que mes deux ROMs dans l'exemple précédent aient exactement le même poids, alors même qu'elles comportent deux attributs différents, classés a des rangs voisins mais différents. Là comme ça, je ne vois pas un autre algo à appliquer. En revanche, mathématiquement si tu multiplie tes valeurs fixes par 100 (autre que 1), ça devrait nous donner un peu de marge, et éviter les chiffres à virgule sauf dans le cas d'une liste dépassant les 10000 attributs... mais là, franchement, ce sera de toute manière impossible à trier ^^. Ceci étant, j'ai du mal avec le fait que, théoriquement, pour tout attribut compris entre le premier et l'avant dernier, la valeur sera positive, pour l'avant dernier elle sera 0 et pour le dernier elle sera négative... ça fausse un peu l'ensemble, non ? On devrait toujours avoir une valeur positive, et systématiquement l'ajouter ? Pourquoi ne pas simplement ajouter au poids 1 initial l'index de l'attribut en question, que ce soit le premier, le dernier, ou n'importe quelle autre ? Que penses-tu de tout ça ?
-
-
Now in German : V2.0.0.1
Thank you @Nachtgarm
-
Bonjour @screech,
Petite question je n'ai pas trouvé la réponse en parcourant le thread:
Comment gérer par exemple la plupart des jeux ont des "sous-titres", même nom de jeu, mais souvent en japonais y'a le sous-titre de marqué, ce qui change le nom du jeu au final, résultat il me garde un nombre incalculable de jeux. Pourtant ces jeux viennent de romsets.
OK|King of the Monsters 2 (USA).zip|SIMUL|
OK|King of the Monsters 2 - The Next Thing (Japan).zip|SIMUL|J'aurais voulu un KO sur le 2ème en japonais :s
Merci d'avance !
-
Salut @eightkiller
Malheureusement ce que tu demande est impossible (en tout cas avec Universal Rom Cleaner )
C'est en projet d'integration dans Universal XML Editor (mon 3eme soft loin d'etre finit) qui permettra de dedoublonné par Id de jeux (les Id récupéré pendant le scrape depuis Universal XML Scraper ^^)
Mais c'est vraiment pas pour maintenant
-
I was really hopping that this tool can remove duplicates by checking Hashes. But it doesnt. Any chance to see that option? or at least compare crc's and remove doubles?
Steel Empire, The (UE) [!]
Steel Empire (USA)
same crc ,sha1 -
@icelancer nvm found what i was looking for on hyper forum DoubleKiller.exe
Thanks -
viens de faire un teste avec mes roms n64 et j ai ce fichier qui a ete suprime alors que les attribut etait mis dans les ignorees
KO|Yoshi's Story (Europe) (En,Fr,De).zip||SUPPR