Advertisement
Guest User

Untitled

a guest
Apr 25th, 2017
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.37 KB | None | 0 0
  1. def volume(left_edge, right_edge, length, dirt)
  2. cap = [left_edge, right_edge].min
  3. [(cap*length-dirt),0].max
  4. end
  5.  
  6. def water_helper(left_edge, index, count, dirt, right_edge, blocks)
  7. puts("#{left_edge}, #{index}, #{count}, #{dirt}, #{right_edge}") if $debug
  8. if index == blocks.size-1
  9. water_volume = volume(left_edge, right_edge, count, dirt)
  10. puts("end: water_volume") if $debug
  11. water_volume
  12. elsif blocks[index] > right_edge
  13. water_volume = volume(left_edge, blocks[index], count, dirt)
  14. puts("split: water_volume") if $debug
  15. water_volume + water_helper(blocks[index], index+1, 0, 0, right_edge, blocks)
  16. else
  17. water_helper(left_edge, index+1, count+1,blocks[index]+dirt, right_edge, blocks)
  18. end
  19. end
  20.  
  21. def waterblocks(blocks)
  22. return 0 if blocks.size <= 2
  23. water_helper(blocks.first,1,0,0, blocks.last, blocks)
  24. end
  25.  
  26. testcases = [
  27. [[5, 5], 0],
  28. [[5, 1, 10], 4],
  29. [[10, 1, 5], 4],
  30. [[10, 1, 5, 5], 4],
  31. [[10, 5, 1, 5], 4],
  32. [[10, 1, 1, 5], 8],
  33. [[10, 5, 1], 0],
  34. [[1, 5, 10], 0],
  35. [[5, 2, 3, 2, 1, 3], 4],
  36. [[5, 4, 6,1,6,4,5], 7],
  37. [[1,1,3,1,5,1,1],2],
  38. ]
  39.  
  40. testcases.each do |info|
  41. data = info.first
  42. expected = info.last
  43. actual = waterblocks(data)
  44. if expected == actual
  45. puts "Passed: #{data}"
  46. else
  47. $debug = true
  48. waterblocks(data)
  49. puts "Failed: #{data}"
  50. puts "Actual: #{actual} Expected: #{expected}"
  51. $debug = false
  52. end
  53. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement