15 lines
383 B
Text
15 lines
383 B
Text
func merge_streams(streams) {
|
|
var s = streams.map { |stream|
|
|
Pair(stream, stream.readline)
|
|
}.grep {|p| defined(p.value) }
|
|
|
|
gather {
|
|
while (s) {
|
|
var p = s.min_by { .value }
|
|
take(p.value)
|
|
p.value = (p.key.readline \\ s.delete_if { _ == p })
|
|
}
|
|
}
|
|
}
|
|
|
|
say merge_streams(ARGV.map {|f| File(f).open_r }).join("\n")
|