I've tried a few iterations, but can't quite get this. I've passed all of the self-checking tests, even the additional tests suggested by Gabbek in the other discussion post for this challenge. This will even pass the first big test (Big/1). but it fails on Big/2. (It says the correct answer is 8; my code finds 9.) Could someone help me figure out where the flaw in my logic is??
from math import ceil
difficulties = lambda q: [ ceil((i[-1] - i[0]) / (len(i) - 1)) for i in q ]
def workout(sessions, additional) -> int:
# Transform from list [x, y, z, ...], turn to [(x,y), (y,z), ...]
sessions = [[i, j] for i, j in zip(sessions[:-1], sessions[1:])]
while additional > 0:
# difficulties() [at top] will take index[-1] - index[0] of each list in sessions,
# and will divide by len() - 1 to give us the difference in number of pushups
# capable over those workouts, including with any additional workouts we've added.
gaps = difficulties(sessions)
# we want index of the highest difficulty gap, to add workouts to break it up.
# Then change that difficulty to '0' in this so we can evaluate other difficulties.
m = gaps.index( max(gaps) )
gaps[m] = 0
# This will break the difficulty in 2, if we only add 1 workout.
# (Continues to divide by 3, or 4, etc., depending on how many workouts we'll add)
breaks = 2
# While the broken-up difficulty is still higher than next max difficulty,
# add another workout to break it up.
while (sessions[m][-1] - sessions[m][0]) // breaks >= max(gaps) and breaks <= additional:
breaks += 1
# When I know how many breaks to add, add that number of '+'
for i in range(1, breaks):
sessions[m].insert(i, '+')
# Number of workouts to add is the # of breaks - 1
# (e.g., halving the difficulty means adding 1 workout)
additional -= (breaks - 1)
return max(difficulties(sessions))
Created at: 2023/01/07 16:43; Updated at: 2023/01/08 21:35