Advertisement
Guest User

Untitled

a guest
May 24th, 2015
234
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.16 KB | None | 0 0
  1. require 'benchmark'
  2.  
  3. class Data
  4. class << self
  5. @@key_values = {}
  6.  
  7. def put(key, value, time)
  8. @@key_values[key] ||= []
  9. @@key_values[key] << {time: time, value: value}
  10. true
  11. end
  12.  
  13. # 2 in [1, 2, 3, 4, 5]
  14. # 3 in [1, 2, 3, 4, 5]
  15. def get(key, test_time)
  16. return nil if test_time < @@key_values[key][0][:time]
  17. iterate_on_positions(@@key_values[key], test_time, 0, @@key_values[key].length - 1)
  18. end
  19.  
  20. def iterate_on_positions(array, test_time, start_pos, end_pos)
  21. position = ((start_pos + end_pos) / 2).ceil
  22.  
  23. puts "Testing at #{position}"
  24.  
  25. if start_pos - end_pos == 1
  26. array[position][:value]
  27. elsif test_time == array[position][:time]
  28. array[position][:value]
  29. elsif test_time < array[position][:time]
  30. iterate_on_positions(array, test_time, start_pos, position - 1)
  31. else
  32. iterate_on_positions(array, test_time, position + 1, end_pos)
  33. end
  34. end
  35. end
  36. end
  37.  
  38. scale = 100000000
  39.  
  40. 0.upto(scale) do |key|
  41. Data.put("hello", "hello #{key / (scale / 10.0)}", key / (scale / 10.0))
  42. end
  43.  
  44. puts Benchmark.measure {
  45. puts "Value at 7.352352 is #{Data.get("hello", 7.352352)}"
  46. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement