20 lines
497 B
C#
20 lines
497 B
C#
namespace AdventOfCode;
|
|
|
|
public static class EnumerableExtensions
|
|
{
|
|
public static IEnumerable<TSource> Flatten<TSource>(this TSource root, Func<TSource, IEnumerable<TSource>> flattener)
|
|
{
|
|
var toVisit = new Stack<TSource>();
|
|
toVisit.Push(root);
|
|
|
|
while (toVisit.TryPop(out var node))
|
|
{
|
|
yield return node;
|
|
|
|
foreach (var child in flattener(node))
|
|
{
|
|
toVisit.Push(child);
|
|
}
|
|
}
|
|
}
|
|
} |