item_list = [ {'qmaQuoteAssemblyID': 0, 'qmaParentAssemblyID': 0, 'qmaPartID': 'RACK S9 ', 'qmaLevel': 1, 'qmaQuantityPerParent': 1.00000, 'qmaPartShortDescription': '12U x 600 x 650 Professional Rack '}, {'qmaQuoteAssemblyID': 1, 'qmaParentAssemblyID': 0, 'qmaPartID': 'COLOUR ', 'qmaLevel': 2, 'qmaQuantityPerParent': 1.00000, 'qmaPartShortDescription': '. '}, {'qmaQuoteAssemblyID': 2, 'qmaParentAssemblyID': 0, 'qmaPartID': 'FRAME ', 'qmaLevel': 2, 'qmaQuantityPerParent': 1.00000, 'qmaPartShortDescription': '. '}, {'qmaQuoteAssemblyID': 3, 'qmaParentAssemblyID': 0, 'qmaPartID': 'MOUNTING ', 'qmaLevel': 2, 'qmaQuantityPerParent': 1.00000, 'qmaPartShortDescription': '. '}, {'qmaQuoteAssemblyID': 4, 'qmaParentAssemblyID': 0, 'qmaPartID': 'FRONT DOOR ', 'qmaLevel': 2, 'qmaQuantityPerParent': 1.00000, 'qmaPartShortDescription': '. '}, {'qmaQuoteAssemblyID': 5, 'qmaParentAssemblyID': 0, 'qmaPartID': 'REAR DOOR ', 'qmaLevel': 2, 'qmaQuantityPerParent': 1.00000, 'qmaPartShortDescription': '. '}, {'qmaQuoteAssemblyID': 6, 'qmaParentAssemblyID': 0, 'qmaPartID': 'LEFT SIDE PANEL ', 'qmaLevel': 2, 'qmaQuantityPerParent': 1.00000, 'qmaPartShortDescription': '(when viewed from front of rack) '}, {'qmaQuoteAssemblyID': 7, 'qmaParentAssemblyID': 0, 'qmaPartID': 'RIGHT SIDE PANEL ', 'qmaLevel': 2, 'qmaQuantityPerParent': 1.00000, 'qmaPartShortDescription': '(when viewed from front of rack) '}, {'qmaQuoteAssemblyID': 8, 'qmaParentAssemblyID': 0, 'qmaPartID': 'ACCESSORIES ', 'qmaLevel': 2, 'qmaQuantityPerParent': 1.00000, 'qmaPartShortDescription': '. '}, {'qmaQuoteAssemblyID': 9, 'qmaParentAssemblyID': 0, 'qmaPartID': 'PDU ', 'qmaLevel': 2, 'qmaQuantityPerParent': 1.00000, 'qmaPartShortDescription': '. '}, {'qmaQuoteAssemblyID': 10, 'qmaParentAssemblyID': 0, 'qmaPartID': 'FRONT VCM ', 'qmaLevel': 2, 'qmaQuantityPerParent': 1.00000, 'qmaPartShortDescription': '. '}, {'qmaQuoteAssemblyID': 11, 'qmaParentAssemblyID': 0, 'qmaPartID': 'REAR VCM ', 'qmaLevel': 2, 'qmaQuantityPerParent': 1.00000, 'qmaPartShortDescription': '. '}, {'qmaQuoteAssemblyID': 12, 'qmaParentAssemblyID': 0, 'qmaPartID': 'PACKAGING ', 'qmaLevel': 2, 'qmaQuantityPerParent': 1.00000, 'qmaPartShortDescription': '. '}, {'qmaQuoteAssemblyID': 21, 'qmaParentAssemblyID': 1, 'qmaPartID': '800-560192 ', 'qmaLevel': 3, 'qmaQuantityPerParent': 1.00000, 'qmaPartShortDescription': 'Colour: Mannex Suede '}, {'qmaQuoteAssemblyID': 22, 'qmaParentAssemblyID': 2, 'qmaPartID': '1A000 ', 'qmaLevel': 3, 'qmaQuantityPerParent': 1.00000, 'qmaPartShortDescription': 'Label 19" Rack Container Commercial '}, {'qmaQuoteAssemblyID': 23, 'qmaParentAssemblyID': 2, 'qmaPartID': '0R000P ', 'qmaLevel': 3, 'qmaQuantityPerParent': 1.00000, 'qmaPartShortDescription': 'Frame Top x 600 x 650 Typ 0P '}, {'qmaQuoteAssemblyID': 24, 'qmaParentAssemblyID': 2, 'qmaPartID': '0S0221 ', 'qmaLevel': 3, 'qmaQuantityPerParent': 4.00000, 'qmaPartShortDescription': 'Frame Vertical 12U H2 Type 1 '}, {'qmaQuoteAssemblyID': 25, 'qmaParentAssemblyID': 2, 'qmaPartID': '0T000P ', 'qmaLevel': 3, 'qmaQuantityPerParent': 1.00000, 'qmaPartShortDescription': 'Frame Bottom x 600 x 650 Type 0P '}, {'qmaQuoteAssemblyID': 27, 'qmaParentAssemblyID': 3, 'qmaPartID': '0E220 ', 'qmaLevel': 3, 'qmaQuantityPerParent': 1.00000, 'qmaPartShortDescription': 'Base Pro. Levelling Feet + Mount Plate Kit GA '}, {'qmaQuoteAssemblyID': 28, 'qmaParentAssemblyID': 3, 'qmaPartID': '03020D0 ', 'qmaLevel': 3, 'qmaQuantityPerParent': 4.00000, 'qmaPartShortDescription': 'Gusset Mount Rail 12U x 600 '}, {'qmaQuoteAssemblyID': 29, 'qmaParentAssemblyID': 4, 'qmaPartID': 'NO DOOR ', 'qmaLevel': 3, 'qmaQuantityPerParent': 1.00000, 'qmaPartShortDescription': 'No Door Required '}, {'qmaQuoteAssemblyID': 34, 'qmaParentAssemblyID': 5, 'qmaPartID': 'NO DOOR ', 'qmaLevel': 3, 'qmaQuantityPerParent': 1.00000, 'qmaPartShortDescription': 'No Door Required '}, {'qmaQuoteAssemblyID': 35, 'qmaParentAssemblyID': 27, 'qmaPartID': '800-250215 ', 'qmaLevel': 4, 'qmaQuantityPerParent': 4.00000, 'qmaPartShortDescription': 'Levelling Feet '}, {'qmaQuoteAssemblyID': 36, 'qmaParentAssemblyID': 35, 'qmaPartID': '800-250137 ', 'qmaLevel': 5, 'qmaQuantityPerParent': 1.00000, 'qmaPartShortDescription': ';;;;;Leveling;Foot;Plate; '}, {'qmaQuoteAssemblyID': 37, 'qmaParentAssemblyID': 28, 'qmaPartID': '127040 ', 'qmaLevel': 4, 'qmaQuantityPerParent': 1.00000, 'qmaPartShortDescription': 'Mount Rail Gusset 12U Universal '}, {'qmaQuoteAssemblyID': 38, 'qmaParentAssemblyID': 28, 'qmaPartID': '127014 ', 'qmaLevel': 4, 'qmaQuantityPerParent': 1.00000, 'qmaPartShortDescription': '12U;0600;;;C;Mount;Rail; '}] dfp = {} for item in item_list: dfp[item['qmaQuoteAssemblyID']] = item items = {} for item in item_list: parent_dict = items.setdefault(item['qmaParentAssemblyID'], {}) child_dict = items.setdefault(item['qmaQuoteAssemblyID'], {}) if item['qmaQuoteAssemblyID'] not in parent_dict: parent_dict[item['qmaQuoteAssemblyID']] = child_dict def print_dictionary(dictionary, root, level = 0.0): if dictionary: for item in sorted(dictionary): if item != root: b = dfp[item]['qmaPartID'] c = item d = dfp[item]['qmaParentAssemblyID'] print("%s (ParentID: %d, ChildID: %d)" % (b, c, d)) print_dictionary(dictionary[item], item, level + 1) def print_root(dictionary, root, level = 0.0): a = dfp[root]['qmaPartID'] b = root c = dfp[root]['qmaParentAssemblyID'] print("%s (ParentID: %d, ChildID: %d)" % (a, b, c)) print_dictionary(dictionary, root) print_root(items[0], 0)
class mynumbers: def __iter__(self): self.a=1 return self def __next__(self): if self.a<=20: x=self.a self.a +=1 return x else: raise stopiteration myclass=mynumbers() myiter=iter(myclass) for x in myiter: print(x)
# Reservoir Sampling # https://www.geeksforgeeks.org/reservoir-sampling/ # Reservoir sampling is a randomly choosing k samples from a list of n items, where n is either a very large or unkonwn number. Typically n is large enough that the list doesn't fit into main memory. For example, a list of search queries in Google and Facebook # So we are given a big array ( or stream) of numbers (to simplify), and we need to write an effcient function to randomly selection k numbers where 1 <= k <=n. Let the input array be stream[] # A simple solution is to create an array reservoir[] of maximum size k. One by one randomly select an iteam from stream[0...n-1]. If the selected item is not previously selected, then put it in reservoir[]. To check if an item is previously selected or not, we need to search the item in reservoir[]. The time complexity of this algorithm will be O(k^2). This can be costly if k is big. Also, this is not efficient if the input is in the form of a stream. # It can be solved in O(n) time. The solution also suits well for input in the form of stream. The idea is similiar to Shuffle a given array using Fisher–Yates shuffle Algorithm. Following are the steps. # 1. Create an array reservoir[0...k-1] and copy first k items of stream[] to it # 2. Now one by one select consider all items from (k+1)th item to nth item # 2.1. Generate a random number from 0 to i where i is index of current item in stream[]. Let the generated random numbre is j. # 2.2. If j is in range 0 to k-1, replace reservoir[j] with arr[i] # Efficient program to randomly select k items from a stream of items import random # A utility function to print an array def printArray(stream, n): for i in range(n): print(stream[i], end=" ") print() # A function to randomly select k items from stream[0...n-1] def selectKItems1(stream, n, k): i = 0 # index for elements in stream[] # reservoir[] is the output array. Initialize it with first k elements from stream[] reservoir = [0 for _ in range(k)] for i in range(k): reservoir[i] = stream[i] # Iterate from the (k+1) the element to nth element while i < n: # Pick a random index from 0 to i j = random.randrange(i+1) # if the randomly picked index is smaller than k, then replace the element present at the index with new element from stream if j < k: reservoir[j] = stream[i] i += 1 print('Following are k randomly selected items using 1st method') printArray(reservoir, k) def selectKItems2(stream, n, k): reservoir = [0 for _ in range(k)] for i in range(k): reservoir[i] = stream[i] for i in range(k, n): j = random.randrange(i+1) if j < k: reservoir[j] = stream[i] print('Following are k randomly selected items using 2nd method') printArray(reservoir, k) # Driver Code if __name__ == "__main__": stream = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] n = len(stream) k = 5 selectKItems1(stream, n, k) selectKItems2(stream, n, k) # Time Complexity O(n) # How does this work? # To prove that this solution works perfectly, must prove that the probability that any item stream[i] where 0 <= i < n will be in final reservoir[] is k / n. Let us divide the proof in 2 cases as first k items are treated differently # Case1: For last n - k stream items, eg. for stream[i] where k <= i < n # For every such stream item stream[i], we pick a random index from 0 to i and if the picked index is one of the first k indexes, we replace the element at picked index with stream[i] # To simplify the proof, let us first consider the last item. The probability that the last item is in final reservoir = The probability that one of the first k indexes is picked for last item = k / n (the probability of picking one of the k items from a list of size n) # Let us now consider the second last item. The probability that the second last item is in final reservoir[] = [Probability that one of the first k indexes is picked in iteration for stream[n-2]] * [Probability that the index picked in iteration for stream[n-1] is not same as index picked for stream[n-2]] = [k/(n-1)] * [(n-1)/n] = k/n # Similarly, we can consider other items for all stream items from stream[n-1] to stream[k] and generalize the proof # Case2: For first k stream items, eg, for stream[i] where 0 <= i < k # The first k items are initially copied to reservoir[] and may be removed later in iterations for stream[k] to stream[n]. #The probability that an item from stream[0...k-1] is in final array = Probability that the item is not picked when items stream[k], stream[k+1], ...stream[n-1] are considered = [k/(k+1)] * [(k+1)/(k+2)] * [(k+2)/(k+3)]*...*[(n-1)/n] = k / n # Example Implementation -- Samples the set of English Wikipedia page titles ''' import random sample_count = 10 # Force the value of the seed so the results are repeatable random.seed(12345) sample_title = [] for index, line in enumerate(open("enwiki-20091103-all-titles-in-ns0")): # Generate the reservoir if index < sample_count: sample_title.append(line) else: # Ranomly replace elements in the reservoir # with a decreasing probability. # Choose an integer between 0 and index (inclusive) r = random.randint(0, index) if r < sample_count: sample_title[r] = line print(sample_title) ''' # Rservoir Sampling # https://medium.com/100-days-of-algorithms/day-33-reservoir-sampling-252062ce0baa import random def reservoir_sample(size): i, sample = 0, [] while True: item = yield i, sample i += 1 k = random.randint(0, i) if len(sample) < size: sample.append(item) elif k < size: sample[k] = item # Sampling reservoir = reservoir_sample(5) next(reservoir) for i in range(1000): k, sample = reservoir.send(i) if k % 100 == 0: print(k, sample)
print ("Angles Of A Triangle") A = float(input("Enter Angle A In Degrees:\n")) B = float(input("Enter Angle B In Degrees:\n")) C = round(180 - A - B ,1) print ("Missing Angle Is",C,"Degrees") if A==B and A==C and B==C: print ("This is an equilateral")
print("angles of a triangle") a=float(input("enter an angle in degrees:\n")) b=float(input("enter another angle in degrees:\n")) c=round(180 - a - b) print("angle three is",c,"degrees") if a==b and a==c and b==c: print("This is an equalataral Triangle")
# Hello World program in Python from random import randint lista=[] for i in range(10): los=randint(1,10) lista.append(los) print(lista)
# Python program to find maximum amount of water that can # be trapped within given set of bars. def findWater(arr, n): # left[i] contains height of tallest bar to the # left of i'th bar including itself left = [0]*n # Right [i] contains height of tallest bar to # the right of ith bar including itself right = [0]*n # Initialize result water = 0 # Fill left array left[0] = arr[0] print(left[-1]) for i in range( 1, n): left[i] = max(left[i-1], arr[i]) print(f"left[i]=",left[i]) # Fill right array right[n-1] = arr[n-1] print(f"n",n) for i in range(n-2, -1, -1): right[i] = max(right[i+1], arr[i]) print(f"right[i+1]",right[i+1]) print(f"right=",right) print(f"left=",left) print(f"arr=",arr) # Calculate the accumulated water element by element # consider the amount of water on i'th bar, the # amount of water accumulated on this particular # bar will be equal to min(left[i], right[i]) - arr[i] . for i in range(0, n): water += min(left[i],right[i]) - arr[i] print(f"water",water) return water # Driver program arr = [0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1] n = len(arr) print("Maximum water that can be accumulated is",findWater(arr, n)) # This code is contributed by # Smitha Dinesh Semwal
def findDollor(A, k, d, b): gain = k left = A[0] # current min of a interval initial = k # Dollar ready to be traded for i in range(1, len(A)): # Find the day the rate is not increasing if A[i] < A[i-1]: if left != A[i-1]: USD_if_traded = (initial-d)/left # USD to BDC USD_if_traded = (USD_if_traded-b)*A[i-1] # BDC to USD gain = max(gain, USD_if_traded) initial = gain # Use the newly gained amount to do the next transaction left = A[i] # start the next interval # One last interval left if left != A[len(A)-1]: USD_if_traded = (initial-d)/left # USD to BDC USD_if_traded = (USD_if_traded-b)*A[len(A)-1] # BDC to USD gain = max(gain, USD_if_traded) return gain A = [10000, 50, 60, 5, 9, 9, 9, 80, 30, 40, 40, 80, 85, 100, 150, 50, 80, 90, 200] #A = [20, 20, 10] d = 20 b = 10 k = 100 #table = findDollar(A, k, d, b) USD_if_traded = (100-b)/10 # USD to BDC USD_if_traded = (USD_if_traded-d)*100 # BDC to USD print (USD_if_traded) print (findDollor(A, k, d, b))
We use cookies to provide and improve our services. By using our site, you consent to our Cookies Policy. Accept Learn more