示例#1
0
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
示例#2
0
def isEmpty(map):
    """
    Informa si la tabla de hash se encuentra vacia
    """
    return ht.isEmpty(map)
示例#3
0
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