Bienvenue au concours poletti, waaaaouuuuuu, ses codeeeuuurs, ses hashmaps... hum. Bienvenue à tous.
Aujourd'hui la 3ème énigme est plutôt un défi tout public. Pourquoi ? Parce que chacun, avec son expérience, pourra la trouver difficile. Petite subtilité cependant, je participe. Nous sommes donc tous à la recherche de la meilleure solution.
Objectif moi papa, toi fiston.
Ecrire une fonction (et une seule) capable de traiter un objet dont chaque clé représente un noeud et possède un couple id/parentId. La fonction doit retourner n'importe quel autre objet: element, string, object, ... Mais ce retour doit réprésenter l'arboréscence de l'objet visité.
Mise en situation
Vous écrivez une application et cette application affiche un certains nombre de composants d'arboréscence (comme l'explorer de windows). La particularité de cette application est qu'elle communique avec une base de données et dans cette base de données se trouve, par exemple, une table Categories dont les premières entrées ressemblent à ceci :
Le but de la manoeuvre est donc de fournir à votre application une fonction capable de traiter cet objet et qui en retourne une vue arborée comme le montre cette image :
http://www.nxstyle.free.fr/strret.gif
Ici, l'objet retourné est de type string
Télécharger l'objet Categories (utf-8)
Comment gagner
1. En écrivant la fonction la plus courte et la plus élégante possible qui ne fait appel qu'à ses propres moyens (variables locales, récursivité, tableau d'arguments possible...)
2. En ne déclarant aucune variable globale si ce n'est l'objet visité, qui est l'unique argument de votre fonction :
3. En n'opérant aucune modification sur l'objet visité. Donc, pas de drapeau (flag), pas de delete etc...
4. En reunissant la majorité des votants pour votre fonction.
Edit
- Mise en situation ajoutée.
- Fichiers corrigés.
N'hésitez pas à demander plus d'infos ici.
Modifié par Ze Nenex (06 Nov 2007 - 16:48)
Aujourd'hui la 3ème énigme est plutôt un défi tout public. Pourquoi ? Parce que chacun, avec son expérience, pourra la trouver difficile. Petite subtilité cependant, je participe. Nous sommes donc tous à la recherche de la meilleure solution.
Objectif moi papa, toi fiston.
Ecrire une fonction (et une seule) capable de traiter un objet dont chaque clé représente un noeud et possède un couple id/parentId. La fonction doit retourner n'importe quel autre objet: element, string, object, ... Mais ce retour doit réprésenter l'arboréscence de l'objet visité.
Mise en situation
Vous écrivez une application et cette application affiche un certains nombre de composants d'arboréscence (comme l'explorer de windows). La particularité de cette application est qu'elle communique avec une base de données et dans cette base de données se trouve, par exemple, une table Categories dont les premières entrées ressemblent à ceci :
[b]id[/b] [b]parentId[/b] [b]name[/b]
1 0 Ma catégorie 1
2 0 Ma catégorie 2
...
20 4 Ma sous-catégorie H
Après une requête effectuée par votre application, le serveur vous retourne un objet JavaScript. l'objet Categories représenté ci-dessous est un exemple mais vous pourriez tout aussi bien avoir un Array à la place, question de protocole.Le but de la manoeuvre est donc de fournir à votre application une fonction capable de traiter cet objet et qui en retourne une vue arborée comme le montre cette image :
http://www.nxstyle.free.fr/strret.gif
Ici, l'objet retourné est de type string
Télécharger l'objet Categories (utf-8)
Comment gagner
1. En écrivant la fonction la plus courte et la plus élégante possible qui ne fait appel qu'à ses propres moyens (variables locales, récursivité, tableau d'arguments possible...)
2. En ne déclarant aucune variable globale si ce n'est l'objet visité, qui est l'unique argument de votre fonction :
function getTree(obj) { ... }
3. En n'opérant aucune modification sur l'objet visité. Donc, pas de drapeau (flag), pas de delete etc...
4. En reunissant la majorité des votants pour votre fonction.
Edit
- Mise en situation ajoutée.
- Fichiers corrigés.
N'hésitez pas à demander plus d'infos ici.
Modifié par Ze Nenex (06 Nov 2007 - 16:48)