You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

126 lines
3.2 KiB

10 months ago
import streamlit as st
## LOAD DB ##
#{
# "Бикаридин": [ [0, "Углерод", 1], [1, "Инапровалин"] ],
# "Инапровалин": [ [0, "Кислород", 1], [0, "Сахар", 1], [0, "Углерод", 1] ]
10 months ago
#}
# Тип Название Часть (1 к 1)
#
# 0 - без нагрева и т.п., 1 - зависит от того-то
#
# 100 = 50 углерод + 50 инапровалин =
# = 50 углерод + round(50/3) * составные
# = 50 углерод + 16 кислород + 16 сахар + 16 углерод
# !!! 50 != 48 => делаем 48 !!!
# = 48 углерод + 16 кислород + 16 сахар + 16 углерод
# = 96 бикаридин
#
# Список составных: ["Кислород", "Сахар", "Углерод"]
from db import *
db = read_db()
els = list(db.keys())
10 months ago
#############
#### UI ####
10 months ago
# Set columns
react, star, amount = st.columns([73, 7, 20])
with react:
option_react = st.selectbox(
10 months ago
label = '0',
options = els,
10 months ago
index = None,
placeholder = 'Реакция',
label_visibility = 'collapsed',
10 months ago
)
with star:
st.button(':orange[:star:]')
with amount:
option_amount = st.selectbox(
10 months ago
label = '0',
options = [30, 50, 100, 300, 1000],
index = 2,
10 months ago
placeholder = 'Объём',
label_visibility = 'collapsed'
)
#### CALCULATE RECIPE ####
if option_react:
parts = 0
part = 0
vol = option_amount
# Определяем 1 часть
for i in db[option_react]:
parts += i[2]
part = vol // parts
# Делаем около-кратным 10 и 15
# !!ЭКСПЕРЕМЕНТАЛЬНОЕ!!
part = round(part/10)*10
if part%10 != 0:
part = round(part/15)*15
# Название: количество (локальные части)
parted = {}
# Проверяем конфликты с составными частями: 48 != 50
lparts = 0 ; lpart = 0
for i in db[option_react]:
if i[0] == True:
# Перебираем составные
for el in db[i[1]]:
lparts += el[2]
# 50//3 ~ 16 16 * 3 = 48
lpart = (part//lparts) * lparts
if lpart < part:
part = lpart
parted[i[1]] = [part, lparts]
# part = 48
# parted["Инапровалин"] = [48, 3]
# 48 - 1 часть, 3 - кол. частей
# Фикс для плазмы в составных частях
# for i in db[option_react]:
# if i[0] == True:
# for el in db[i[1]]:
# if el[1] == "Плазма":
# parted[i[1]][0]
# parted[i[1]][1] -= 2
comps = {}
# Распределяем (пока не учитывает большую глубину)
for i in db[option_react]:
if i[0] == False:
if i[1] == "Плазма":
comps[i[1]] = 1
else:
comps[i[1]] = part * i[2]
elif i[0] == True:
# Перебираем составные
for el in db[i[1]]:
if el[1] == "Плазма":
comps[el[1]] = 1
else:
if el[1] not in comps:
comps[el[1]] = int( parted[i[1]][0]/parted[i[1]][1] * el[2] )
else:
comps[el[1]] += int( parted[i[1]][0]/parted[i[1]][1] * el[2] )
# Выводим результат
for i in comps:
st.warning(f'{i}: {comps[i]}')
st.success(f'{option_react}: {part*parts}')