I'll resubmit my entry,
- fixed typo "initialize"
- cleaner exit from message passing code
regards,
-tom
#!/usr/bin/env ruby
# vim:et:ts=4:sw=4
$n = 0 if $DEBUG
class RLWP
def initialize
@nxt = nil
end
attr_accessor :nxt
def makecont
passesleft, message = callcc { |cont|
return cont
}
if passesleft <= 0
puts $n if $DEBUG
throw :DONE
end
$n += 1 if $DEBUG
@nxt.call(passesleft - 1, message)
end
end
def run(n, cycles, msg)
catch(:DONE) {
process = Array.new(n) { RLWP.new }
cont = process.collect { |p| p.makecont }
process.each_with_index { |p,i| p.nxt = cont[(i+1) % n] }
cont[0].call(n * cycles, msg)
}
end
run ARGV[0].to_i, ARGV[1].to_i, "xyzzy"