Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
First solution in Creative category for Pearls in the Box by RomanTT
def rever(marbles,step):
ans = []
d,d1 = {},{}
for i in marbles:
for j in range(len(i)):
if i[j] == 'w':
temp = i[:j] + 'b' + i[j+1:]
ans = ''.join(sorted(temp))
if ans in d:
d[ans] += 1
else:
d[ans] = 1
if i[j] == 'b':
temp = i[:j] + 'w' + i[j+1:]
ans = ''.join(sorted(temp))
if ans in d:
d[ans] += 1
else:
d[ans] = 1
freq = sum(i.count('w')/len(i)*d[i]/sum(d.values()) for i in d)
for _ in range(step-2):
for i in d:
for j in range(len(i)):
if i[j] == 'w':
temp = i[:j] + 'b' + i[j+1:]
ans = ''.join(sorted(temp))
if ans in d1:
d1[ans] += d[i]
else:
d1[ans] = d[i]
if i[j] == 'b':
temp = i[:j] + 'w' + i[j+1:]
ans = ''.join(sorted(temp))
if ans in d1:
d1[ans] += d[i]
else:
d1[ans] = d[i]
freq = sum(i.count('w')/len(i)*d1[i]/sum(d1.values()) for i in d1)
d,d1 = d1,{}
return ans,freq
def checkio(marbles, step):
b=marbles.count("w")
n=len(marbles)
freq = b/n
if step <= 1:
print(1)
return freq
marbles = [marbles]
marbles,freq = rever(marbles,step)
return freq
checkio("bbw",3)
#checkio('bbw', 3)# == 0.48
#checkio('wwb', 3)# == 0.52
#checkio('www', 3)# == 0.56
#checkio('bbbb', 1)# == 0
#checkio('wwbb', 4)# == 0.5
#checkio('bwbwbwb', 5)# == 0.48
#if __name__ == '__main__':
# assert checkio("wwwwwwwwwwwwwwwwwwww",14) == 0.64, "1st example"
Oct. 25, 2018