TDT4109/Exercise 6/8.py

60 lines
1.7 KiB
Python

from random import sample
import threading
def guessInput(amount):
while True:
try:
answer = input(f'Gjett {amount} tall\n').split(' ')
assert len(answer) == amount
return [int(num) for num in answer]
except:
print(f'Er du sikker på at du har skrevet inn {amount} tall? Prøv igjen.')
drawNumber = lambda numList, amount: sample(numList, amount)
compList = lambda list1, list2: len([1 for elem in list1 if elem in list2])
def Winnings(rightNums, rightExtraNums):
isBiggerThan = lambda rn, ren: rightNums >= rn and rightExtraNums >= ren
if isBiggerThan(7,0): return 2749455
elif isBiggerThan(6,1): return 102110
elif isBiggerThan(6,0): return 3385
elif isBiggerThan(5,0): return 95
elif isBiggerThan(4,1): return 45
else: return 0
numbers = list(range(1,35))
calculateRightNumbers = lambda list: compList(list, drawNumber(numbers, len(list)))
combinedRightNumbers = lambda list1, list2: Winnings(calculateRightNumbers(list1), calculateRightNumbers(list2))
def main():
myGuess = guessInput(7)
print('Nå skal du gjette ekstra-tall')
myExtraGuess = guessInput(3)
print('Du vant {} kroner'.format(combinedRightNumbers(myGuess, myExtraGuess) - 5))
# g)
def calculateMillionSum(threadNum):
timesPerTread = int(1000000/threadNum)
results = []
def threadTarget():
partialSum = sum([combinedRightNumbers(sample(numbers, 7), sample(numbers, 3)) - 5 for _ in range(timesPerTread)])
results.append(partialSum)
threads = [threading.Thread(target=threadTarget) for _ in range(threadNum)]
for thread in threads:
thread.start()
for thread in threads:
thread.join()
return sum(results)
if __name__ == "__main__":
# main()
result = calculateMillionSum(64)
print(result)