Created
September 15, 2022 21:22
-
-
Save Harduim/8dba7eab39814dc2e74e99a3759de20c to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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