Advertisement
sslinky

DailyCodingProblem

Feb 3rd, 2020
178
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.42 KB | None | 0 0
  1. import random
  2. import time
  3. import csv
  4.  
  5. """
  6. Given a list of numbers and a number k, return whether any two numbers from the list add up to k.
  7. For example, given [10, 15, 3, 7] and k of 17, return true since 10 + 7 is 17.
  8. Bonus: Can you do this in one pass?
  9. """
  10.  
  11. # Horribly inefficient one liner - O(n^2)
  12. # def dcp_list(nums,k): return k in [nums[i] + nums[j] for i in range(len(nums)) for j in range(i+1,len(nums))]
  13.  
  14.  
  15. def run():
  16.     # Daily Coding Problem answer
  17.     def dcp(nums, k):
  18.         start = time.time()
  19.         for i in range(len(nums)):
  20.             for j in range(i+1,len(nums)):
  21.                 if nums[i] + nums[j] == k:
  22.                     return time.time() - start
  23.         return time.time() - start
  24.        
  25.     # Test dcp
  26.     results = [['Length', 'r500', 'r1.000', 'r10.000', 'r100.000', 'r1.000.000']]
  27.     random.seed(0)
  28.     for i in range(100,10001,100):
  29.         for _ in range(50):
  30.             new_line = [i]
  31.             for n in [500,1000,10000,100000,1000000]:
  32.                 new_line.append(dcp(
  33.                     [random.randint(1,n) for _ in range(i)],
  34.                     random.randint(2,n*2)))
  35.             results.append(new_line)
  36.    
  37.     # Save to csv
  38.     with open(r'F:\svand\Documents\Personal\Programming\Python\DailyChallenge 001\test_results.csv', 'w') as f:
  39.         w = csv.writer(f, delimiter=',', quotechar='"', lineterminator='\r')
  40.         w.writerows(results)
  41.  
  42.  
  43. run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement