Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
94
Task/Two-bullet-roulette/Python/two-bullet-roulette.py
Normal file
94
Task/Two-bullet-roulette/Python/two-bullet-roulette.py
Normal file
|
|
@ -0,0 +1,94 @@
|
|||
""" Russian roulette problem """
|
||||
import numpy as np
|
||||
|
||||
class Revolver:
|
||||
""" simulates 6-shot revolving cylinger pistol """
|
||||
|
||||
def __init__(self):
|
||||
""" start unloaded """
|
||||
self.cylinder = np.array([False] * 6)
|
||||
|
||||
def unload(self):
|
||||
""" empty all chambers of cylinder """
|
||||
self.cylinder[:] = False
|
||||
|
||||
def load(self):
|
||||
""" load a chamber (advance til empty if full already), then advance once """
|
||||
while self.cylinder[1]:
|
||||
self.cylinder[:] = np.roll(self.cylinder, 1)
|
||||
self.cylinder[1] = True
|
||||
|
||||
def spin(self):
|
||||
""" spin cylinder, randomizing position of chamber to be fired """
|
||||
self.cylinder[:] = np.roll(self.cylinder, np.random.randint(1, high=7))
|
||||
|
||||
def fire(self):
|
||||
""" pull trigger of revolver, return True if fired, False if did not fire """
|
||||
shot = self.cylinder[0]
|
||||
self.cylinder[:] = np.roll(self.cylinder, 1)
|
||||
return shot
|
||||
|
||||
def LSLSFSF(self):
|
||||
""" load, spin, load, spin, fire, spin, fire """
|
||||
self.unload()
|
||||
self.load()
|
||||
self.spin()
|
||||
self.load()
|
||||
self.spin()
|
||||
if self.fire():
|
||||
return True
|
||||
self.spin()
|
||||
if self.fire():
|
||||
return True
|
||||
return False
|
||||
|
||||
def LSLSFF(self):
|
||||
""" load, spin, load, spin, fire, fire """
|
||||
self.unload()
|
||||
self.load()
|
||||
self.spin()
|
||||
self.load()
|
||||
self.spin()
|
||||
if self.fire():
|
||||
return True
|
||||
if self.fire():
|
||||
return True
|
||||
return False
|
||||
|
||||
def LLSFSF(self):
|
||||
""" load, load, spin, fire, spin, fire """
|
||||
self.unload()
|
||||
self.load()
|
||||
self.load()
|
||||
self.spin()
|
||||
if self.fire():
|
||||
return True
|
||||
self.spin()
|
||||
if self.fire():
|
||||
return True
|
||||
return False
|
||||
|
||||
def LLSFF(self):
|
||||
""" load, load, spin, fire, fire """
|
||||
self.unload()
|
||||
self.load()
|
||||
self.load()
|
||||
self.spin()
|
||||
if self.fire():
|
||||
return True
|
||||
if self.fire():
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
REV = Revolver()
|
||||
TESTCOUNT = 100000
|
||||
for (name, method) in [['load, spin, load, spin, fire, spin, fire', REV.LSLSFSF],
|
||||
['load, spin, load, spin, fire, fire', REV.LSLSFF],
|
||||
['load, load, spin, fire, spin, fire', REV.LLSFSF],
|
||||
['load, load, spin, fire, fire', REV.LLSFF]]:
|
||||
|
||||
percentage = 100 * sum([method() for _ in range(TESTCOUNT)]) / TESTCOUNT
|
||||
print("Method", name, "produces", percentage, "per cent deaths.")
|
||||
Loading…
Add table
Add a link
Reference in a new issue