class TaskList
def items
@items ||= []
end
def append(tree)
items << tree
tree.children.sort.each do |subtree|
append subtree
end
end
end
class Task
attr_reader :name, :children
def initialize(name, children = [])
@name = name
@children = children
end
def <=>(other)
name <=> other.name
end
end
task_list = TaskList.new
task_list.append Task.new('Foo', [
Task.new('Car', [
Task.new('Ddd'),
Task.new('Aaa'),
Task.new('Ccc'),
Task.new('Bbb'),
]),
Task.new('Bar'),
])
puts task_list.items.map(&:name)
Y2xhc3MgVGFza0xpc3QKICBkZWYgaXRlbXMKICAgIEBpdGVtcyB8fD0gW10KICBlbmQKCiAgZGVmIGFwcGVuZCh0cmVlKQogICAgaXRlbXMgPDwgdHJlZQogICAgdHJlZS5jaGlsZHJlbi5zb3J0LmVhY2ggZG8gfHN1YnRyZWV8CiAgICAgIGFwcGVuZCBzdWJ0cmVlCiAgICBlbmQKICBlbmQKZW5kCgpjbGFzcyBUYXNrCiAgYXR0cl9yZWFkZXIgOm5hbWUsIDpjaGlsZHJlbgoKICBkZWYgaW5pdGlhbGl6ZShuYW1lLCBjaGlsZHJlbiA9IFtdKQogICAgQG5hbWUgPSBuYW1lCiAgICBAY2hpbGRyZW4gPSBjaGlsZHJlbgogIGVuZAoKICBkZWYgPD0+KG90aGVyKQogICAgbmFtZSA8PT4gb3RoZXIubmFtZQogIGVuZAplbmQKCnRhc2tfbGlzdCA9IFRhc2tMaXN0Lm5ldwoKdGFza19saXN0LmFwcGVuZCBUYXNrLm5ldygnRm9vJywgWwogIFRhc2submV3KCdDYXInLCBbCiAgICBUYXNrLm5ldygnRGRkJyksCiAgICBUYXNrLm5ldygnQWFhJyksCiAgICBUYXNrLm5ldygnQ2NjJyksCiAgICBUYXNrLm5ldygnQmJiJyksCiAgXSksCiAgVGFzay5uZXcoJ0JhcicpLApdKQoKcHV0cyB0YXNrX2xpc3QuaXRlbXMubWFwKCY6bmFtZSk=