joomoraes / Intervalo_Tempo_Algoritmo-

Existe um problema matemático relacionado a determinação de intervalo de tempo pelo usuário, que se torna quase impossível trata-lo de forma dinâmica em um sistema.
MIT License
2 stars 0 forks source link

Problema Em Determinar Intervalo de Tempo Dinâmico com Algoritmo #1

Open joomoraes opened 3 years ago

joomoraes commented 3 years ago

Digamos que eu queira construir uma atribuição de tarefas onde elas tenham um determinado tempo de duração, e que elas funcionem através de um checkBox onde a pessoa poderá ativa-la ou desativa-la, mas a partir da condição que o período de tempo de atividade desta tarefa não possa conflitar com demais, e caso conflite ele remove o status de ativo das que estão conflitantes e mantenha os demais que já estão ativos como ativos, obs: isso tudo deve ser feito de forma dinâmica, sem que exista um padrão nem variáveis pré-determinadas, trabalhando dentro de um foreach com chamada do banco comparada ao formulário.

Encontrei bastante dificuldade em atribuição a atividade, não me recordo onde, mas eu já havia ouvido falar que isto era teoricamente impossível, porque o tempo não possui intervalos de tempo, ele tende ao infinito, tendo o único ponto de referencia como dia atual, gostaria de saber se alguém já lidou com problema similar, se existe realmente uma solução ou se isto se trata realmente de um problema mateticamente impossível.

onde BuscaBanco são os dados do banco passando dentro de um foreEach

e model são os dados do formulário que o usuário está preenchendo

O Algoritmo abaixo apresenta as condições situacionais apresentadas no texto que infelizmente ainda não fui capaz de encontrar uma solução lógica para o problema

USP - Sobre Algoritmos Disjuntos

Neste link é possível encontrar uma referência acadêmica do problema que foi citado, lá eles tratam o problema como Algoritmos disjuntos uma expressão usada para justificar a impossibilidade da própria lógica de agrupar um conjunto de três ou mais fatores simultâneos se tratando de um problema onde existe apenas um ponto de referência para uma semirreta oposta tendendo ao infinito em ambas suas extremidades, intervalo.

var BuscaBanco = db.Banco.ToList();  //Aqui eu instanciei uma lista de dados do banco 

 foreach (var item in BuscaBanco)
                {  
                    if (item.Ativo == true || model.Ativo == true)
                    {
                        if (item.DataInicio < model.DataInicio)
                        {
                            item.Ativo = false;
                            db.Entry(item).State = EntityState.Modified;
                            db.SaveChanges();
                        }
                        else if (model.DataFim < item.DataFim)
                        {
                            item.Ativo = false;
                            db.Entry(item).State = EntityState.Modified;
                            db.SaveChanges();
                        }
                        else if(model.DataFim > item.DataInicio && item.Id != model.Id)
                        {
                            item.Ativo = false;
                            db.Entry(item).State = EntityState.Modified;
                            db.SaveChanges();

                        } else
                        {
                            item.Ativo = model.Ativo;
                            db.Entry(item).State = EntityState.Modified;
                            db.SaveChanges();
                            if(model.Id == item.Id)
                            {
                                model.Ativo = true;
                                db.Entry(model).State = EntityState.Modified;
                                db.SaveChanges();
                            }
                        }
                    } else
                    {
                        if (model.Id == item.Id)
                        {
                            model.Ativo = true;
                            db.Entry(model).State = EntityState.Modified;
                            db.SaveChanges();
                        }
                    }
           }
}
joomoraes commented 3 years ago
if (item.Ativo == true && item.Id != model.Id)
                    {
                        if (model.DataInicio <= item.DataInicio && model.DataFim >= item.DataInicio )
                        {
                            item.Ativo = false;
                            db.Entry(item).State = EntityState.Modified;

                        }else if(model.DataInicio <= item.DataInicio && model.DataFim >= item.DataInicio)
                        {
                            item.Ativo = false;
                            db.Entry(item).State = EntityState.Modified;
                        }else if(model.DataInicio >= item.DataInicio && model.DataFim >= item.DataInicio && model.DataInicio <= item.DataFim)
                        {
                            item.Ativo = false;
                            db.Entry(item).State = EntityState.Modified;
                        }

                    }