Detailed problem statement can be found here Gambler's Ruin

General solution to the problem is;

\(1- a_1 = a_1 \sum\limits_{i = 1}^{k-1} \left(\frac{1 - p}{p}\right)^i\)

For a fair game of \(p = \frac{1}{2}\), \(a_1 = \frac{1}{k}\)

and, for an unfair game of \(p \neq \frac{1}{2}\)

\(a_1 =\frac{\left(\frac{1-p}{p}\right)-1}{\left(\frac{1-p}{p}\right)^k-1}\)

Below is the python implementation of the simulation of a fair game of probability \(\frac{1}{2}\), with player 1 balance of $98 & player 2 balance of $2

```
# -*- coding: utf-8 -*-
import numpy as np
number_of_simulations = 1000
# Create an array of wins of length equal to number_of_simulations
wins = [False] * number_of_simulations
# Fair Game
prob = 0.5
p1_balance = 98
p2_balance = 2
for i in range(number_of_simulations):
p1b = p1_balance
p2b = p2_balance
# Play until p1 or p2 is getting ruined
while p1b > 0 and p2b > 0:
p1_win = np.random.uniform(0, 1) < prob
p1b = p1b + 1 if p1_win else p1b - 1
p2b = p2b - 1 if p1_win else p2b + 1
# Set to True, if p1 still not ruined
wins[i] = p1b > 0
prob_p1_wins = sum(wins)/number_of_simulations
print(f'Player 1\'s probability of wining is: {prob_p1_wins}')
```

Output is;

```
Player 1's probability of wining is: 0.979
```

On repeatedly running the above simulation for the player 1 balance ranging from 1 to 99, we will see that probability increases as the initial amount increases;