Ik heb een geheimpje voor jou. Fksl jfsql pzoucx!
Oefening 1: Geheime berichtjes: Encoderen/Decoderen
Het eindresultaat
Project
In dit project staan Unix en twee andere sprites al klaar. Zorg jij ervoor dat volgende dingen allemaal mogelijk zijn:
- Encodeer een woord: een woord omzetten naar codetaal
- Decodeer een woord: een woord in code taal omzetten naar gewone taal
Stappenplan
Stap 1: Wat is encoderen en decoderen?
Encoderen en decoderen is tekst (strings) omvormen tot een andere tekst (strings). Dit doe je door gebruik te maken van een algoritme. In dit algoritme vertel je de computer hoe je letters van het gegeven woord moet omzetten naar andere letters.
Met encoderen bedoelen we dat we normale, verstaanbare woorden zullen omvormen naar een codetaal. Met decoderen bedoelen we net het omgekeerde, namelijk codetaal omzetten naar normale, verstaanbare woorden.
In deze oefening zullen we eerst een gemakkelijk algoritme maken, en als extra kan je ook een moeilijkere variant proberen te maken.
Stap 2: Hoe werken die knoppen?
Aan de hand van signalen kan je Unix laten weten welke knop is ingedrukt. Zo weet Unix welke vraag hij kan stellen. Gebruik bijvoorbeeld de signalen “encodeer” en “decodeer”.
Stap 3: Stel de juiste vraag!
Wanneer je een signaal hebt ontvangen van de knoppen, doe je het volgende:
- Stel de juiste vraag. (Wat je encoderen of decoderen?)
- Codeer het antwoord. (zie stap 5)
- Zeg het nieuw woord.
Stap 4: Wat is het codeer algoritme?
Het algoritme dat we zullen maken is eigenlijk heel simpel. We draaien het woord gewoon helemaal om. Dit is hetzelfde voor zowel het encoderen als het decoderen. Dit ziet er dus als volgt uit:
- Voor het encoderen: “appel” wordt “leppa”.
- Voor het decoderen: “leppa” wordt “appel”.
In deze oefening kan zowel het encoderen als het decoderen gebruik maken dezelfde code, en dus ook hetzelfde blokje dat we zullen maken!
Stap 5: Codeer het antwoord!
Maak eerst en vooral een nieuw blokje. Dit zou er als volgt uit moeten zien:
define Codeer (woord)
Na dit gedaan te hebben, hebben we nog twee variabelen nodig:
- De variabele positie: dit duidt de positie van de letter aan in het woord.
- De variabele nieuw woord: dit wordt het nieuwe woord.
Doe nu volgende dingen:
- Zorg ervoor dat de positie deze keer gelijk is aan de lengte van het woord. We willen namelijk beginnen met de laatste letter van het woord.
- Maak het nieuwe woord leeg. We starten altijd met een leeg nieuw woord.
- Elke letter gaan we daarna toevoegen aan het nieuwe woord. Vergeet de positie niet steeds te veranderen met -1! [TIP: gebruik het “herhaal”-blokje]
Evaluatie
Tijd om alles nog eens te testen om zeker te zijn dat alles goed werkt.
- Probeer eens een woord te encoderen. Wat is het resultaat?
- Decodeer nu datzelfde resultaat. Is dit hetzelfde als het woord dat je als eerste had ingevuld?
EXTRA
Dit was een oefening met een redelijk eenvoudig algortime dat we gebruikte om woorden te encoderen en te decoderen. Maar natuurlijk zijn er heel veel verschillende manieren om te encoderen en te decoderen. We zullen nu even ook een andere manier bespreken.
Volgende twee variabelen zijn heel belangrijk:
- alfabet: abcdefghijklmnopqrstuvwxyz
- codealfabet: nbvcxwmlkjhgfdsqpoiuytreza
Simpel uitgeleg werkt encoderen zo:
- Geef een woord, bijvoorbeeld “appel”.
- Doorloop alle letters van het woord en verander elke letter op de volgende manier:
- De letter “a” staat op positie 1 in het alfabet.
- In het codewoord staat op positie 1 de letter “n”.
- Doe dit voor alle letters en dan zou je voor het woord “appel” het woord “nqqxg” moeten krijgen.
Decoderen werkt dan omgekeerd:
- Geef een woord, bijvoorbeeld “hxoi”.
- Doorloop alle letters van het woord en verander elke letter op de volgende manier:
- De letter “h” staat op positie 11 in het codealfabet.
- In het alfabet staat op positie 11 de letter “K”.
- Doe dit voor alle letters en dan zou je voor het woord “hxoi” het woord “kers” moeten krijgen.
Probeer dit eens te maken. Als het jou lukt, kan je misschien beter verstaan wat Ruby allemaal zegt daar beneden.
Oplossing
De oplossing vind je hier!
rnyr, rnu bxd jkj igkf! Ben je klaar om ook de volgende oefening nog te maken?