コード例 #1
0
        public string ProcesarDatos(EntradasDto estrutura)
        {
            String traza       = "";
            int    cargaMinima = 50;
            var    salidas     = new List <String>();

            try
            {
                //Recorremos la estructura para calcular los viajes
                foreach (var item in estrutura.LstElementosPorDia)
                {
                    int totalCarga = 0;

                    int     totalViajes = 0;
                    var     pesos       = item.LstElementosACargar;
                    PesoDto pesoMax     = new PesoDto(0);

                    //mientras hayan pesos que procesar
                    while (pesos.Count > 0)
                    {
                        if (totalCarga == 0)
                        {
                            //calculamos la carga maxima y luego la removemos de la estructura
                            pesoMax = pesos.Max();
                            pesos.Remove(pesoMax);
                            totalCarga += pesoMax.Peso;
                        }
                        else
                        {
                            //calculamos la carga minima y luego la removemos de la estructura
                            var pesoMin = pesos.Min();
                            pesos.Remove(pesoMin);
                            totalCarga += pesoMax.Peso;
                        }

                        // si el total de la carga supera las 50 libras reiniciamos el proceso
                        if (totalCarga >= cargaMinima)
                        {
                            totalViajes++;
                            totalCarga = 0;
                        }
                    }

                    //Añadimos la salida calculada
                    salidas.Add($"Case #{ salidas.Count() + 1 }: { totalViajes }");
                }

                //construimos la traza
                foreach (var item in salidas)
                {
                    traza += $"{ item }{ "\n" }";
                }

                return(traza);
            }
            catch (Exception)
            {
                return("Error al procesar los datos.");
            }
        }
コード例 #2
0
        public EntradasDto LeerArregloDatos(String[] datos)
        {
            int numeroElementosPorDia = 0;
            var ElementosPorDia       = new ElementosDto();
            var estrutura             = new EntradasDto {
                LstElementosPorDia = new List <ElementosDto>()
            };

            //Recorremos el arreglo de datos para cargarlo en una estructura
            for (int i = 0; i < datos.Length; i++)
            {
                //leemos el valor correspondeiente a la posicion
                int valor = Int32.Parse(datos[i]);

                if (i == 0) // el primer elemento hace referencia al numero de dias
                {
                    estrutura.NumeroDias = valor;
                }
                else if (numeroElementosPorDia == 0) //asignamos el numero de elementos por dia
                {
                    ElementosPorDia = new ElementosDto {
                        NumeroElementosPorDia = valor
                    };
                    numeroElementosPorDia = valor;  //guargamos el valor para que en el siguiente ciclo no se lea
                }
                else
                {
                    //Se recorre el arreglo en base an numero  de elementos por dia y se cargan los pesos
                    //de cada elemento correspondiente a la lista de pesos
                    var lstPesos = new List <PesoDto>();

                    for (int j = i; j < i + numeroElementosPorDia; j++)
                    {
                        valor = Int32.Parse(datos[j]);

                        lstPesos.Add(new PesoDto(valor));
                    }

                    if (lstPesos.Count > 0)
                    {
                        ElementosPorDia.LstElementosACargar = lstPesos;    // se cargan los pesos al elemento
                        estrutura.LstElementosPorDia.Add(ElementosPorDia); // se carga el elemnto a la estructura
                    }

                    i += numeroElementosPorDia - 1; //actulizamos el indice en base a los elementos procesados
                    numeroElementosPorDia = 0;      //reiniciamos el valor para que en el siguiente ciclo se lea
                }
            }

            return(estrutura);
        }
コード例 #3
0
        public async Task <string> ValidarDatosArchivoAsync(IFormFile archivo)
        {
            try
            {
                String[] arregloDatos;
                int      numeroElementosPorDia = 0;
                var      ElementosPorDia       = new ElementosDto();
                var      estrutura             = new EntradasDto {
                    LstElementosPorDia = new List <ElementosDto>()
                };

                String datosLeidos;

                //leemos el archivo
                using (var lector = new StreamReader(archivo.OpenReadStream()))
                {
                    datosLeidos = await lector.ReadToEndAsync();
                }

                //convertimos los datos en un arreglo de datos
                arregloDatos = datosLeidos.Split('\n');

                if (arregloDatos.Length < 3)
                {
                    return("No se pudo procesar el archivo.");
                }

                //verificamos que todos los datos sean numericos
                foreach (var item in arregloDatos)
                {
                    bool success = Int32.TryParse(item, out int numero);

                    if (!success || numero < 1 || numero > 500)
                    {
                        return("Todos los elementos del archivo deben ser numeros enteros entre 1 y 500");
                    }
                }


                //Recorremos el arreglo de datos para cargarlo en una estructura
                for (int i = 0; i < arregloDatos.Length; i++)
                {
                    //leemos el valor correspondeiente a la posicion
                    int valor = Int32.Parse(arregloDatos[i]);

                    if (i == 0) // el primer elemento hace referencia al numero de dias
                    {
                        if (valor < 1 || valor > 500)
                        {
                            return("El numero de dias a trabajar debe estar entre 1 y 500.");
                        }

                        estrutura.NumeroDias = valor;
                    }
                    else if (numeroElementosPorDia == 0) //asignamos el numero de elementos por dia
                    {
                        if (valor < 1 || valor > 100)
                        {
                            return("El numero de elementos a cargar por dia debe estar entre 1 y 100.");
                        }

                        ElementosPorDia.NumeroElementosPorDia = valor;
                        numeroElementosPorDia = valor;  //guargamos el valor para que en el siguiente ciclo no se lea
                    }
                    else
                    {
                        //Se recorre el arreglo en base an numero  de elementos por dia y se cargan los pesos
                        //de cada elemento correspondiente a la lista de pesos
                        var lstPesos = new List <PesoDto>();

                        for (int j = i; j < i + numeroElementosPorDia; j++)
                        {
                            valor = Int32.Parse(arregloDatos[j]);

                            if (valor < 1 || valor > 100)
                            {
                                return("El peso de los elementos a cargar debe estar entre 1 y 100.");
                            }

                            lstPesos.Add(new PesoDto(valor));
                        }

                        if (lstPesos.Count > 0)
                        {
                            ElementosPorDia.LstElementosACargar = lstPesos;    // se cargan los pesos al elemento
                            estrutura.LstElementosPorDia.Add(ElementosPorDia); // se carga el elemnto a la estructura
                        }

                        i += numeroElementosPorDia - 1; //actulizamos el indice en base a los elementos procesados
                        numeroElementosPorDia = 0;      //reiniciamos el valor para que en el siguiente ciclo se lea
                    }
                }

                //validamos que la estructura sea coherente
                if (estrutura.NumeroDias != estrutura.LstElementosPorDia.Count)
                {
                    return("Los datos en el archivo no tienen coherencia.");
                }

                foreach (var item in estrutura.LstElementosPorDia)
                {
                    if (item.NumeroElementosPorDia != item.LstElementosACargar.Count)
                    {
                        return("Los datos en el archivo no tienen coherencia.");
                    }
                }

                return(String.Empty);
            }
            catch (Exception)
            {
                return("La cantidad de elementos en el archivo no es la correcta.");
            }
        }