#define SOLID "#" #define EMPTY " " #define WET "v" Dim Shared As String grid() Dim Shared As Integer last, lastrow, m, n Sub make_grid(x As Integer, y As Integer, p As Double) m = x n = y Redim Preserve grid(x*(y+1)+1) last = Len(grid) Dim As Integer lastrow = last-n Dim As Integer i, j For i = 0 To x-1 For j = 1 To y grid(1+i*(y+1)+j) = Iif(Rnd < p, EMPTY, SOLID) Next j Next i End Sub Function ff(i As Integer) As Boolean If i <= 0 Or i >= last Or grid(i) <> EMPTY Then Return 0 grid(i) = WET Return i >= lastrow Or (ff(i+m+1) Or ff(i+1) Or ff(i-1) Or ff(i-m-1)) End Function Function percolate() As Integer For i As Integer = 2 To m+1 If ff(i) Then Return 1 Next i Return 0 End Function Dim As Double p Dim As Integer ip, i, cont make_grid(15, 15, 0.55) Print "15x15 grid:" For i = 1 To Ubound(grid) Print grid(i); If i Mod 15 = 0 Then Print Next i Print !"\nrunning 10,000 tests for each case:" For ip As Ubyte = 0 To 10 p = ip / 10 cont = 0 For i = 1 To 10000 make_grid(15, 15, p) cont += percolate() Next i Print Using "p=#.#: #.####"; p; cont/10000 Next ip Sleep