Skip to content

Instantly share code, notes, and snippets.

@th7
Last active December 20, 2015 21:49
Show Gist options
  • Save th7/6200407 to your computer and use it in GitHub Desktop.
Save th7/6200407 to your computer and use it in GitHub Desktop.
D = false
def even_sum(array)
result = 0
array.each_with_index do |elem, i|
result += elem if i % 2 == 0
end
result
end
def odd_sum(array)
result = 0
array.each_with_index do |elem, i|
result += elem if i % 2 == 1
end
result
end
def rob(array)
p 'rob(' + array.inspect + ')' if D
return 0 if array.length == 0
return array[0] if array.length == 1
a = array[0]
b = array[1]
c = array[2] || 0
d = array[3] || 0
# vals = {a_c: a+c, b_d: b+d, a_d: a+d}
# p 'vals: ' + vals.inspect if D
# max = vals.max_by { |k,v| v }
# p 'max: ' + max.inspect if D
# if max[0] == :a_c || max[0] == :a_d
# i = 0
# else
# i = 1
# end
if even_sum(array) > odd_sum(array)
i = 0
else
if array.length > 3
if array[3] > array[2] + array[1]
i = 0
else
i = 1
end
else
i = 1
end
end
# if array.length == 2
# p 'length == 2' if D
# if array[0] > array[1]
# i = 0
# else
# i = 1
# end
# elsif array.length == 3
# p 'length == 2' if D
# if array[0] + array[2] > array[1]
# i = 0
# else
# i = 1
# end
# elsif array.length == 4
# p 'length == 3' if D
# if array[0] + array[2] > array[1] + array[3]
# i = 0
# else
# i = 1
# end
# elsif array.length > 4
# p 'length > 4' if D
# if array[0] + array[2] + array[4] > array[1] + array[3]
# i = 0
# else
# i = 1
# end
# end
p 'i: ' + i.to_s if D
result = array[i]
p 'result: ' + result.to_s if D
if i > 0
prev_i = i - 1
else
prev_i = i
end
# p 'prev_i: ' + prev_i.to_s if D
if i < array.length - 1
next_i = i + 1
else
next_i = i
end
# p 'next_i: ' + next_i.to_s if D
array.slice!(prev_i..next_i)
result + rob(array)
end
def assert(condition)
raise 'falsey' unless condition
end
p rob([6,4,2,1,3,5]) if D
assert(true) unless D
assert(rob([1]) == 1) unless D
assert(rob([1,2]) == 2) unless D
assert(rob([2,1]) == 2) unless D
assert(rob([1,2,3]) == 4) unless D
assert(rob([3,2,1]) == 4) unless D
assert(rob([2,3,2]) == 4) unless D
assert(rob([3,2,3]) == 6) unless D
assert(rob([1,2,3,4]) == 6) unless D
assert(rob([4,3,2,1]) == 6) unless D
assert(rob([1,3,4,2]) == 5) unless D
assert(rob([4,1,2,3]) == 7) unless D
assert(rob([1,2,3,4,5]) == 9) unless D
assert(rob([5,4,3,2,1]) == 9) unless D
assert(rob([1,4,5,3,2]) == 8) unless D
assert(rob([5,3,1,2,4]) == 10) unless D
assert(rob([1,2,3,4,5,6]) == 12) unless D
assert(rob([6,5,4,3,2,1]) == 12) unless D
assert(rob([6,4,2,1,3,5]) == 13) unless D
assert(rob([1,3,5,6,4,2]) == 11) unless D
assert(rob([1,2,3,4,5,6,7]) == 16) unless D
assert(rob([7,6,5,4,3,2,1]) == 16) unless D
assert(rob([6,4,2,1,3,5,7]) == 18) unless D
assert(rob([1,3,5,7,6,4,2]) == 14) unless D
# assert(rob([1,3,5,6,4,2]) == 11) unless D
puts 'ok' unless D
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment