Class: Clock
- Inherits:
-
Object
- Object
- Clock
- Defined in:
- lib/clock.rb
Overview
Useage: ‘ruby -Ilib ./bin/clock 27,0` or `ruby -Ilib ./bin/clock 30,325`
Class Method Summary collapse
-
.add_minute ⇒ Object
queue to the minute track.
-
.run_ball_clock(balls, run_time) ⇒ Json
Json hash for min, five_min, hour and main queues.
Instance Method Summary collapse
-
#add_minute(addsaballfromthebeginingofthemain) ⇒ Object
queue to the minute track.
Class Method Details
.add_minute ⇒ Object
queue to the minute track. Once the minute track is full the ball will drop to the five minute track triggering in reverse order the minute track to deposit to the main queue. When the five minute track is full it will pass the next ball from from the main queue to the hour track which triggers the five min track to drop its balls in reverse order to the main queue. When hour track is full will drop balls in reverse order to the main queue.
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/clock.rb', line 20 def self.add_minute if @min_track.length < 4 @min_track << @current_que.shift elsif @five_min_track.length < 11 @five_min_track << @current_que.shift reverse_track = @min_track.reverse @current_que.concat(reverse_track) @min_track = [] elsif @hour_track.length < 11 @hour_track << @current_que.shift reverse_track = @min_track.reverse @current_que.concat(reverse_track) @min_track = [] reverse_five_min_track = @five_min_track.reverse @current_que.concat(reverse_five_min_track) @five_min_track = [] else que_ball = @current_que.shift reverse_track = @min_track.reverse @current_que.concat(reverse_track) @min_track = [] reverse_five_min_track = @five_min_track.reverse @current_que.concat(reverse_five_min_track) @five_min_track = [] reverse_hour_track = @hour_track.reverse @current_que.concat(reverse_hour_track) @current_que << que_ball @hour_track = [] @hours_passed += 12 @cycle_days = @hours_passed / 24 if @current_que == @start_order @repeat = true end end end |
.run_ball_clock(balls, run_time) ⇒ Json
Returns json hash for min, five_min, hour and main queues. If no runtime is provided will calculate days tell que repeats.
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/clock.rb', line 61 def self.run_ball_clock(balls, run_time) @current_que = [] @hours_passed = '0'.to_i @repeat = false min_left = run_time.to_i @start_order = Array.new(balls.to_i) { |i| i + 1 } @start_order.freeze @min_track = [] @five_min_track = [] @hour_track = [] que_balls = @start_order.clone que_balls.each do |ball| @current_que << ball end if run_time.to_i == 0 || nil until @repeat == true add_minute end result = puts "Clock cycles in: #{@cycle_days} day\(s\)\." else until min_left == 0 add_minute min_left -= 1 end json_clock = { min: @min_track, fiveMin: @five_min_track, hour: @hour_track, main: @current_que} result = JSON.generate(json_clock) end result end |
Instance Method Details
#add_minute(addsaballfromthebeginingofthemain) ⇒ Object
queue to the minute track. Once the minute track is full the ball will drop to the five minute track triggering in reverse order the minute track to deposit to the main queue. When the five minute track is full it will pass the next ball from from the main queue to the hour track which triggers the five min track to drop its balls in reverse order to the main queue. When hour track is full will drop balls in reverse order to the main queue.
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/clock.rb', line 20 def self.add_minute if @min_track.length < 4 @min_track << @current_que.shift elsif @five_min_track.length < 11 @five_min_track << @current_que.shift reverse_track = @min_track.reverse @current_que.concat(reverse_track) @min_track = [] elsif @hour_track.length < 11 @hour_track << @current_que.shift reverse_track = @min_track.reverse @current_que.concat(reverse_track) @min_track = [] reverse_five_min_track = @five_min_track.reverse @current_que.concat(reverse_five_min_track) @five_min_track = [] else que_ball = @current_que.shift reverse_track = @min_track.reverse @current_que.concat(reverse_track) @min_track = [] reverse_five_min_track = @five_min_track.reverse @current_que.concat(reverse_five_min_track) @five_min_track = [] reverse_hour_track = @hour_track.reverse @current_que.concat(reverse_hour_track) @current_que << que_ball @hour_track = [] @hours_passed += 12 @cycle_days = @hours_passed / 24 if @current_que == @start_order @repeat = true end end end |