Skip to content

Instantly share code, notes, and snippets.

@Harduim
Created September 15, 2022 21:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Harduim/8dba7eab39814dc2e74e99a3759de20c to your computer and use it in GitHub Desktop.
Save Harduim/8dba7eab39814dc2e74e99a3759de20c to your computer and use it in GitHub Desktop.
from typing import List, Dict
def vaquinha(lista_de_compras: List[list], emails: List[str]) -> Dict[str, int]:
"""Esta função recebe uma lista de compras e uma lista de e-mails e divide de forma
justa o valor total da lista de compras entre os e-mails.
Args:
lista_de_compras (List[list]):
Lista de compras como matriz:
[
['item', quantidade, valor],
['item', quantidade, valor],
]
emails (List[str]): Lista de e-mails
Returns:
Dict[str, int]: Mapeamento entre e-mails e valores e serem pagos.
"""
assert len(emails) == len(set(emails)), "Lista não contem e-mails repetidos"
assert len(lista_de_compras) > 0, "Lista de compras não deve estar vazia"
assert len(emails) > 0, "Relação de e-mails não deve estar vazia"
# Assegura que 'quantidade' e 'valor' são, ou podem ser, inteiros.
lista_de_compras = [[_, int(qtd), int(valor)] for _, qtd, valor in lista_de_compras]
non_negative = [qtd > 0 and valor > 0 for _, qtd, valor in lista_de_compras]
assert all(non_negative), "Valor e quantidade não podem ser negativos"
total = sum([qtd * valor for _, qtd, valor in lista_de_compras])
modulo = total % len(emails)
parcela = total // len(emails)
out = {}
for email in emails:
par = parcela
if modulo:
modulo = modulo - 1
par = parcela + 1
out.update({email: par})
return out
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment