Cette semaine, c'est Nicolas qui vous propose un #KataOfTheWeek : Générateur de S-Séquences

Briefing du Kata : Dans ce challenge viens du concours "Meilleur Dev de France Mai 2014", vous devez convertir un fichier XML au format S-Expression. Les jeux de données en entrée sont constitués de balises ouvrantes et fermantes. Entre la balise ouvrante et la balise fermante d'une paire (même nom), il y a zéro, une ou plusieurs balises et ainsi de suite.

On veut transformer cette notation en utilisant des s-expressions plutôt que des balises, c'est-à-dire en écrivant "(xxx…)" plutôt que "\…\". Dans notre cas… est soit nul, soit correspond à d'autres balises.

Exemple :

  • <access><blockcode><a><blockcode><blockcode></blockcode></blockcode></a></blockcode></access>

Doit être transformé en:

  • (access(blockcode(a(blockcode(blockcode)))))

Le programme doit aussi reconnaître un jeu de données mal formé (pour lequel il y a erreur de correspondance entre balises entrantes et fermantes) et écrire à la place du fichier transformé un message d'erreur standardisé de la forme E n </xxx> </yyy> (chaque terme est séparé par un espace) où :- E est la lettre 'E' (qui signale une erreur)

  • n indique la position en caractères du début de la première balise incorrecte (c'est-à-dire la position de son caractère <)
  • </xxx> correspond à la première balise (fermante) incorrecte
  • </yyy> correspond à la balise (fermante) attendue

Entrée : Une chaîne de caractères contenant une série de balises ouvrantes et fermantes bien ou mal formée.

Sortie : La S-Expression correspondante ou le message d'erreur correspondant.

Saurez-vous résoudre le problème ?

Bon courage ! Retrouvez la solution dans cet article 😉