Skip to content

Instantly share code, notes, and snippets.

@ntakouris
Created October 25, 2020 14:58
Show Gist options
  • Save ntakouris/b89aa8b8a7be31fa315c619ebc5a86eb to your computer and use it in GitHub Desktop.
Save ntakouris/b89aa8b8a7be31fa315c619ebc5a86eb to your computer and use it in GitHub Desktop.
n_dogs = 1
n_walkers = 1
dogs = []
# ------
def entrypoint():
groups = [((float('-inf'), float('inf')), 0) for w in range(n_walkers)]
valid, r = helper(groups, float('inf'))
def is_group_valid(groups):
for (max_dog, min_dog), cnt in groups:
if cnt == 0:
return False
return True
def helper(groups, best_range):
v = is_group_valid(groups)
if len(dogs) == 0:
return v, best_range
r = 0
for (max_dog, min_dog), cnt in groups:
if cnt < 2:
continue
r += max_dog - min_dog
if v and r >= best_range:
return v, best_range
dogs_left = len(dogs)
for _ in range(0, dogs_left):
for g_idx in range(n_walkers):
d = dogs.pop()
(max_dog, min_dog), count = groups[g_idx]
groups[g_idx] = (max(max_dog, d), min(min_dog, d)), count+1
_v, _r = helper(groups, best_range)
if _v:
v = True
best_range = max(best_range, _r)
groups[g_idx] = (max_dog, min_dog), count
dogs.append(d)
return v, best_range
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment