#!/usr/bin/env python3
import numpy as np
# Storage needed without normal storage and 1st level 20 great storage:
needed_storage = 600000
# Build slots dedicated to great storages beyond the 1st level 20 great storage:
n_storages = 12
# initialize with worst case values
best_build_time = 1000000000
best_building_levels = [20] * n_storages
# Data for the great storage levels (w/o plus account)
# level, time*4 [minutes], storage capacity
build_times = np.array(
[
[0, 0, 0, 0],
[1, 11, 3600, 11],
[2, 16, 5100, 27],
[3, 23, 6900, 50],
[4, 34, 9300, 84],
[5, 66, 12000, 150],
[6, 140, 15000, 290],
[7, 205, 18900, 495],
[8, 275, 23100, 770],
[9, 330, 28800, 1100],
[10, 380, 36000, 1480],
[11, 460, 43200, 1940],
[12, 540, 54000, 2480],
[13, 640, 66000, 3120],
[14, 720, 78000, 3840],
[15, 830, 96000, 4670],
[16, 930, 114000, 5600],
[17, 1110, 135000, 6710],
[18, 1265, 165000, 7975],
[19, 1460, 198000, 9435],
[20, 1650, 240000, 11085]
]
)
# capacity of the great storages with plus account (this is used)
plus_capacity = build_times[:,2] * 1.25
def get_cumulative_build_time(level=0):
" Return the cumulative build time for a given level"
return build_times[level,3]/4
def get_build_time(level=0):
" Return the build time for a given level"
return build_times[level,1]/4
def get_capacity(level=0):
" Return the capacity for a certain level"
return plus_capacity[level]
def add_storage(remaining_storages, building_levels, build_time, capacity):
global best_build_time
global best_building_levels
global n_storages
"Add the build time and capacity for an additional storage"
if (capacity > needed_storage) and (build_time < best_build_time):
best_build_time = build_time
best_building_levels = building_levels
print("Time: ", best_build_time, "; Storages: ", building_levels)
# print("Storages: ", building_levels)
return
if remaining_storages == 0:
return
for level in range(0,21):
if remaining_storages < n_storages:
if building_levels[remaining_storages] < level:
break
building_levels[remaining_storages-1] = level
add_storage(remaining_storages-1, building_levels, build_time+get_cumulative_build_time(level), capacity+get_capacity(level))
building_levels = [0] * n_storages
add_storage(n_storages, building_levels, 0, 0)