perspectographe.fr

journal de recherches

Réductions successives,

Tags : caverne

Il y a une dizaine d’années, le seul fleuve de programmation dont j’avais bu les eaux était impératif, et il n’y avait dans mes mains que des types de données basiques : je connaissais les nombres entiers, les nombres à virgule flottante, les tableaux, et la possibilité de dire qu’un tableau de nombres représentait des caractères, que l’on pouvait lire jusqu’à atteindre une valeur qui signifiait “stop”.

Avec des yeux neufs, ou usés, c’est selon, je retombe aujourd’hui sur certains morceaux de mes solutions alternatives de mes débuts dans un coin de disque dur copié à travers les ordinateurs et les annéees. Un refus chronique de l’abstraction.

Le premier est une implémentation naïve de quelque chose qui ressemble à une hashmap, parce que je craignais d’utiliser des caractères spéciaux dans une clef en PHP :

$vals_safe = [];
for ($i = 0; $i < count($vals); $i++) {
   $vals_safe[md5($vals[$i])] = $vals[$i];
}
/* plus loin */
if (isset($vals_safe[md5("Réglage couleur")]) {
   echo $vals_safe[md5("Réglage couleur")]);
}

En second, je souhaitais visiblement grouper des clefs ayant les mêmes valeurs [sans notion de clef ou valeur], puis afficher ensemble les clefs ayant été groupées. Ne pas répéter la valeur semble avoir été un grand problème à ce moment.

$items = [];
$item_name = md5("Réglage couleur"); // On retrouve la même crainte qu'au-dessus
$items[$item_name] = get_reglage($item_name);
/* [...] J'ajoute nombre d'items à cette liste */

$big_list = array();
foreach($items as $item_n => $item) {
  $big_list[] = array_keys($items, $item);
}
$out = array_unique($big_list, SORT_REGULAR); // (sic.) ce truc contient un array par groupe de noms à afficher
$size = count($out);
$counter = 0;
$out_final = array_unique(array_values($items));
$toggle = true;
for ($i = 0; $i <= $length + 1; $i++) {
    $length2 = count($out[$i]);
    if ($toggle) {
        echo '<li>';
    }
    for ($x = 0; $x < $length2; $x++) {
        if ($length2 > 1 && $x < $length2 - 1) {
            echo '<span>' . $out[$i][$x] . '</span>' . '<span>';
            $toggle = false;
        } else {
            echo '<span>' . $out[$i][$x] . '</span>';
            echo '<span></span></li><li>';
            echo $out_final[$counter];
            $toggle = true;
        }
   }
   if ($toggle) {
       echo '</li><div class="b"></div>';
   }
   $counter++;
}

Incapable aujourd’hui de comprendre le fonctionnement de cela sans l’exécuter étape par étape avec un papier, le script entier fonctionnant encore, il semble que je voulais simplement inverser clefs et valeurs d’une hashmap en regroupant les valeurs similaires… semble-t’il ?

Il est assez drôle de voir les stratégies et l’énergie déployée pour contourner un outil (php) auquel je ne faisais pas assez confiance pour vouloir l’apprendre.