Wat is de kleur van een woord?

In deze aflevering van "behind the scenes" dacht ik een stukje code te delen dat de kleuren uitkiest van de tags. Zoals je waarschijnlijk al hebt gemerkt zijn deze kleuren vrij willekeurig, maar toch elke keer op dezelfde manier willekeurig.

function getColor($string){
    // Wat is de kleur van een string?
    
    $colors = ["red","yellow","green","blue","purple","turquoise"];
    
    $color = "black"; //fallback
    if (in_array(strtolower($string), $colors)) {
        $color = strtolower($string);
    } else {
        $byte_array = unpack("C*", $string);
        $sum = array_sum($byte_array);
        $color = $colors[$sum % count($colors)];
    }
    return $color;
};

Zoals je ziet kijkt de computer eerst of de string een letterlijke kleur bevat. Als dat het geval is, krijgt de string de kleur die hij beschrijft. Anders kiest hij een willekeurige kleur uit. Als dat niet lukt default hij naar zwart.

Maar wat gebeurt er bij het kiezen van een willekeurige kleur?

ASCII tabel (bron)

Eerst zet hij alle letters om naar getalwaarden: elke letter heeft een "ASCII waarde": in de tabel zie je welke letters welke waardes hebben. De computer somt de ASCII waardes van alle letters in de string op, en moduleert dit getal: delen met resten, en alleen het restgetal over houden. Dit restgetal bepaalt dan welk element van de array van kleuren hij kiest. Bij r=5, kiest hij het 4de element (Want computer tellen vanaf 0 -> eerste = nulde, 5de = 4de).

Zo krijg je een willekeurige kleur (we nemen aan dat de tags willekeurig (genoeg) zijn) voor elke tag, maar wel elke keer dezelfde kleur.

2019-08-19 in blog #blauw #oranje #rood #geel #turquoise #paars #groen