| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213 | """Calculate cost to reach total buidings level"""from rival_regions_calc import ConstructionCosts, BuildingPRICES = {    'cash': 0.7,    'gold': 0.45,    'oil': 250,    'ore': 230,    'diamond': 1700000,    'uranium': 2100}BUILDING_TYPES = {    'hospital': Building('hospital'),    'military base': Building('military base'),    'school': Building('school'),    'missile system': Building('missile system'),    'power plant': Building('power plant'),    'spaceport': Building('spaceport'),    'airport': Building('airport')}def main():    """Main method"""    buildings = {# palmer#        'hospital': 2516,#        'military base': 1800,#        'school': 2000,#        'missile system': 7745,#        'power plant': 2275,#        'spaceport': 1800,#        'airport': 7961# oost-nl#        'hospital': 2475,#        'military base': 1646,#        'school': 1565,#        'missile system': 4550,#        'power plant': 1461,#        'spaceport': 201,#        'airport': 3750,# noord-nl        'hospital': 2474,        'military base': 1645,        'school': 1564,        'missile system': 1200,        'power plant': 2570,        'spaceport': 4,        'airport': 2305    }    build_buildings = {        'hospital': 0,        'military base': 0,        'school': 0,        'missile system': 0,        'power plant': 0,        'spaceport': 0,        'airport': 0    }    total_buildings = sum(item for item in buildings.values())    # building_goal = 36581 #5    building_goal = 61300 #1    total_price = 0    required_buildings = building_goal - total_buildings    power_surplus = 6198    power_consumption = (total_buildings - buildings['power plant']) * 2    power_production = buildings['power plant'] * 10    for i in range(1, required_buildings + 1):        lowest_building_name = None        lowest_building_price = 1000000000000000        if power_consumption > power_production + power_surplus - 2:            lowest_building_name = 'power plant'            cc = ConstructionCosts(                BUILDING_TYPES['power plant'],                buildings['power plant'] + build_buildings['power plant']            )            cc.calculate(1)            lowest_building_price = sum_building_cost(cc)                 else:            for building_name in BUILDING_TYPES:                cc = ConstructionCosts(                    BUILDING_TYPES[building_name],                    buildings[building_name] + build_buildings[building_name]                )                cc.calculate(1)                price = sum_building_cost(cc)                         if price <= lowest_building_price:                    lowest_building_price = price                    lowest_building_name = building_name        if lowest_building_name == 'power plant':            power_production += 10        else:            power_consumption += 2        build_buildings[lowest_building_name] += 1        total_price += lowest_building_price    total_build = sum(item for item in build_buildings.values())    total_resources = {        'cash': 0,        'gold': 0,        'oil': 0,        'ore': 0,        'diamond': 0,        'uranium': 0    }    print('—'*53)    for resource_name, price in PRICES.items():        print('{:8}: {:12,.2f}'.format(resource_name, price))    for building_name, build in build_buildings.items():        if build == 0:            continue        print('—'*53)        print('{}: +{}'.format(building_name, build))        cc = ConstructionCosts(            BUILDING_TYPES[building_name],            buildings[building_name]        )        cc.calculate(build)        total_resources['cash'] += cc.cash        total_resources['gold'] += cc.gold        total_resources['oil'] += cc.oil        total_resources['ore'] += cc.ore        total_resources['uranium'] += cc.uranium        total_resources['diamond'] += cc.diamond        print('{:8} {:20,} {:20,} $'.format(            'cash', cc.cash,            round(cc.cash * PRICES['cash'])        ))        print('{:8} {:20,} {:20,} $'.format(            'gold', cc.gold,            round(cc.gold * PRICES['gold'])        ))        print('{:8} {:20,} {:20,} $'.format(            'oil', cc.oil,            round(cc.oil * PRICES['oil'])        ))        print('{:8} {:20,} {:20,} $'.format(            'ore', cc.ore,            round(cc.ore * PRICES['ore'])        ))        print('{:8} {:20,} {:20,} $'.format(            'uranium', cc.uranium,            round(cc.uranium * PRICES['uranium'])        ))        print('{:8} {:20,} {:20,} $'.format(            'diamond', cc.diamond,            round(cc.diamond * PRICES['diamond'])        ))        print('total {:23} {:20,} $'.format(            building_name,            round(sum_building_cost(cc))))    print('—'*53)    print('total')    print('{:8} {:20,} {:20,} $'.format(        'cash', total_resources['cash'],        round(total_resources['cash'] * PRICES['cash'])    ))    print('{:8} {:20,} {:20,} $'.format(        'gold', total_resources['gold'],        round(total_resources['gold'] * PRICES['gold'])    ))    print('{:8} {:20,} {:20,} $'.format(        'oil', total_resources['oil'],        round(total_resources['oil'] * PRICES['oil'])    ))    print('{:8} {:20,} {:20,} $'.format(        'ore', total_resources['ore'],        round(total_resources['ore'] * PRICES['ore'])    ))    print('{:8} {:20,} {:20,} $'.format(        'uranium', total_resources['uranium'],        round(total_resources['uranium'] * PRICES['uranium'])    ))    print('{:8} {:20,} {:20,} $'.format(        'diamond', total_resources['diamond'],        round(total_resources['diamond'] * PRICES['diamond'])    ))    print('total {:44,} $'.format(round(total_price)))    print('—'*53)    print('buildings')    print('orginal            : {:,}'.format(total_buildings))    print('build              : {:,}'.format(total_build))    print('total              : {:,}'.format(building_goal))    print('—'*53)    power_difference = power_production - power_consumption + power_surplus    print('power')    print('orignal production : {:6}'.format(buildings['power plant'] * 10))    print('extra production   : {:6}'.format(build_buildings['power plant'] * 10))    print('total production   : {:6}'.format(power_production))    print('consumption        : {:6}'.format(power_consumption))    print('surplus            : {:6}'.format(power_surplus))    print('difference         : {:6}'.format(power_difference))def sum_building_cost(cc):    """Sum building costs"""    return cc.cash * PRICES['cash'] + \        cc.gold * PRICES['gold'] + \        cc.oil * PRICES['oil'] + \        cc.ore * PRICES['ore'] + \        cc.diamond * PRICES['diamond'] + \        cc.uranium * PRICES['uranium']if __name__ == "__main__":    main()
 |