Menu
Coddy logo textTech

Math - Symmetric Difference

Parte da seção Lógica & Fluxo do Journey de C# da Coddy — lição 65 de 66.

A diferença simétrica de dois conjuntos contém elementos que estão em um ou outro dos conjuntos, mas não na sua interseção (elementos que aparecem em exatamente um dos conjuntos).

Crie dois objetos HashSet:

HashSet<int> set1 = new HashSet<int>() { 1, 2, 3, 4 };
HashSet<int> set2 = new HashSet<int>() { 3, 4, 5, 6 };

Crie um novo HashSet para o resultado:

HashSet<int> symmetricDifference = new HashSet<int>(set1);

Use o método SymmetricExceptWith para calcular a diferença simétrica:

symmetricDifference.SymmetricExceptWith(set2);

Após executar o código acima, o conjunto symmetricDifference contém:

{ 1, 2, 5, 6 }

Os elementos 3 e 4 estão em ambos os conjuntos, portanto, eles não aparecem na diferença simétrica.

challenge icon

Desafio

Fácil

Crie um método chamado FindSymmetricDifference que recebe dois argumentos:

  • Um HashSet de inteiros (set1)
  • Um HashSet de inteiros (set2)

O método deve retornar um novo HashSet<int> contendo a diferença simétrica dos dois conjuntos. O restante do programa (leitura de entrada, ordenação e impressão dos resultados) já está fornecido para você.

Folha de consulta

A diferença simétrica de dois conjuntos contém elementos que estão em um ou outro conjunto, mas não em ambos (elementos que aparecem em exatamente um dos conjuntos).

Para encontrar a diferença simétrica, crie um novo HashSet a partir de um conjunto e use SymmetricExceptWith():

HashSet<int> set1 = new HashSet<int>() { 1, 2, 3, 4 };
HashSet<int> set2 = new HashSet<int>() { 3, 4, 5, 6 };

HashSet<int> symmetricDifference = new HashSet<int>(set1);
symmetricDifference.SymmetricExceptWith(set2);

Resultado: { 1, 2, 5, 6 } (os elementos 3 e 4 são excluídos porque aparecem em ambos os conjuntos)

Experimente você mesmo

using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    public static HashSet<int> FindSymmetricDifference(HashSet<int> set1, HashSet<int> set2)
    {
        // Escreva seu código aqui
    }
    
    static void Main(string[] args)
    {
        string[] input1 = Console.ReadLine().Split(',');
        string[] input2 = Console.ReadLine().Split(',');
        
        HashSet<int> set1 = new HashSet<int>();
        HashSet<int> set2 = new HashSet<int>();
        
        foreach (string s in input1)
        {
            if (int.TryParse(s.Trim(), out int num))
            {
                set1.Add(num);
            }
        }
        
        foreach (string s in input2)
        {
            if (int.TryParse(s.Trim(), out int num))
            {
                set2.Add(num);
            }
        }
        
        HashSet<int> result = FindSymmetricDifference(set1, set2);
        
        // Imprima o resultado em ordem crescente
        int[] orderedResult = result.OrderBy(x => x).ToArray();
        foreach (int num in orderedResult)
        {
            Console.WriteLine(num);
        }
    }
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Lógica & Fluxo