Skip to content

Instantly share code, notes, and snippets.

@fernandomalmeida
Created February 4, 2015 02:01
Show Gist options
  • Save fernandomalmeida/9b693ab08588cc7171fe to your computer and use it in GitHub Desktop.
Save fernandomalmeida/9b693ab08588cc7171fe to your computer and use it in GitHub Desktop.
Eight Pills
import unittest
def balance(left, right):
balance.calls += 1
sum_left = sum(left)
sum_right = sum(right)
if sum_left == sum_right:
return 0
else:
return -1 if sum_left > sum_right else 1
balance.calls = 0
def eight_pills(pills):
left_side = pills[0:3]
right_side = pills[3:6]
others = pills[6:8]
balance_result = balance(left_side, right_side)
if balance_result == 0:
return 6 if balance(others[0:1], others[1:2]) == -1 else 7
elif balance_result < 0:
balance_result = balance(left_side[0:1], left_side[1:2])
if balance_result == 0:
return 2
else:
return 0 if balance_result == -1 else 1
elif balance_result > 0:
balance_result = balance(right_side[0:1], right_side[1:2])
if balance_result == 0:
return 5
else:
return 3 if balance_result == -1 else 4
class BalanceTest(unittest.TestCase):
def test_left_side(self):
self.assertEqual(-1, balance([0,0,1], [0,0,0]))
self.assertEqual(-1, balance([0,1,0], [0,0,0]))
self.assertEqual(-1, balance([1,0,0], [0,0,0]))
def test_right_side(self):
self.assertEqual(1, balance([0,0,0], [0,0,1]))
self.assertEqual(1, balance([0,0,0], [0,1,0]))
self.assertEqual(1, balance([0,0,0], [1,0,0]))
def test_equal(self):
self.assertEqual(0, balance([0,0,0], [0,0,0]))
class EightPillsTest(unittest.TestCase):
def test_testes(self):
balance.calls = 0
self.assertEqual(0, eight_pills([1,0,0,0,0,0,0,0]))
self.assertEqual(2, balance.calls)
balance.calls = 0
self.assertEqual(1, eight_pills([0,1,0,0,0,0,0,0]))
self.assertEqual(2, balance.calls)
balance.calls = 0
self.assertEqual(2, eight_pills([0,0,1,0,0,0,0,0]))
self.assertEqual(2, balance.calls)
balance.calls = 0
self.assertEqual(3, eight_pills([0,0,0,1,0,0,0,0]))
self.assertEqual(2, balance.calls)
balance.calls = 0
self.assertEqual(4, eight_pills([0,0,0,0,1,0,0,0]))
self.assertEqual(2, balance.calls)
balance.calls = 0
self.assertEqual(5, eight_pills([0,0,0,0,0,1,0,0]))
self.assertEqual(2, balance.calls)
balance.calls = 0
self.assertEqual(6, eight_pills([0,0,0,0,0,0,1,0]))
self.assertEqual(2, balance.calls)
balance.calls = 0
self.assertEqual(7, eight_pills([0,0,0,0,0,0,0,1]))
self.assertEqual(2, balance.calls)
if __name__ == '__main__':
unittest.main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment