MarvinRoque commited on
Commit
0af5aa6
·
1 Parent(s): 51f075b

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +31 -16
app.py CHANGED
@@ -396,7 +396,8 @@ def montar_treino(musculos_alvo, budget=45, objetivos=["hipertrofia"], lesoes=[]
396
  "custo_total": custo_ex,
397
  "custo_unit": variacao["custo"],
398
  "video": variacao["video"],
399
- "objetivo": objetivo_escolhido
 
400
  })
401
  custo_total += custo_ex
402
  usados.add(ex["nome"])
@@ -437,22 +438,36 @@ def montar_treino(musculos_alvo, budget=45, objetivos=["hipertrofia"], lesoes=[]
437
  obj_escolhido = random.choice(objetivos)
438
  add_exercicio(ex, variacao, series=3, objetivo_escolhido=obj_escolhido)
439
 
440
- # 4️⃣ Completar treino respeitando objetivos múltiplos
441
- if custo_total < budget:
442
- candidatos = []
443
- for ex in exercicios_validos:
444
- if any(m in ex["musculos"] for m in musculos_alvo) and ex["nome"] not in usados:
445
- v = escolher_variacao(ex, lesoes)
446
- if 2 <= v["custo"] <= 4:
447
- candidatos.append((ex, v))
448
- candidatos.sort(key=lambda x: x[1]["custo"], reverse=True)
449
 
450
- for ex, variacao in candidatos:
451
- obj_escolhido = random.choice(objetivos)
452
- if add_exercicio(ex, variacao, series=3, objetivo_escolhido=obj_escolhido):
453
- continue
454
- if custo_total >= budget:
455
- break
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
456
 
457
  # 🔹 Ordenar treino em ordem decrescente de custo_total (prioridade aos mais "pesados")
458
  treino.sort(key=lambda x: x["custo_total"], reverse=True)
 
396
  "custo_total": custo_ex,
397
  "custo_unit": variacao["custo"],
398
  "video": variacao["video"],
399
+ "objetivo": objetivo_escolhido,
400
+ "musculos": ex["musculos"]
401
  })
402
  custo_total += custo_ex
403
  usados.add(ex["nome"])
 
438
  obj_escolhido = random.choice(objetivos)
439
  add_exercicio(ex, variacao, series=3, objetivo_escolhido=obj_escolhido)
440
 
441
+ # 3.5️⃣ Distribuir resto do budget de forma equilibrada entre músculos
442
+ mapa = {m: 0 for m in musculos_alvo}
443
+ for ex in treino:
444
+ for m in ex["musculos"]:
445
+ if m in mapa:
446
+ mapa[m] += 1
 
 
 
447
 
448
+ while custo_total < budget:
449
+ # Ordena músculos pelo número atual de exercícios
450
+ musculos_ordenados = sorted(mapa.items(), key=lambda x: x[1])
451
+ adicionou = False
452
+
453
+ for alvo, _ in musculos_ordenados:
454
+ candidatos = []
455
+ for ex in exercicios_validos:
456
+ if alvo in ex["musculos"] and ex["nome"] not in usados:
457
+ v = escolher_variacao(ex, lesoes)
458
+ if v and v["custo"] <= 4: # evitar só exercícios caros
459
+ candidatos.append((ex, v))
460
+ if candidatos:
461
+ # Pega o mais barato viável
462
+ candidatos.sort(key=lambda x: x[1]["custo"])
463
+ ex, variacao = candidatos[0]
464
+ obj_escolhido = random.choice(objetivos)
465
+ if add_exercicio(ex, variacao, series=3, objetivo_escolhido=obj_escolhido):
466
+ mapa[alvo] += 1
467
+ adicionou = True
468
+ break # vai para o próximo loop
469
+ if not adicionou:
470
+ break # não dá para adicionar mais nada
471
 
472
  # 🔹 Ordenar treino em ordem decrescente de custo_total (prioridade aos mais "pesados")
473
  treino.sort(key=lambda x: x["custo_total"], reverse=True)