# [Tot codul anterior rămâne la fel până la funcția binary_to_ascii...]

def flip_bits(binary: str) -> str:
    """Inversează toți biții din secvența binară"""
    return ''.join('1' if bit == '0' else '0' for bit in binary)

# [Toate clasele și funcțiile rămân la fel până la main()...]

def main():
    # [Codul rămâne la fel până la afișarea rezultatelor...]
    
    print("\nREZULTATE FINALE:")
    print("=" * 20)
    print(f"Mesaj ASCII transmis:      {ascii_message}")
    
    # Procesăm și afișăm ambele variante
    received_ascii_normal = binary_to_ascii(received_binary)
    received_ascii_flipped = binary_to_ascii(flip_bits(received_binary))
    
    print("\nVarianta 1 (biți primiți direct):")
    print(f"Mesaj binar:               {received_binary}")
    print(f"Mesaj ASCII:               {received_ascii_normal}")
    
    print("\nVarianta 2 (biți inversați):")
    print(f"Mesaj binar:               {flip_bits(received_binary)}")
    print(f"Mesaj ASCII:               {received_ascii_flipped}")
    
    print("\nMesaj binar transmis:      {binary_message}")
    print(f"Număr total biți:          {len(binary_message)}")
    
    # Calculăm acuratețea pentru ambele variante
    correct_bits_normal = sum(1 for a, b in zip(binary_message, received_binary) if a == b)
    correct_bits_flipped = sum(1 for a, b in zip(binary_message, flip_bits(received_binary)) if a == b)
    
    accuracy_normal = (correct_bits_normal / len(binary_message)) * 100
    accuracy_flipped = (correct_bits_flipped / len(binary_message)) * 100
    
    print(f"\nAcuratețe varianta 1:      {accuracy_normal:.2f}%")
    print(f"Acuratețe varianta 2:      {accuracy_flipped:.2f}%")
    print(f"Probabilitate medie:        {np.mean(probabilities):.2f}%")
    
    channel.plot_results(binary_message, probabilities)

if __name__ == "__main__":
    main()
