Bonjour à tous, je suis tombé sur un article proposant un problème sympathique, je me permets de vous le partager.

Petit contest, comment obtenir l’affichage suivant:

a
├─b
│ ├─c
│ │ └─d
│ └─e
│   └─f
└─g
  ├─h
  │ └─i
  └─j

(astuce: vous pouvez copier/coller les caractères semi-graphiques depuis cet article même…)

Avec l’entrée suivante :

var root = new Node("a",
    new Node("b",
        new Node("c",
            new Node("d")),
        new Node("e",
            new Node("f"))),
    new Node("g",    
        new Node("h",
            new Node("i")),
        new Node("j")));

Le modèle étant assez basique :

class Node
{
    public Node(string text, params Node[] children)
    {
        this.Text = text;
        this.Children = children ?? new Node[] {};
    }
    public string Text { get; private set; }
    public IList<Node> Children { get; private set; }
}

Je vous laisse implémenter la classe Dumper !

sealed class Dumper
{
    static public string Dump(Node root) { /* ... */ }
    /* ... */
}

Je suis preneur de tout type d’implémentation (CSharp, VB, Java, PHP, FSharp…)

Mitsu