// Recibe un string de forma "Producto,Producto,Producto" (o sin los corchetes) y devuelve Secuencia<Producto> Secuencia<Producto> splitProductos(const std::string &productos){ // MEJORA: Si viene con espacios se rompe std::string parseado = productos; int sep = parseado.find(','); Secuencia<Producto> resultado; while (sep != std::string::npos) { Producto producto = aProducto(parseado.substr(0, sep)); resultado.push_back(producto); parseado = parseado.substr(sep + 1, -1); sep = parseado.find(','); } resultado.push_back(aProducto(parseado.substr(0,-1))); return resultado; }
Secuencia<InfoVueloCruzado> Drone::vuelosCruzados(const Secuencia<Drone>& ds) {//requiere que todos los drones tengan la misma longitud de vueloRealizado if(ds.size()==0) return {}; //el if es por que si me dan una secuencia vacia se rompe al pedir abajo, ds[0]..- Secuencia<InfoVueloCruzado> infoVuelos = {}; Posicion p = {}; Secuencia<Posicion> todasLasPos = todasLasPosSinRepetir(ds); int cantDrones = 0; int momento = 0; while(momento < ds[0].vueloRealizado().size()){ for(int i = 0; i < todasLasPos.size(); i++){ //miro todasLasPos de los drones que me pasen y me voy fijando cuantos drones en el momento "k" estuvieron en esa posicion. //Siempre habra al menos uno, si hay mas de uno, es un cruce. for(int j = 0; j < ds.size(); ++j){ if(ds[j].vueloRealizado()[momento] == todasLasPos[i]){ cantDrones++; } } if(cantDrones > 1){ //InfoVueloCruzado es un struct definido en tipos.h InfoVueloCruzado info; info.posicion = todasLasPos[i]; info.cantidadCruces = cantDrones; infoVuelos.push_back(info); } cantDrones = 0; } momento++; } return infoVuelos; }
//AUXILIARES Secuencia<Posicion> todasLasPosSinRepetir(const Secuencia<Drone> &ds) { Secuencia<Posicion> todas = {}; for(int i = 0; i < ds.size(); ++i){ for(int j = 0; j < ds[0].vueloRealizado().size(); ++j){ if(noPertenece(ds[i].vueloRealizado()[j], todas)){ Posicion pos = ds[i].vueloRealizado()[j]; todas.push_back(pos); } } } return todas; }