SarahMinich / tree_structure

0 stars 0 forks source link

Normalisation des formats : format des instances #14

Closed laowantong closed 4 years ago

laowantong commented 4 years ago

Le premier travail à faire est d'assainir les entrées-sorties en optant pour des formats qui ont une correspondance directe avec les structures de données utilisées. JSON répond normalement à ce besoin, mais tu as codé certains conteneurs dans des chaînes, ce qui complique énormément l'encodage et le décodage.

J'ai écrit un script qui convertit ton ancien format pour les instances, en un nouveau moins fantaisiste. Ça prend en entrée un chemin vers un JSON de ce type :

{
 "tiles": [
  "[N1, N2, N5, N10]",
  "[N1, N2, N5, N11]",
  "[N1, N3, N7, N14]",
  "[N1, N2, N4, N9]",
  "[N1, N3, N7, N15]"
 ],
 "symbols": [
  "[N1 - 0]",
  "[N2 - 5]",
  "[N3 - 3]",
  "[N4 - 1]",
  "[N5 - 2]",
  "[N7 - 6]",
  "[N9 - 2]",
  "[N10 - 1]",
  "[N11 - 4]",
  "[N14 - 3]",
  "[N15 - 5]"
 ],
 "height": 3,
 "max_symbol_size": 9,
 "opt_value": null,
 "opt_tiles_m1": [],
 "symbols_on_m1": [],
 "opt_tiles_m2": [],
 "symbols_on_m2": []
}

Et ça produit ceci :

{
  "height": 3,
  "max_symbol_size": 9,
  "opt_value": null,
  "opt_tiles_m1": [],
  "symbols_on_m1": [],
  "opt_tiles_m2": [],
  "symbols_on_m2": [],
  "tiles": [
    [1, 2, 5, 10],
    [1, 2, 5, 11],
    [1, 3, 7, 14],
    [1, 2, 4, 9],
    [1, 3, 7, 15]
  ],
  "symbol_names": [1, 2, 3, 4, 5, 7, 9, 10, 11, 14, 15],
  "symbol_sizes": [0, 5, 3, 1, 2, 6, 2, 1, 4, 3, 5]
}

À première vue, les « N » que tu as décidé d'accoler aux identifiants des symboles ne font qu'alourdir ton code et ralentir ton programme. Les supprimer permettrait de coder les tuiles comme des listes d'entiers, et les symboles comme des couples d'entiers, ce qui laisserait la porte ouverte à des optimisations automatiques (genre numba).

Pour lancer le script tu auras besoin d'installer une bibliothèque d'expressions régulières avancées :

pip install regex

Dis-moi rapidement si tu as des objections, ou qu'il y a des problèmes que je n'ai pas vus.

laowantong commented 4 years ago

Par ailleurs, max_symbol_size vaut 9 alors que la taille de symbole maximale est de 6. Pourquoi ?