<commit_before>﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Combinacoes
{
    class CombinacoesDeIngredientes : List<String>
    {
        public override String ToString()
        {
            String list = "";
            foreach (String comb in this)
            {
                list += comb + "\n";
            }
            return list;
        }

        public void removerConhecidas(CombinacoesDeIngredientes conhecidas)
        {
            foreach (String item in conhecidas)
            {
                removerCombinacoesDesnecessarias(item);
            }
        }

        public CombinacoesDeIngredientes adicionarCombinacoes(CombinacoesDeIngredientes novasCombin)
        {
            CombinacoesDeIngredientes uniao = new CombinacoesDeIngredientes();
            IEnumerable<String> union = this.Union<String>(novasCombin).Distinct();
            uniao.AddRange(union);
            return uniao;
        }

        //Arranjar um uso para isto
        public String contarComposicao()
        {
            ListaIngredientes lista = new ListaIngredientes();
            string sOutput = "";
            foreach (String comb in this)
            {
                lista.receberListaDeIngredientes(comb);
            }
            lista.Sort();
            String lastIng = "";
            int ingCount = 0;
            foreach (String curIng in lista)
            {
                if (lastIng.CompareTo(curIng) == 0)
                {
                    ingCount++;
                }
                else
                {
                    if (lastIng != "")
                    {
                        sOutput += ingCount + " ";
                    }
                    ingCount = 0;
                    sOutput += curIng + ": ";
                    lastIng = curIng;
                }
            }
            sOutput += ingCount;
            return sOutput;
        }
        public void combinarMaisUm(String segundaParte)
        {
            CombinacoesDeIngredientes novas = new CombinacoesDeIngredientes();
            foreach (string comb in this)
            {
                ListaIngredientes liComb = ListaIngredientes.criarListaDeIngredientes(comb);
                if (!liComb.Contains(segundaParte))
                {
                    liComb.Add(segundaParte);
                    liComb.Sort();
                    novas.Add(liComb.ToString());
                }
            }
            this.Add(segundaParte);
            this.AddRange(novas);
        }

        public void removerReceita(String receita)
        {
            ListaIngredientes receitaLI = ListaIngredientes.criarListaDeIngredientes(receita);
            CombinacoesDeIngredientes removidas = new CombinacoesDeIngredientes();
            CombinacoesDeIngredientes adicionadas = new CombinacoesDeIngredientes();
            foreach (String item in this)
            {
                ListaIngredientes combinacao = ListaIngredientes.criarListaDeIngredientes(item);
                if (combinacao.contemReceita(receitaLI))
                {
                    foreach (String item2 in receitaLI)
                    {
                        ListaIngredientes combL = new ListaIngredientes();
                        combL.AddRange(combinacao);
                        combL.Remove(item2);
                        adicionadas.Add(combL.ToString());
                    }
                    removidas.Add(combinacao.ToString());
                }
            }
            AddRange(adicionadas);
            foreach (String item in removidas)
            {
                Remove(item);
            }
        }


        public void removerCombinacoesDesnecessarias(String receita)
        {
            ListaIngredientes receitaLI=ListaIngredientes.criarListaDeIngredientes(receita);
            RemoveAll(x=> receitaLI.contemReceita(ListaIngredientes.criarListaDeIngredientes(x)));

        }
        public CombinacoesDeIngredientes listarCombinacoesNecessarias()
        {
            CombinacoesDeIngredientes cdi = new CombinacoesDeIngredientes();
            CombinacoesDeIngredientes contaCombi = this;
            int count = 0;<commit_msg>Added a sort for eliminating duplicates during the processs.<commit_after>﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Combinacoes
{
    class CombinacoesDeIngredientes : List<String>
    {
        public override String ToString()
        {
            String list = "";
            foreach (String comb in this)
            {
                list += comb + "\n";
            }
            return list;
        }

        public void removerConhecidas(CombinacoesDeIngredientes conhecidas)
        {
            foreach (String item in conhecidas)
            {
                removerCombinacoesDesnecessarias(item);
            }
        }

        public CombinacoesDeIngredientes adicionarCombinacoes(CombinacoesDeIngredientes novasCombin)
        {
            CombinacoesDeIngredientes uniao = new CombinacoesDeIngredientes();
            IEnumerable<String> union = this.Union<String>(novasCombin).Distinct();
            uniao.AddRange(union);
            return uniao;
        }

        //Arranjar um uso para isto
        public String contarComposicao()
        {
            ListaIngredientes lista = new ListaIngredientes();
            string sOutput = "";
            foreach (String comb in this)
            {
                lista.receberListaDeIngredientes(comb);
            }
            lista.Sort();
            String lastIng = "";
            int ingCount = 0;
            foreach (String curIng in lista)
            {
                if (lastIng.CompareTo(curIng) == 0)
                {
                    ingCount++;
                }
                else
                {
                    if (lastIng != "")
                    {
                        sOutput += ingCount + " ";
                    }
                    ingCount = 0;
                    sOutput += curIng + ": ";
                    lastIng = curIng;
                }
            }
            sOutput += ingCount;
            return sOutput;
        }
        public void combinarMaisUm(String segundaParte)
        {
            CombinacoesDeIngredientes novas = new CombinacoesDeIngredientes();
            foreach (string comb in this)
            {
                ListaIngredientes liComb = ListaIngredientes.criarListaDeIngredientes(comb);
                if (!liComb.Contains(segundaParte))
                {
                    liComb.Add(segundaParte);
                    liComb.Sort();
                    novas.Add(liComb.ToString());
                }
            }
            this.Add(segundaParte);
            this.AddRange(novas);
        }

        public void removerReceita(String receita)
        {
            ListaIngredientes receitaLI = ListaIngredientes.criarListaDeIngredientes(receita);
            CombinacoesDeIngredientes removidas = new CombinacoesDeIngredientes();
            CombinacoesDeIngredientes adicionadas = new CombinacoesDeIngredientes();
            foreach (String item in this)
            {
                ListaIngredientes combinacao = ListaIngredientes.criarListaDeIngredientes(item);
                if (combinacao.contemReceita(receitaLI))
                {
                    foreach (String item2 in receitaLI)
                    {
                        ListaIngredientes combL = new ListaIngredientes();
                        combL.AddRange(combinacao);
                        combL.Remove(item2);
                        adicionadas.Add(combL.ToString());
                    }
                    removidas.Add(combinacao.ToString());
                }
            }
            AddRange(adicionadas);
            foreach (String item in removidas)
            {
                Remove(item);
            }
            Sort();
        }


        public void removerCombinacoesDesnecessarias(String receita)
        {
            ListaIngredientes receitaLI=ListaIngredientes.criarListaDeIngredientes(receita);
            RemoveAll(x=> receitaLI.contemReceita(ListaIngredientes.criarListaDeIngredientes(x)));

        }
        public CombinacoesDeIngredientes listarCombinacoesNecessarias()
        {
            CombinacoesDeIngredientes cdi = new CombinacoesDeIngredientes();
            CombinacoesDeIngredientes contaCombi = this;
            int count = 0;
{'fraction_non_alphanumeric': 0.07206997084548104, 'fraction_numerical': 0.0013994169096209913, 'mean_word_length': 1.426025459688826, 'pattern_counts': {'":': 2, '<': 9, '<?xml version=': 0, '>': 11, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4119731', 'n_tokens_mistral': 2409, 'n_tokens_neox': 2320, 'n_words': 396}