In [20]:
DEATH_AGE = 96
BREEDING_AGE = 4
INITIAL_AGE = 2
MALES_PER_LITTER = 5
FEMALES_PER_LITTER = 9

In [21]:
def init_population(male, female):
    males = [0] * (DEATH_AGE + 1)
    females = [0] * (DEATH_AGE + 1)
    males[INITIAL_AGE] = male
    females[INITIAL_AGE] = female
    return males, females

In [22]:
def breed_population(males, females):
    breeding_females = sum(females[BREEDING_AGE:])
    new_males = breeding_females*MALES_PER_LITTER
    new_females = breeding_females*FEMALES_PER_LITTER
    return new_males, new_females, breeding_females

In [23]:
def age_population(males, females, new_males, new_females):
    dead_rabbits = males[-1] + females[-1]
    return [new_males] + males[:-1], [new_females] + females[:-1], dead_rabbits

In [24]:
def run_simulation(male, female, target_pop):
    males, females = init_population(male, female)
    total_population = sum(males) + sum(females)
    total_dead_rabbits = 0
    total_months = 0
    while total_population < target_pop:
        new_males, new_females, breeding_females = breed_population(males, females)
        males, females, dead_rabbits = age_population(males, females, new_males, new_females)
        total_dead_rabbits += dead_rabbits
        total_population = sum(males) + sum(females)
        total_months += 1
        print(f'month {total_months:<3}: {total_population:<15} alive ({breeding_females:<15} breeding females) and {total_dead_rabbits:<5} dead')
    return total_months, total_dead_rabbits

In [25]:
run_simulation(2,4,1000000000)


month 1  : 6               alive (0               breeding females) and 0     dead
month 2  : 6               alive (0               breeding females) and 0     dead
month 3  : 62              alive (4               breeding females) and 0     dead
month 4  : 118             alive (4               breeding females) and 0     dead
month 5  : 174             alive (4               breeding females) and 0     dead
month 6  : 230             alive (4               breeding females) and 0     dead
month 7  : 286             alive (4               breeding females) and 0     dead
month 8  : 846             alive (40              breeding females) and 0     dead
month 9  : 1910            alive (76              breeding females) and 0     dead
month 10 : 3478            alive (112             breeding females) and 0     dead
month 11 : 5550            alive (148             breeding females) and 0     dead
month 12 : 8126            alive (184             breeding females) and 0     dead
month 13 : 15742           alive (544             breeding females) and 0     dead
month 14 : 32934           alive (1228            breeding females) and 0     dead
month 15 : 64238           alive (2236            breeding females) and 0     dead
month 16 : 114190          alive (3568            breeding females) and 0     dead
month 17 : 187326          alive (5224            breeding females) and 0     dead
month 18 : 329006          alive (10120           breeding females) and 0     dead
month 19 : 625414          alive (21172           breeding females) and 0     dead
month 20 : 1203558         alive (41296           breeding females) and 0     dead
month 21 : 2231270         alive (73408           breeding females) and 0     dead
month 22 : 3917206         alive (120424          breeding females) and 0     dead
month 23 : 6878262         alive (211504          breeding females) and 0     dead
month 24 : 12506990        alive (402052          breeding females) and 0     dead
month 25 : 23339014        alive (773716          breeding females) and 0     dead
month 26 : 43420446        alive (1434388         breeding females) and 0     dead
month 27 : 78675302        alive (2518204         breeding females) and 0     dead
month 28 : 140579662       alive (4421740         breeding females) and 0     dead
month 29 : 253142574       alive (8040208         breeding females) and 0     dead
month 30 : 463193702       alive (15003652        breeding females) and 0     dead
month 31 : 853977718       alive (27913144        breeding females) and 0     dead
month 32 : 1562055438      alive (50576980        breeding females) and 0     dead
Out[25]:
(32, 0)

In [26]:
run_simulation(2,4,15000000000)


month 1  : 6               alive (0               breeding females) and 0     dead
month 2  : 6               alive (0               breeding females) and 0     dead
month 3  : 62              alive (4               breeding females) and 0     dead
month 4  : 118             alive (4               breeding females) and 0     dead
month 5  : 174             alive (4               breeding females) and 0     dead
month 6  : 230             alive (4               breeding females) and 0     dead
month 7  : 286             alive (4               breeding females) and 0     dead
month 8  : 846             alive (40              breeding females) and 0     dead
month 9  : 1910            alive (76              breeding females) and 0     dead
month 10 : 3478            alive (112             breeding females) and 0     dead
month 11 : 5550            alive (148             breeding females) and 0     dead
month 12 : 8126            alive (184             breeding females) and 0     dead
month 13 : 15742           alive (544             breeding females) and 0     dead
month 14 : 32934           alive (1228            breeding females) and 0     dead
month 15 : 64238           alive (2236            breeding females) and 0     dead
month 16 : 114190          alive (3568            breeding females) and 0     dead
month 17 : 187326          alive (5224            breeding females) and 0     dead
month 18 : 329006          alive (10120           breeding females) and 0     dead
month 19 : 625414          alive (21172           breeding females) and 0     dead
month 20 : 1203558         alive (41296           breeding females) and 0     dead
month 21 : 2231270         alive (73408           breeding females) and 0     dead
month 22 : 3917206         alive (120424          breeding females) and 0     dead
month 23 : 6878262         alive (211504          breeding females) and 0     dead
month 24 : 12506990        alive (402052          breeding females) and 0     dead
month 25 : 23339014        alive (773716          breeding females) and 0     dead
month 26 : 43420446        alive (1434388         breeding females) and 0     dead
month 27 : 78675302        alive (2518204         breeding females) and 0     dead
month 28 : 140579662       alive (4421740         breeding females) and 0     dead
month 29 : 253142574       alive (8040208         breeding females) and 0     dead
month 30 : 463193702       alive (15003652        breeding females) and 0     dead
month 31 : 853977718       alive (27913144        breeding females) and 0     dead
month 32 : 1562055438      alive (50576980        breeding females) and 0     dead
month 33 : 2827272398      alive (90372640        breeding females) and 0     dead
month 34 : 5105555566      alive (162734512       breeding females) and 0     dead
month 35 : 9274298886      alive (297767380       breeding females) and 0     dead
month 36 : 16960098350     alive (548985676       breeding females) and 0     dead
Out[26]:
(36, 0)

In [ ]: