# -*- encoding: UTF-8 -*-
module Yakumo_yukari
class Count_limit
attr_accessor :start , :limit , :add
attr_accessor :add_plus
attr_accessor :start_init
attr_accessor :type
attr_accessor :loopwait
attr_accessor :loopwait_wait
attr_accessor :loopwait_ex
attr_accessor :loopwait_ex_wait
attr_accessor :c
attr_accessor :hs
attr_accessor :msg # mijissou
def initialize hs = Hash.new
@hs = hs
@start = hs[:start] || 0
@limit = hs[:limit] || 0
@add = hs[:add] || 1
@add_plus = hs[:add_plus] || 0
@loopwait = 0
@loopwait_wait = hs[:loopwait] || 0
@loopwait_ex = hs[:loopwait_ex] || []
@loopwait_ex_wait = hs[:loopwait_ex_wait] || 0
@type = hs[:type] || nil
@msg = []
@c = hs[:start_init] || @start
case @type
when :loop_rev
if @add < 0
@start , @limit = @limit , @start
end
@func =->{ count_loop_rev }
when :loop
@func =->{ count_loop }
when :count_limit
@func =->{ count_limit }
else
p :err
exit
end
end
def call
@func.call
end
# 0...1...2...3...4...wait4...wait4...wait4...3...2...1...wait0...wait0
def count_loop_rev
if @loopwait > 1
@loopwait -= 1
return @c
end
@c += @add
@add += @add_plus
@add *= -1 if @c >= @limit || @c <= @start
@c = @limit if @c >= @limit
@c = @start if @c <= @start
if (@c >= @limit) or (@c <= @start)
@loopwait = @loopwait_wait
end
if @loopwait_ex.include? @c
if @loopwait_ex.class == Hash
@loopwait = @loopwait_ex[ @c ]
else
@loopwait = @loopwait_ex_wait
end
end
return @c
end
end
class << self
def loop_rev_create hs = Hash.new
Count_limit.new({ type: :loop_rev, }.merge( hs ))
end
end
end
a = Yakumo_yukari.loop_rev_create({
start: 0 ,
#start_init: 2 ,
limit: 10 ,
add: 1 ,
#loopwait: 3 ,
#loopwait_ex_wait: 3,
loopwait_ex: ({ 5 => 2 , 7 => 4 }) ,
#add_plus: 1 ,
})
puts "----loop_rev loopwait_ex----"
40.times do |i|
printf "%3d " % [ a.call ]
end
IyAtKi0gZW5jb2Rpbmc6IFVURi04IC0qLQogCiAKbW9kdWxlIFlha3Vtb195dWthcmkKICBjbGFzcyBDb3VudF9saW1pdAogICAgYXR0cl9hY2Nlc3NvciA6c3RhcnQgLCA6bGltaXQgLCA6YWRkCiAgICBhdHRyX2FjY2Vzc29yIDphZGRfcGx1cwogICAgYXR0cl9hY2Nlc3NvciA6c3RhcnRfaW5pdAogICAgYXR0cl9hY2Nlc3NvciA6dHlwZQogICAgYXR0cl9hY2Nlc3NvciA6bG9vcHdhaXQgCiAgICBhdHRyX2FjY2Vzc29yIDpsb29wd2FpdF93YWl0IAogICAgYXR0cl9hY2Nlc3NvciA6bG9vcHdhaXRfZXggICAKICAgIGF0dHJfYWNjZXNzb3IgOmxvb3B3YWl0X2V4X3dhaXQgICAKICAgIGF0dHJfYWNjZXNzb3IgOmMKICAgIGF0dHJfYWNjZXNzb3IgOmhzCiAgICBhdHRyX2FjY2Vzc29yIDptc2cgIyAgbWlqaXNzb3UKICAgIGRlZiBpbml0aWFsaXplIGhzID0gSGFzaC5uZXcKICAgICAgQGhzICAgICAgICAgICAgICAgPSBocwogICAgICBAc3RhcnQgICAgICAgICAgICA9IGhzWzpzdGFydF0gfHwgMAogICAgICBAbGltaXQgICAgICAgICAgICA9IGhzWzpsaW1pdF0gfHwgMAogICAgICBAYWRkICAgICAgICAgICAgICA9IGhzWzphZGRdICAgfHwgMQogICAgICBAYWRkX3BsdXMgICAgICAgICA9IGhzWzphZGRfcGx1c10gfHwgMAogICAgICBAbG9vcHdhaXQgICAgICAgICA9IDAKICAgICAgQGxvb3B3YWl0X3dhaXQgICAgPSBoc1s6bG9vcHdhaXRdIHx8IDAKICAgICAgQGxvb3B3YWl0X2V4ICAgICAgPSBoc1s6bG9vcHdhaXRfZXhdIHx8IFtdCiAgICAgIEBsb29wd2FpdF9leF93YWl0ID0gaHNbOmxvb3B3YWl0X2V4X3dhaXRdIHx8IDAKICAgICAgQHR5cGUgICAgICAgICAgICAgPSBoc1s6dHlwZV0gfHwgbmlsCiAgICAgIEBtc2cgICAgICAgICAgICAgID0gW10KICAgICAgQGMgPSBoc1s6c3RhcnRfaW5pdF0gfHwgQHN0YXJ0CiAKICAgICAgY2FzZSBAdHlwZQogICAgICB3aGVuIDpsb29wX3JldgogICAgICAgIGlmIEBhZGQgPCAwCiAgICAgICAgICAgQHN0YXJ0ICwgQGxpbWl0ID0gQGxpbWl0ICwgQHN0YXJ0IAogICAgICAgIGVuZAogICAgICAgIEBmdW5jID0tPnsgY291bnRfbG9vcF9yZXYgfQogICAgICB3aGVuIDpsb29wCiAgICAgICAgQGZ1bmMgPS0+eyBjb3VudF9sb29wIH0KICAgICAgd2hlbiA6Y291bnRfbGltaXQKICAgICAgICBAZnVuYyA9LT57IGNvdW50X2xpbWl0IH0gICAgICAgIAogICAgICBlbHNlCiAgICAgICAgcCA6ZXJyCiAgICAgICAgZXhpdAogICAgICBlbmQKICAgIGVuZAogICAgCiAgICBkZWYgY2FsbAogICAgICBAZnVuYy5jYWxsCiAgICBlbmQKIAogICAgIyAwLi4uMS4uLjIuLi4zLi4uNC4uLndhaXQ0Li4ud2FpdDQuLi53YWl0NC4uLjMuLi4yLi4uMS4uLndhaXQwLi4ud2FpdDAKICAgIGRlZiBjb3VudF9sb29wX3JldgogICAgICBpZiBAbG9vcHdhaXQgPiAxCiAgICAgICAgQGxvb3B3YWl0IC09IDEKICAgICAgICByZXR1cm4gQGMKICAgICAgZW5kCiAgICAgIEBjICs9IEBhZGQKICAgICAgQGFkZCArPSBAYWRkX3BsdXMKICAgICAgQGFkZCAqPSAtMSBpZiBAYyA+PSBAbGltaXQgfHwgQGMgPD0gQHN0YXJ0CiAgICAgIEBjID0gQGxpbWl0IGlmIEBjID49IEBsaW1pdAogICAgICBAYyA9IEBzdGFydCBpZiBAYyA8PSBAc3RhcnQKICAgICAgaWYgKEBjID49IEBsaW1pdCkgb3IgKEBjIDw9IEBzdGFydCkKICAgICAgICAgQGxvb3B3YWl0ID0gQGxvb3B3YWl0X3dhaXQgCiAgICAgIGVuZAogICAgICBpZiBAbG9vcHdhaXRfZXguaW5jbHVkZT8gQGMKICAgICAgICBpZiBAbG9vcHdhaXRfZXguY2xhc3MgPT0gSGFzaAogICAgICAgICAgQGxvb3B3YWl0ID0gQGxvb3B3YWl0X2V4WyBAYyBdCiAgICAgICAgZWxzZQogICAgICAgICAgQGxvb3B3YWl0ID0gQGxvb3B3YWl0X2V4X3dhaXQKICAgICAgICBlbmQKICAgICAgZW5kCiAgICAgIHJldHVybiBAYwogICAgZW5kCiAgZW5kCiAKICBjbGFzcyA8PCBzZWxmCgogICAgZGVmIGxvb3BfcmV2X2NyZWF0ZSBocyA9IEhhc2gubmV3CiAgICAgIENvdW50X2xpbWl0Lm5ldyh7IHR5cGU6IDpsb29wX3JldiwgfS5tZXJnZSggaHMgKSkKICAgIGVuZCAgCiAKICBlbmQKZW5kCiAKIAogCmEgPSBZYWt1bW9feXVrYXJpLmxvb3BfcmV2X2NyZWF0ZSh7CnN0YXJ0OiAwICwKI3N0YXJ0X2luaXQ6IDIgLApsaW1pdDogMTAgLAphZGQ6IDEgLAojbG9vcHdhaXQ6IDMgLAojbG9vcHdhaXRfZXhfd2FpdDogMywKbG9vcHdhaXRfZXg6ICh7IDUgPT4gMiAsIDcgPT4gNCB9KSAsCiNhZGRfcGx1czogMSAsCn0pCiAKcHV0cyAiLS0tLWxvb3BfcmV2IGxvb3B3YWl0X2V4LS0tLSIKNDAudGltZXMgZG8gfGl8CiAgcHJpbnRmICIlM2QgICIgJSBbIGEuY2FsbCBdCmVuZAogCiA=