πŸ› οΈToolsShed

Exercise Recovery Calculator

Estimate optimal recovery time based on workout intensity and type.

Frequently Asked Questions

Code Implementation

def recovery_hours(intensity, volume_sets, muscle_group_size, fitness_level):
    """
    Estimate recovery time in hours after a resistance training session.

    intensity:         "low" | "moderate" | "high" | "maximal"
    volume_sets:       total working sets in the session (e.g., 12)
    muscle_group_size: "small" (arms, calves) | "medium" (chest, back) | "large" (legs, full-body)
    fitness_level:     "beginner" | "intermediate" | "advanced"
    """
    # Base recovery hours by intensity
    base = {"low": 24, "moderate": 36, "high": 48, "maximal": 72}
    hours = base.get(intensity, 36)

    # Volume modifier (each set beyond 10 adds ~1 hour)
    hours += max(0, volume_sets - 10) * 1.0

    # Muscle group size modifier
    size_mod = {"small": 0.8, "medium": 1.0, "large": 1.3}
    hours *= size_mod.get(muscle_group_size, 1.0)

    # Fitness level modifier (beginners need more recovery)
    level_mod = {"beginner": 1.3, "intermediate": 1.0, "advanced": 0.85}
    hours *= level_mod.get(fitness_level, 1.0)

    return round(hours)


def recovery_schedule(session_recovery_hours):
    """Suggest next training time from now."""
    from datetime import datetime, timedelta
    now = datetime.now()
    next_session = now + timedelta(hours=session_recovery_hours)
    return {
        "recovery_hours": session_recovery_hours,
        "ready_at": next_session.strftime("%Y-%m-%d %H:%M"),
    }


# Example usage
scenarios = [
    ("low",     8,  "small",  "intermediate"),
    ("moderate",12, "medium", "intermediate"),
    ("high",    15, "large",  "beginner"),
    ("maximal", 5,  "large",  "advanced"),
]

print(f"{'Scenario':<40} {'Recovery (h)'}")
print("-" * 55)
for intensity, sets, size, level in scenarios:
    h = recovery_hours(intensity, sets, size, level)
    label = f"{intensity}/{sets} sets/{size}/{level}"
    print(f"{label:<40} {h}h")

Comments & Feedback

Comments are powered by Giscus. Sign in with GitHub to leave a comment.