Гра на виживання: 16 гравців мають пройти по одному скляний міст з 18 кроків. Кожен крок - вибір однієї з двох скляних пластин, одна міцна, інша - ні. Хто не вгадав - вибуває разом із пластиною, наступний гравець або бачить розбиту пластину, або мусить пам'ятати, на яку пластину попередній ставав (що не дуже складно, бо йдуть ланцюжком).
Щось у фільмі мало пройшло, навіть з урахуванням психологічних проблем. Лише 3.
Накидав ось код
▼Прихований текст
BAD_JUMP = 0.01
BAD_MEMORY = 0.2
TILES = 18
PLAYERS = 16
import random
class SquidBridge:
def __init__(self, verbose = False):
self.verbose = verbose
self.tiles = [["left","right"]]*TILES
self.players = PLAYERS
self.completed = 0
def done(self):
return self.players == 0
def run_player(self):
if self.done():
return
for index, pair in enumerate(self.tiles):
if "bad" in pair:
if random.random()<BAD_MEMORY:
pair.remove("bad")
self.players -= 1
if self.verbose:
print(f"Player had forgot {index} step")
return
elif len(pair)==2:
if random.random()<0.5:
if self.verbose:
print(f"Player had guessed {index} step wrong")
self.players -= 1
pair.remove(random.choice(pair))
return
else:
pair[random.randint(0,1)] = "bad"
if random.random()<BAD_JUMP:
if self.verbose:
print(f"Player had misstepped {index} step")
self.players -= 1
return
self.players -= 1
self.completed += 1
def run(self):
if self.verbose:
print("Starting game!")
while not self.done():
self.run_player()
if self.verbose:
print(f"Game finished, {self.completed} alive!")
GAMES = 1000
def sample_game():
completed = 0
for _ in range(GAMES):
game = SquidBridge()
game.run()
completed += game.completed
print(completed/GAMES)
def one_game():
game = SquidBridge(True)
game.run()
if __name__=="__main__":
sample_game()
#one_game()
Якщо імовірність впасти при правильному стрибку 0.01 (там, здається, ніхто не зірвався таким чином, навіть під час бійок), а імовірність неправильно запам'ятати міцне скло 0.1 (у фільмі помилка була лише одна, тобто це досить завищена оцінка), то проходити мають в середньому 12.5 гравців з 16 - і це логічно, в середньому кожен гравець буде робити хоча б по 2 кроки, і якщо один зробив правильно - то наступні вже будуть рідко помилятися. А якщо пощастило і пройшов 4-5 кроків - то проводиш за собою натовп.
Чи я десь нагівнокодив?
(і це я не кажу, що ніхто не спробував пройти по рейках замість скла)