Tidy up structure of briefcase
I had a spare fifteen minutes and decided that I should tidy up my monorepo. The work of tidying up is not finished; this is a small step in the right direction. TL;DR - Created a tools directory - Created a scratch directory (see README.md for more information) - Added README.md to third_party - Renamed delete_dotfile_symlinks -> symlinkManager - Packaged symlinkManager as an executable symlink-mgr using buildGo
This commit is contained in:
parent
5ec5a6da8c
commit
fabf1c9334
89 changed files with 53 additions and 41 deletions
71
scratch/data_structures_and_algorithms/cake-thief.py
Normal file
71
scratch/data_structures_and_algorithms/cake-thief.py
Normal file
|
@ -0,0 +1,71 @@
|
|||
import unittest
|
||||
from math import floor
|
||||
|
||||
|
||||
################################################################################
|
||||
# Solution
|
||||
################################################################################
|
||||
def max_duffel_bag_value(xs, cap):
|
||||
ct = (cap + 1)
|
||||
maxes = [0] * ct
|
||||
for c in range(cap + 1):
|
||||
for w, v in xs:
|
||||
if w == 0 and v > 0:
|
||||
return float('inf')
|
||||
if w == c:
|
||||
maxes[c:] = [max(maxes[c], v)] * (ct - c)
|
||||
elif w < c:
|
||||
d = c - w
|
||||
maxes[c:] = [max(maxes[c], v + maxes[d])] * (ct - c)
|
||||
else:
|
||||
continue
|
||||
return maxes[cap]
|
||||
|
||||
|
||||
################################################################################
|
||||
# Tests
|
||||
################################################################################
|
||||
class Test(unittest.TestCase):
|
||||
def test_one_cake(self):
|
||||
actual = max_duffel_bag_value([(2, 1)], 9)
|
||||
expected = 4
|
||||
self.assertEqual(actual, expected)
|
||||
|
||||
def test_two_cakes(self):
|
||||
actual = max_duffel_bag_value([(4, 4), (5, 5)], 9)
|
||||
expected = 9
|
||||
self.assertEqual(actual, expected)
|
||||
|
||||
def test_only_take_less_valuable_cake(self):
|
||||
actual = max_duffel_bag_value([(4, 4), (5, 5)], 12)
|
||||
expected = 12
|
||||
self.assertEqual(actual, expected)
|
||||
|
||||
def test_lots_of_cakes(self):
|
||||
actual = max_duffel_bag_value([(2, 3), (3, 6), (5, 1), (6, 1), (7, 1),
|
||||
(8, 1)], 7)
|
||||
expected = 12
|
||||
self.assertEqual(actual, expected)
|
||||
|
||||
def test_value_to_weight_ratio_is_not_optimal(self):
|
||||
actual = max_duffel_bag_value([(51, 52), (50, 50)], 100)
|
||||
expected = 100
|
||||
self.assertEqual(actual, expected)
|
||||
|
||||
def test_zero_capacity(self):
|
||||
actual = max_duffel_bag_value([(1, 2)], 0)
|
||||
expected = 0
|
||||
self.assertEqual(actual, expected)
|
||||
|
||||
def test_cake_with_zero_value_and_weight(self):
|
||||
actual = max_duffel_bag_value([(0, 0), (2, 1)], 7)
|
||||
expected = 3
|
||||
self.assertEqual(actual, expected)
|
||||
|
||||
def test_cake_with_non_zero_value_and_zero_weight(self):
|
||||
actual = max_duffel_bag_value([(0, 5)], 5)
|
||||
expected = float('inf')
|
||||
self.assertEqual(actual, expected)
|
||||
|
||||
|
||||
unittest.main(verbosity=2)
|
Loading…
Add table
Add a link
Reference in a new issue