def tripCityforDates (catalog, start_date, end_date): start_date=strToDate(start_date, '%m/%d/%Y') #Convertir fecha end_date=strToDate(end_date, '%m/%d/%Y') #Convertir fecha dateList = oms.valueRange(catalog['dateTree'], start_date, end_date, greater) #Lista de llaves entre las fechas dadas response='' tripsCityDays = map.newMap(capacity=11, maptype='CHAINING') #Se almacenan if dateList: print(dateList) iteraDate=it.newIterator(dateList) while it.hasNext(iteraDate): dateElement = it.next(iteraDate) #print(dateElement) if oms.get(catalog['dateTree'],dateElement, greater):#Si el nodo tiene un valor asociado if map.isEmpty(tripsCityDays):#Si cities está vacío, se le asigna el map de accidentes por ciudad del primer nodo tripsCityDays = oms.get(catalog['dateTree'], dateElement, greater) else: #De lo contrario, se compara cada ciudad del map de cada nodo con el map ciudadesNodo = map.keySet(dateElement)#Lista de las ciudades que tuvieron accidentes en esa fecha(nodo) ciudadesCities = map.keySet(tripsCityDays) iteraCiudades = it.newIterator(ciudadesNodo) while it.hasNext(iteraCiudades): ciudadElement=it.next(iteraCiudades)# que está en el map de cada nodo if ciudadElement: if lt.isPresent(ciudadesCities, ciudadElement, compareByKey): #Se verifica si la ciudad está en los valores del map num=map.get(tripsCityDays, ciudadElement)['value'] num+=map.get(dateElement, ciudadElement)['value'] map.put(tripsCityDays, ciudadElement, num) else: num= map.get(dateElement, ciudadElement)['value'] map.put(dateElement, ciudadElement, num) if not map.isEmpty(tripsCityDays): cityList= map.keySet(tripsCityDays) iteracity=it.newIterator(cityList) while it.hasNext(iteracity): cityKey = it.next(iteracity) response += str(cityKey) + ':' + str(map.get(tripsCityDays,cityKey)['value']) + " " return response return None
def isEmpty(map): """ Informa si la tabla de hash se encuentra vacia """ return ht.isEmpty(map)
def tripsPerTemperature(catalog, number): longList = lt.size(catalog['tempList']) leastTemp = lt.subList(catalog['tempList'],longList-number,number) mostTemp = lt.subList(catalog['tempList'], 1, number) #O(1) por ser array counter1 = 0 counter2 = 0 response1='' response2='' tripsMostTempDays = map.newMap(30, comparefunction=compareByKey) tripsLeastTempDays = map.newMap(30, comparefunction=compareByKey) while counter1<number: leastTempIterator = it.newIterator(leastTemp) #Iterar la lista con n menores temperaturas while it.hasNext(leastTempIterator): tempElement = it.next(leastTempIterator) #Temperatura dateListElement = map.get(catalog['temperatureHash'],tempElement)['value']#Lista de todas las fechas para esa temperatura if number - lt.size(dateListElement) < counter1: #si no se pueden agregar todas las fechas de esa temperatura sin alcanzar el n deseado n_dates = lt.subList(dateListElement, 1, number-counter1) #lista de las que si se pueden agragar n_iterator = it.newIterator(n_dates) while it.hasNext(n_iterator): n_dateElement = it.next(n_iterator) #fecha a agregar trips = oms.get(catalog['dateTree'], n_dateElement, greater) #hash de viajes de esa fecha #print(type(trips)) totaltrip = map.get(trips, 'total')['value'] #número de viajes totales en esa fecha value = (tempElement, totaltrip) #tupla que se asigna como valor de cada fecha: temperatura, viajes totales map.put(tripsLeastTempDays, n_dateElement, value) counter1 += lt.size(n_dates)#el número de fechas que se agregó se suma al counter else: #si se pueden agregar todas las fechas de esa temperatura sin alcanzar el n deseado n_dates = dateListElement #se recorre la lista completa n_iterator = it.newIterator(n_dates) while it.hasNext(n_iterator): n_dateElement = it.next(n_iterator) #fecha a agregar trips = oms.get(catalog['dateTree'], n_dateElement, greater) #print(type(trips)) totaltrip = map.get(trips, 'total')['value'] value = (tempElement, totaltrip) map.put(tripsLeastTempDays, n_dateElement, value) counter1 += lt.size(dateListElement) while counter2<number: mostTempIterator = it.newIterator(mostTemp) #Iterar la lista con n temperaturas más altas while it.hasNext(mostTempIterator): tempElement = it.next(mostTempIterator) dateListElement = map.get(catalog['temperatureHash'],tempElement)['value']#Lista de todas las fechas para esa temperatura if number - lt.size(dateListElement) < counter2: #si no se pueden agregar todas las fechas de esa temperatura sin alcanzar el n deseado n_dates = lt.subList(dateListElement, 1, number-counter2) n_iterator = it.newIterator(n_dates) while it.hasNext(n_iterator): n_dateElement = it.next(n_iterator) value = oms.get(catalog['dateTree'], n_dateElement, greater) value = map.get(value, 'total')['value'] value = (tempElement, value) map.put(tripsMostTempDays, n_dateElement, value) counter2 += lt.size(n_dates) else: #si se pueden agregar todas las fechas de esa temperatura sin alcanzar el n deseado n_dates = dateListElement n_iterator = it.newIterator(n_dates) while it.hasNext(n_iterator): n_dateElement = it.next(n_iterator) value = oms.get(catalog['dateTree'], n_dateElement, greater) value = map.get(value, 'total')['value'] value = (tempElement, value) map.put(tripsMostTempDays, n_dateElement, value) counter2 += lt.size(dateListElement) if not map.isEmpty(tripsMostTempDays): tempList= map.keySet(tripsMostTempDays) iteratemp=it.newIterator(tempList) while it.hasNext(iteratemp): tempKey = it.next(iteratemp) response1 += str(tempKey) + ':' + str(map.get(tripsMostTempDays,tempKey)['value']) + " " if not map.isEmpty(tripsLeastTempDays): tempList= map.keySet(tripsLeastTempDays) iteratemp=it.newIterator(tempList) while it.hasNext(iteratemp): tempKey = it.next(iteratemp) response2 += str(tempKey) + ':' + str(map.get(tripsLeastTempDays,tempKey)['value']) + " " return response1, response2