Эксперементальное округление

main
none 9 months ago
parent 0eb57482d0
commit 778238770a

@ -6,19 +6,67 @@ db = read_db()
# Составные # Составные
recipe = {} recipe = {}
'''
# Функция для спец. округления # Функция для спец. округления
# 16.666...8 => 15 # 16.666...8 => 15
def sround(num): def sround(num):
num = floor(num) num = floor(num)
# num = round(num)
# Подмены # Подмены
rep = [[16,15], [33,30], [21,20], [12,10], [8,5], [6,5]] rep = [[16,15], [33,30], [21,20], [12,10], [8,5], [6,5]]
if num == 0:
return 1
for i in rep: for i in rep:
if num == i[0]: if num == i[0]:
print('ПОДМЕНА: ', num)
num = i[1] num = i[1]
return num return num
'''
def sround(num, parts):
acc = [1,2,3,4,5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100]
amount = num*parts
# Ловим частые повторения
tries = 0
# Пока не вывели хорошее число
good = False
while not good:
num = floor(num)
print(good, ' ', num)
st = 1 ; good = True
# Перебираем различное количество частей
while st < parts:
# Если в допустимых значениях
if num*st in acc:
st += 1
continue
good = False
# Перебираем допустимые значения
for i in acc:
if abs(i - num*st) <= 2:
num = i
break
st += 1
# if num*parts > amount:
# num = num - 3
# good = False
# Ловим частые повторения
tries += 1
if tries > 500:
return 0
print(num)
return num
def calc(el, amount, main = False): def calc(el, amount, main = False):
global db, recipe global db, recipe
@ -36,8 +84,8 @@ def calc(el, amount, main = False):
# Делаем поправку на выход # Делаем поправку на выход
while out < parts: while out < parts:
# Предварительная часть # Предварительная часть
part = sround(amount/parts) part = sround(amount/parts, parts)
print(el, ': ',out,' < ', parts) #print(el, ': ',out,' < ', parts)
# Если итоговый объём <= входного объёма # Если итоговый объём <= входного объёма
if (parts+1)*part <= amount: if (parts+1)*part <= amount:
parts += 1 parts += 1
@ -47,7 +95,7 @@ def calc(el, amount, main = False):
# parts = out # parts = out
# Считаем 1 часть # Считаем 1 часть
part = sround(amount/parts) part = sround(amount/parts, parts)
# Перебираем составные и делаем рекурсию # Перебираем составные и делаем рекурсию
for i in comps: for i in comps:
@ -57,6 +105,7 @@ def calc(el, amount, main = False):
# 50/3, часть = 16, ИТОГ: 16*3=48 < # 50/3, часть = 16, ИТОГ: 16*3=48 <
try: try:
if lpart < part: if lpart < part:
print("LPART: ",lpart)
part = lpart part = lpart
except: except:
pass pass
@ -80,3 +129,5 @@ def calc(el, amount, main = False):
return part*parts return part*parts
#print( calc("Лексорин", 100, True)) #print( calc("Лексорин", 100, True))
#print( calc("Бикаридин", 100, True))
print( calc("Эфедрин", 100, True))

Loading…
Cancel
Save