In de jaren '80 konden gebruikers van bulletin board systems1 (BBS) toegang krijgen tot bepaalde bestanden, computerspellen en speciale chatrooms door een elitestatus te verwerven. De BBS maakten gebruik van slimme filters om te vermijden dat er zou gediscussieerd worden over illegale onderwerpen zoals het kraken van software2 en het hacken van computersystemen en -netwerken3. Om hieraan te ontsnappen introduceerde het hackerscollectief Cult of the Dead Cow4 een techniek waarbij letters werden vervangen door karakters die er qua schrijfwijze sterk op leken, zoals A=4 of E=3. Andere hackers namen deze schrijfwijze al snel over en noemden het leetspeak5 — of kortweg leet ("l33t" of "1337") of eleet ("3l33t" of "31337") — als woordspeling op de elitestatus.
Bij het opmaken van webpagina's worden de inhoud en de structuur van de pagina vastgelegd in HyperText Markup Language7 (HTML) en de vormgeving in Cascading Style Sheets8 (CSS). In beide gevallen kan een kleur omschreven worden door een hekje (#) gevolgd door drie of zes hexadecimale cijfers9. Naast de cijfers 0 tot en met 9 gebruikt het hexadecimaal talstelsel ook de cijfers A (=10) tot en met F (=15), die ook als kleine letters mogen genoteerd worden. Omdat de term hexadecimaal vaak wordt afgekort tot hex, spreekt men van hex-kleuren. Hierbij is de hex-kleur #h1h2h3 niets anders dan een afkorting voor de hex-kleur #h1h1h2h2h3h3, en bestaat een hex-kleur dus uit drie hexadecimale getallen met een waarde tussen 0 en 255 in het decimaal talstelsel.
Onder het motto "The most colorful website you have ever seen!" combineert de website bada55.io10 het concept hex-kleur met het concept leetspeak door kleuren een naam te geven waarvan de leetspeak schrijfwijze op het hekje na gelijk is aan de hexadecimale voorstelling van de kleur.
De omzetting van leetspeak naar gewone letters (en omgekeerd) wordt vastgelegd in een tekstbestand. Elke regel van het bestand bestaat uit een leetspeak karakter, een spatie, de karakters <->, nog een spatie en één of meer letters die in leetspeak omgezet worden naar het eerste karakter op de regel. Elke regel van het bestand heeft een uniek eerste karakter en ook na de <-> zijn alle letters uniek. Bij het bepalen van de uniciteit wordt geen onderscheid gemaakt tussen hoofdletters en kleine letters. Het is wel mogelijk dat eenzelfde letter zowel voor als na de <-> voorkomt in het bestand. Het bestand kan er dan bijvoorbeeld als volgt uitzien.
0 <-> O 1 <-> I 2 <-> RZ 3 <-> E 5 <-> S 6 <-> G 7 <-> LTY 9 <-> P
We zien bijvoorbeeld dat de letter E in leetspeak wordt omgezet in het cijfer 3, en dat het cijfer 7 in leetspeak zowel de letter L, de letter T als de letter Y kan voorstellen. Gevraagd wordt:
Schrijf een functie leet2letter waaraan de locatie (str) moet doorgegeven worden van een tekstbestand dat de omzetting van leetspeak naar gewone letters vastlegt. De functie moet een dictionary (dict) teruggeven die elk leetspeak karakter (str) uit het bestand afbeeldt op de verzameling (set) van de individuele letters (str) die in leetspeak omgezet worden naar dat karakter. In deze dictionary moeten alle letters voorgesteld worden als hoofdletters (zowel in de sleutels als in de waarden).
Schrijf een functie letter2leet waaraan een dictionary (dict) moet doorgegeven worden die opgebouwd is zoals de dictionaries die door de functie leet2letter worden teruggegeven. De functie moet een dictionary (dict) teruggeven die alle hoofdletters (str) uit de verzamelingen die als waarde gebruikt worden in de gegeven dictionary afbeeldt op hun corresponderende sleutel (str) in de gegeven dictionary.
Schrijf een functie leetspeak waaraan twee argumenten moeten doorgegeven worden: i) een naam (str) die enkel bestaat uit letters en ii) een dictionary (dict) die opgebouwd is zoals de dictionaries die door de functie letter2leet worden teruggegeven. De functie moet de gegeven naam (str) teruggeven, waarin elke letter die als sleutel voorkomt in de gegeven dictionary werd vervangen door het corresponderende karakter uit de dictionary. Alle letters uit de naam die niet als sleutel voorkomen in de dictionary blijven gewoon staan. Daarnaast moeten alle letters in de naam omgezet worden naar hoofdletters.
Schrijf een functie ishexkleur waaraan één argument moet doorgegeven worden. De functie moet een Booleaanse waarde (bool) teruggeven die aangeeft of het gegeven argument een string (str) is die een geldige hex-kleur voorstelt.
Schrijf een functie kleur waaraan twee argumenten moeten doorgegeven worden: i) een naam (str) die enkel bestaat uit letters en ii) een dictionary (dict) die opgebouwd is zoals de dictionaries die door de functie letter2leet worden teruggegeven. De functie moet een string (str) teruggeven die bestaat uit een hekje (#), gevolgd door de leetspeak schrijfwijze van de gegeven naam (cfr. functie leetspeak). Voor de omzetting naar leetspeak moet gebruikgemaakt worden van de gegeven dictionary (cfr. functie leetspeak). Als de string die door de functie wordt teruggegeven geen geldige hex-kleur is, dan moet een AssertionError opgeworpen worden met de boodschap ongeldige kleur.
In onderstaande voorbeeldsessie gaan we ervan uit dat het tekstbestand leet.txt11 zich in de huidige directory bevindt.
>>> hex2letter = leet2letter('leet.txt12')
>>> hex2letter
{'0': {'O'}, '1': {'I'}, '2': {'Z', 'R'}, '3': {'E'}, '5': {'S'}, '6': {'G'}, '7': {'L', 'Y', 'T'}, '9': {'P'}}
>>> letter2hex = letter2leet(hex2letter)
>>> letter2hex
{'O': '0', 'I': '1', 'Z': '2', 'R': '2', 'E': '3', 'S': '5', 'G': '6', 'L': '7', 'Y': '7', 'T': '7', 'P': '9'}
>>> leetspeak('BADASS', letter2hex)
'BADA55'
>>> leetspeak('fbi', letter2hex)
'FB1'
>>> leetspeak('SHRUBBERY', letter2hex)
'5H2UBB327'
>>> leetspeak('REBECCA', letter2hex)
'23B3CCA'
>>> ishexkleur('#BADA55')
True
>>> ishexkleur('#fb1')
True
>>> ishexkleur('#5H2UBB327')
False
>>> ishexkleur('#663399')
True
>>> kleur('BADASS', letter2hex)
'#BADA55'
>>> kleur('fbi', letter2hex)
'#FB1'
>>> kleur('SHRUBBERY', letter2hex)
Traceback (most recent call last):
AssertionError: ongeldige kleur
>>> kleur('REBECCA', letter2hex)
Traceback (most recent call last):
AssertionError: ongeldige kleur
Rebecca Meyer is veel te vroeg van ons heengegaan13. Ze stierf op haar zesde verjaardag. Nadat ze verschillende kankerbehandelingen met succes had ondergaan, werd het meisje — één van de drie kinderen van Kathryn en Eric Meyer — uiteindelijk toch door deze vreselijke ziekte geveld. Ze zal voor eeuwig herinnerd worden doorheen de kleurrijke levensader van het web.
De dood van een kind is altijd een tragische gebeurtenis waaraan mensen van goede wil op tal van manieren zin proberen te geven. Eric Meyer — Rebecca's vader — is als persoon zeer geliefd binnen de wereld van webdesign en webdevelopment, zowel door zijn kennis van de kleinste geheimen van Cascading Style Sheets14 (CSS) die gebruikt worden voor de opmaak en vormgeving van webpagina's, als voor de generositeit, de duidelijkheid en de welwillendheid waarmee hij deze kennis deelt met zijn medemensen. Hij is ook altijd een voorvechter geweest van gemeenschappelijke standaarden en een drijvende kracht om ervoor te zorgen dat browsers van verschillende leveranciers hun CSS-ondersteuning op elkaar blijven afstemmen. Een zaak die het werk van vele webdesigners en programmeurs een stuk makkelijker maakt.
Eric Meyer is op een zeer geëngageerde manier online aanwezig. Hij was bijvoorbeeld één van de eersten die zijn grote bezorgdheid uitte15 bij het plotselinge offline gaan van Mark Pilgrim — een andere bekende goeroe van webstandaarden. Mark Pilgrim bleek uiteindelijk gezond en wel te zijn, maar was gewoon zijn online leven moe en had daarom al zijn websites van het Internet verwijderd16. Rebecca's diagnose, behandeling, strijd en overlijden werden door velen opgevolgd via de sociale media nadat Eric Meyer bij de online gemeenschap had aangeklopt op zoek naar morele steun voor hem en zijn gezin.
Veel vrienden, kennissen en collega's van Eric Meyer zochten naar een geschikte manier om Rebecca's korte leven een blijvende herinnering te geven. Het koppel stelde twee goede doelen voor waaraan mensen in haar naam een schenking konden doen en vroegen iedereen die de begrafenis persoonlijk zou bijwonen om paarse kleren te dragen, haar lievelingskleur. Slechts een handvol mensen in de online gemeenschap kende Rebecca persoonlijk of kon op de ceremonie aanwezig zijn.
Jeffrey Zeldman — een goede vriend en collega van Eric Meyer — bedacht een manier17 waarop iedereen via het Internet aan de familie Meyer zijn steun kon betuigen. Hij stelde voor dat iedereen die haar wilde gedenken en de familie een hart onder de riem wilde steken op 12 juni 2014 — de dag van Rebecca's begrafenis — gebruik zou maken van de hashtag #663399Becca. Het getal in de hashtag stelt de hexadecimale waarde (grondtal 16) voor van een bepaalde tint van de kleur paars.
Op 12 juni 2014 kleurde heel het Internet paars. Niet alleen de hashtag ging viraal, maar ook op Twitter en Facebook actualiseerden mensen hun avatar naar een volledig paars gekleurd vlak. Sommige websites met heel veel bezoekers uit de wereld van webdesign en webdevelopment — zoals Daring Fireball18 en Kottke.org19 — veranderden op die ene dag de achtergrondkleur of andere componenten van de website in het paars.
Maar er was nog een manier om de herinnering aan haar levend te houden. Webstandaarden laten immers toe om het volledige spectrum aan kleuren te specificeren aan de hand van drie getallen uit het interval 0–255 (decimaal) of 00–FF (hexadecimaal) die de rood-groen-blauw-componenten van de kleur vastleggen. Maar er zijn ook een beperkt aantal kleuren die een eigen naam gekregen hebben20, bijvoorbeeld "palegoldenrod" of "crimson".
Sommige vrienden en collega's van Eric Meyer stelden voor dat in die geest de kleur #663399 zou kunnen verbonden worden aan de naam "beccapurple". Toen Eric Meyer vernam op welke manier ze zijn dochter zouden willen vereren, vroeg21 hij dat als de naam werd aangenomen, het dan "rebeccapurple" zou mogen zijn. Enkele weken voor haar dood had zijn dochter immers gezegd dat ze haar "babynaam" Becca van zich af zou gooien, en op haar zesde verjaardag Rebecca zou worden. Ze leefde bijna twaalf uur met die naam. Het voorstel werd in sneltempo door de verschillende werkgroepen geloodst, en werd op 21 juni 2014 goedgekeurd22. Het document met het voorstel van de specificatie23 werd onmiddellijk bijgewerkt en commissieleden van Mozilla, Apple, Google en Microsoft kwamen direct overeen om de naam in al hun browsers te ondersteunen.
Als een ontwerper in de toekomst die bepaalde tint van paars wil gebruiken, dan zal #663399 altijd werken. Maar het benoemen van de kleur met Rebecca's volledige naam zal ook werken. Niet elk kind of elke persoon die veel te vroeg van ons heengaat kan op deze manier in herinnering gebracht worden, maar voor Rebecca leek het zeker gepast. Haar naam staat niet alleen in steen gebijteld, maar ook in de kleur rebeccapurple.