# Exercício Prático 2 - Calculadora Nativa de Impureza de Gini

def calcular_gini(rotulos):
    n = len(rotulos)
    if n == 0:
        return 0.0
    
    # Identificar classes únicas
    classes_unicas = set(rotulos)
    soma_proporcoes_quadrado = 0.0
    
    for classe in classes_unicas:
        contagem = rotulos.count(classe)
        p_i = contagem / n
        soma_proporcoes_quadrado += p_i ** 2
        
    gini = 1.0 - soma_proporcoes_quadrado
    return gini

# Teste com diferentes cenários de nós
no_puro = ["Legítimo", "Legítimo", "Legítimo", "Legítimo"]
no_misto = ["Fraude", "Legítimo", "Fraude", "Legítimo"]
no_assimetrico = ["Fraude", "Fraude", "Fraude", "Legítimo"]

print("=== CALCULADORA DE IMPUREZA DE GINI ===")
print(f"Gini (Nó Puro): {calcular_gini(no_puro):.4f}")
print(f"Gini (Nó Misto 50/50): {calcular_gini(no_misto):.4f}")
print(f"Gini (Nó Assimétrico): {calcular_gini(no_assimetrico):.4f}")