Pour ce sixième défi proposé par SpiceGuid, l'équipe de developpez.com vous propose un challenge assez court qui peut laisser place à l'optimisation.
Challenge :
Il s'agit d'écrire une fonction (s: string) → string qui renvoie un palindrome p tel que:
- s contient p
- s ne contient aucun palindrome qui soit strictement plus long que p
On rappelle qu'un palindrome est une chaîne de caractère dont l'ordre de lettre est identique, selon que la lise par la gauche ou par la droite.
Formellement, une chaîne s est un palindrome si et seulement si :
Pour tout i de 0 à taille(s)-1, s[i] = s[taille(s)-1-i]
Les règles
Il n'y a pas de règle particulière (évidemment, il faut que la solution proposée fonctionne). Vous pouvez proposer des solutions aussi bien dans des langages fonctionnels (caml, haskell, scheme, lisp...) qu'impératif. Le public pourra ainsi juger du code suivant divers critères :
- la maintenabilité
- la simplicité
- le fait qu'il soit optimisé
Le public pourra également juger les différences entre une solution fonctionnelle et une solution impérative. Il lui sera ainsi plus facile de voir, pour un même problème, les différences entre divers paradigmes.
Pour répondre, il vous suffit de poster à la suite.
A vos claviers
de votre participation.
__________________________
Sujet proposé par SpiceGuid