Steve "Woz" Wozniak — medeoprichter van Apple Computers — verzamelde onder andere telefoonnummers. Zijn grote droom was om een telefoonnummer te bemachtigen waarin slechts één cijfer herhaald wordt. Het grootste deel van zijn leven had Silicon Valley echter geen zonenummers met drie gelijke cijfers. Dus moest Woz zich tevreden stellen met telefoonnummers zoals 221-111-1111.
Toen hij op een dag echter het mobiele telefoonverkeer aan het afluisteren was, viel hem op dat er een nieuw zonenummer in gebruik genomen was: 888. Na maanden van administratieve rompslomp en wachten kreeg hij het uiteindelijk in handen: 888-888-8888. Dit was zijn nieuw mobiel telefoonnummer en meteen zijn meest waardevolle collectors item.
Al snel bleek echter dat het telefoonnummer zo goed als onbruikbaar was. Hij ontving immers meer dan honderd verkeerd verbonden oproepen per dag. Een dergelijk aantal verkeerde oproepen was op het eerste gezicht vrij onverklaarbaar, gegeven het feit dat het quasi onmogelijk is om het nummer verkeerd in te voeren. Wat het nog vreemder maakte is dat er nooit iemand te horen was aan de andere kant van de lijn. Enkel stilte. Wel, eigenlijk stilte in verschillende vormen, gaande van doodse stilte, soms met het geluid van een televisie in de achtergrond, of iemand die zachtjes aan het praten was in het Engels of het Spaans, of bizarre gorgelende geluiden. Woz bleef vaak geïntrigeerd luisteren.
Maar op een dag had hij de telefoon aan zijn oor gedrukt, toen Woz duidelijk een vrouwenstem op een zekere afstand hoorde zeggen "Hé, wat ben je daarmee aan het doen?". De hoorn aan de andere kant werd weggerukt en de verbinding werd verbroken. Dit deed de puzzel in elkaar vallen. De honderden gesprekken, de doodse stilte, de gorgelende geluiden: baby's. Ze hadden de hoorn opgenomen en waren een toets aan het indrukken aan de onderkant van het toestel. Opnieuw en opnieuw. En het maakte zelfs een geluid: "Biep biep biep biep biep biep biep biep biep biep." De Amerikaanse kinderen haalden zo onbewust hun eerste kwajongensstreeks uit, en de persoon die hun telefoontjes beantwoordde was Woz.
Woz startte zijn carrière als telefoongrappenmaker en hacker van telefoonsystemen, dus zit er ergens wel een grond van rechtvaardigheid in dit verhaal.
Om te bepalen hoe groot de kans is dat een baby toevallig een bepaald telefoonnummer zal intoetsen, hebben we een scoresysteem voor telefoonnummers ontwikkeld. Hoe hoger de score, hoe kleiner de kans dat het nummer puur toevallig zal opgebeld worden. Om de score te berekenen, gaan we uit van onderstaand toetsenbord van een mobiel telefoontoestel. Hierbij hebben we de rijen en kolommen van het rooster dat gevormd wordt door de toetsen op de aangegeven manier genummerd. De toets 8 staat bijvoorbeeld op rij 2 en kolom 1.
Gevraagd wordt:
Schrijf een functie positie waaraan een getal $$n \in \mathbb{N}$$ moet doorgegeven worden, waarvoor geldt dat $$0 \leq n < 10$$. Dit getal stelt een toets op het toetsenbord van een mobiele telefoontoestel voor. De functie moet twee natuurlijke getallen teruggeven, die respectievelijk het rijnummer en het kolomnummer van de toets op het toetsenbord voorstellen. Probeer het aantal voorwaarden die moeten getest worden om deze functie te implementeren tot een minimum te herleiden.
Gebruik de functie positie om een functie verplaatsing te schrijven waaraan twee getallen $$n, m \in \mathbb{N}$$ moeten doorgegeven worden, waarvoor geldt dat $$0 \leq n, m < 10$$. Deze getallen stellen twee toetsen op het toetsenbord van een mobiel telefoontoestel voor. De functie moet een natuurlijk getal teruggeven, dat aangeeft hoeveel posities je je vinger minimaal horizontaal en verticaal moet verplaatsen om van de ene toets naar de andere toets op het toetsenbord te bewegen. We gaan er hierbij van uit dat je je vinger nooit diagonaal beweegt. Elke verplaatsing naar een andere rij of kolom wordt als één enkele verplaatsing geteld. Om van toets 8 naar toets 1 te bewegen, moet je bijvoorbeeld één horizontale verplaatsing en twee verticale verplaatsingen maken, goed voor een totaal van drie verplaatsingen.
Gebruik de functie verplaatsing om een functie vingerbeweging te schrijven. Aan deze functie moet de stringvoorstelling van een telefoonnummer doorgegeven worden. Deze string mag bestaan uit een willekeurige reeks karakters, maar enkel de cijfers van de string vormen het eigenlijke telefoonnummer. De functie moet een natuurlijk getal teruggeven, dat de totale verplaatsing voorstelt die je vingers moeten maken als achtereenvolgens alle cijfers op het toetsenbord van een mobiele telefoon intoetst worden.
>>> positie(8)
(2, 1)
>>> positie(0)
(3, 1)
>>> verplaatsing(8, 8)
0
>>> verplaatsing(8, 9)
1
>>> verplaatsing(8, 1)
3
>>> vingerbeweging('888-888-8888')
0
>>> vingerbeweging('053/67.83.47')
16