# A quick Python code that goes through all possibilities calculates the odds of Gurubashi survival at 84.247%.
minions = [1,2,2,2,3,7]
cache = {}
def f(minions, volcano):
code = tuple(minions + [volcano])
if code in cache:
return cache[code]
if volcano == 0:
return float(minions[-1] == 1)
num_alive = sum([x>0 for x in minions])
chance = 0.0
for idx, minion in enumerate(minions):
if minion > 0:
one_tick = minions[:]
one_tick[idx] -= 1
chance += f(one_tick, volcano-1)/float(num_alive)
cache[code] = chance
return chance
print(f(minions, 16))
IyBBIHF1aWNrIFB5dGhvbiBjb2RlIHRoYXQgZ29lcyB0aHJvdWdoIGFsbCBwb3NzaWJpbGl0aWVzIGNhbGN1bGF0ZXMgdGhlIG9kZHMgb2YgR3VydWJhc2hpIHN1cnZpdmFsIGF0IDg0LjI0NyUuCgptaW5pb25zID0gWzEsMiwyLDIsMyw3XQpjYWNoZSA9IHt9CmRlZiBmKG1pbmlvbnMsIHZvbGNhbm8pOgogIGNvZGUgPSB0dXBsZShtaW5pb25zICsgW3ZvbGNhbm9dKQogIGlmIGNvZGUgaW4gY2FjaGU6CiAgICByZXR1cm4gY2FjaGVbY29kZV0KICBpZiB2b2xjYW5vID09IDA6CiAgICByZXR1cm4gZmxvYXQobWluaW9uc1stMV0gPT0gMSkKICBudW1fYWxpdmUgPSBzdW0oW3g+MCBmb3IgeCBpbiBtaW5pb25zXSkKICBjaGFuY2UgPSAwLjAKICBmb3IgaWR4LCBtaW5pb24gaW4gZW51bWVyYXRlKG1pbmlvbnMpOgogICAgaWYgbWluaW9uID4gMDoKICAgICAgb25lX3RpY2sgPSBtaW5pb25zWzpdCiAgICAgIG9uZV90aWNrW2lkeF0gLT0gMQogICAgICBjaGFuY2UgKz0gZihvbmVfdGljaywgdm9sY2Fuby0xKS9mbG9hdChudW1fYWxpdmUpCiAgY2FjaGVbY29kZV0gPSBjaGFuY2UKICByZXR1cm4gY2hhbmNlCnByaW50KGYobWluaW9ucywgMTYpKQ==