Sorting algorithms/Sleep sort: Difference between revisions

Added Wren
(Remove unnecessary file extension in Raku's reactive programming example)
(Added Wren)
Line 1,880:
5
9
</pre>
 
=={{header|Wren}}==
More of a simulation than a 'true' sleep sort.
<lang ecmascript>import "timer" for Timer
import "io" for Stdout
import "os" for Process
 
var args = Process.arguments
var n = args.count
if (n < 2) Fiber.abort("There must be at least two arguments passed.")
var list = args.map{ |a| Num.fromString(a) }.toList
if (list.any { |i| i == null || !i.isInteger || i < 0 } ) {
Fiber.abort("All arguments must be non-negative integers.")
}
var max = list.reduce { |acc, i| acc = (i > acc) ? i : acc }
var fibers = List.filled(max+1, null)
System.print("Before: %(list.join(" "))")
for (i in list) {
var sleepSort = Fiber.new { |i|
Timer.sleep(1000)
Fiber.yield(i)
}
fibers[i] = sleepSort
}
System.write("After : ")
for (i in 0..max) {
var fib = fibers[i]
if (fib) {
System.write("%(fib.call(i)) ")
Stdout.flush()
}
}
System.print()</lang>
 
{{out}}
Sample run:
<pre>
$ wren sleepsort.wren 1 8 3 7 4 6
Before: 1 8 3 7 4 6
After : 1 3 4 6 7 8
</pre>
 
9,488

edits