rendered paste bodyrequire 'fsm'class FilosofoChino def initialize() @veces_come = 10 @veces_piensa = 0 initial_transition = Transition.new('comiendo', proc { puts "Agarra palitos" }) q0 = State.new([ Transition.new('comiendo', method(:comer), lambda { puede_comer? }), Transition.new('pensando', method(:pasar_a_pensar), lambda { !puede_comer? }) ], proc { false }) q1 = State.new([ Transition.new('pensando', method(:pensar), lambda { puede_pensar? }), Transition.new('comiendo', method(:pasar_a_comer), lambda { !puede_pensar? }) ], proc { false }) states = { 'comiendo' => q0, 'pensando' => q1 } @fsm = FSM.new(initial_transition, states) end def puede_comer? @veces_come > 0 end def puede_pensar? @veces_piensa > 0 end def pensar(f,t) puts "Filosofo piensa. Piensa #{@veces_piensa} mas veces."; @veces_piensa -= 1 end def comer(f,t) puts "Filosofo come. Come #{@veces_come} mas veces."; @veces_come -= 1 end def pasar_a_pensar(f,t) puts "Suelta los palitos. Empieza a pensar." @veces_piensa = 10 end def pasar_a_comer(f,t) puts "Deja de pensar. Agarra los palitos." @veces_come = 10 end def run while true puts "step" @fsm.process sleep(0.5) end endendf = FilosofoChino.new()f.run