"""G07: offline prefix lookup and a one-server finite-capacity FIFO trace."""fromcollectionsimportdequeimportipaddressimportmathdefroute(address,routes):address=ipaddress.ip_address(address)parsed,seen=[],set()forprefix,destinationinroutes:network=ipaddress.ip_network(prefix,strict=True)ifnetworkinseen:raiseValueError("duplicate prefix")seen.add(network)ifnetwork.version!=address.version:raiseValueError("mixed address families are outside this lab contract")parsed.append((network,destination))matches=[(n,d)forn,dinparsedifaddressinn]ifnotmatches:returnNonenetwork,destination=max(matches,key=lambdaitem:item[0].prefixlen)returnstr(network),destinationdefqueue_trace(arrivals,service=1.,capacity=3):arrivals=list(arrivals)iflen(arrivals)>100000orany(notmath.isfinite(t)ort<0fortinarrivals):raiseValueError("bounded finite nonnegative arrival times required")ifany(b<afora,binzip(arrivals,arrivals[1:])):raiseValueError("arrivals must be nondecreasing")ifnotmath.isfinite(service)orservice<=0:raiseValueError("positive finite service duration required")iftype(capacity)isnotintornot1<=capacity<=100000:raiseValueError("capacity counts waiting plus in-service jobs")finishes,records=deque(),[]forjob,arrivalinenumerate(arrivals):whilefinishesandfinishes[0]<=arrival:finishes.popleft()# completions precede arrivals at the same timeiflen(finishes)>=capacity:records.append({"job":job,"arrival":arrival,"accepted":False,"start":None,"finish":None})continuestart=max(arrival,finishes[-1]iffinisheselsearrival)finish=start+serviceifnotmath.isfinite(finish)orfinish<=start:raiseValueError("service endpoint overflow or no represented progress")finishes.append(finish)records.append({"job":job,"arrival":arrival,"accepted":True,"start":start,"finish":finish})returnrecordsif__name__=="__main__":print(route("10.2.1.8",[("0.0.0.0/0","default"),("10.2.0.0/16","local")]))print(queue_trace([0,0,0,4]))