Handshake is modeling several independent bacteria cultures for a simulation exercise. Each culture doubles in size exactly once every hour and completely fills its container at a specified hour.
Given a list of full-container times, return the corresponding hour when each culture first reaches at least half of its container capacity. A culture that fills at hour h had exactly half the final amount one doubling earlier, at hour h - 1.
Implement half_fill_times(full_hours), where full_hours is a list of positive integers. Return a list of integers, with each output value representing the first hour at which the corresponding culture reaches half capacity. Assume each culture starts below half capacity and reaches full capacity exactly at its specified hour.
Do not simulate the bacteria hour by hour. The solution should use the doubling relationship directly.
def half_fill_times(full_hours):