Lingo is een spelletje waarbij een woord moet geraden worden. Het aantal letters van dit woord is gegeven, en doorgaans wordt ook de eerste letter gegeven. Om het woord te achterhalen kan de speler een woord met het juiste aantal letters opgeven. De computer geeft dan aan welke letters correct zijn en op de juiste plaats staan, en welke letters wel voorkomen in het woord dat moet geraden worden, maar niet op de juiste plaats staan. In onderstaand voorbeeld worden deze twee soorten tips respectievelijk aangeduid met een rode en een gele kleur.
Als je nog niet met dit spelletje vertrouwd zou zijn, dan kan je het bijvoorbeeld hier1 eens online spelen om het in de vingers te krijgen. Maar pas op, het kan verslavend werken.
Schrijf een functie lingo met twee parameters: geraden en gezocht. Aan beide parameters moeten strings doorgegeven worden die respectievelijk een woord bevatten dat de gebruiker heeft opgegeven, en het verborgen woord dat door de gebruiker moet gezocht worden. Je mag ervan uitgaan dat beide strings enkel bestaan uit kleine letters en even lang zijn. De functie moet een string als resultaat teruggeven die het woord bevat dat de gebruiker heeft opgegeven, maar waarvan de letters die correct zijn en op de juiste plaats staan tussen vierkante haakjes staan en de letters die wel in het te raden woord voorkomen maar niet op de juiste plaats staan tussen ronde haakjes staan. Hierbij moeten de volgende regels in acht genomen worden:
Eenzelfde letter uit het gezochte woord kan nooit leiden tot meerdere markeringen in het geraden woord. Als een bepaalde letter meerdere keren voorkomt in het gezochte woord, dan moeten letters die in het geraden woord op de juiste plaats staan prioritair gemarkeerd worden boven letters die niet op de juiste plaats staan.
Als een bepaalde letter uit het gezochte woord twee of meer keer voorkomt in het geraden woord, en bij één van die voorkomens staat de letter ook op de juiste positie, dan moet deze positie gemarkeerd worden.
Als een bepaalde letter uit het gezochte woord twee of meer keer voorkomt in het geraden woord, maar alle voorkomens staan op de verkeerde positie, dan moet de meest links van deze posities gemarkeerd worden.
Opeenvolgende letters die allemaal tussen vierkante haakjes staan, moeten samen tussen één paar vierkante haakjes geplaatst worden.
Opeenvolgende letters die allemaal tussen ronde haakjes staan, moeten samen tussen één paar ronde haakjes geplaatst worden.
>>> lingo('camelot', 'cembalo')
'[c](a)[m](elo)t'
>>> lingo('inquisition', 'reconquista')
'(inqu)i(s)i(t)i(o)n'
>>> lingo('python', 'embryo')
'p(y)th(o)n'
>>> lingo('megalomaniacally', 'circumstantiated')
'(me)g(a)loma(ni)a(c)[a]lly'