#define SOLID "#" #define EMPTY " " #define WET "v" Dim Shared As String grid Dim Shared As Integer last, lastrow, m, n Sub makeGrid(x As Integer, y As Integer, p As Double) Dim As Integer i, j m = x n = y grid = String(x*(y+1)+1, Chr(10)) last = Len(grid) lastrow = last - n For i = 0 To x-1 For j = 1 To y Mid(grid, 1+i*(y+1)+j, 1) = Iif(Rnd < p, EMPTY, SOLID) Next j Next i End Sub Function ff(i As Integer) As Integer If i <= 0 Or i >= last Or Mid(grid, i, 1) <> EMPTY Then Return 0 Mid(grid, i, 1) = 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 Randomize Timer makeGrid(15, 15, 0.55) percolate() Print "15x15 grid:"; Print grid Print "running 10,000 tests for each case:" Dim As Double p Dim As Integer ip, i, cnt For ip = 0 To 10 p = ip / 10 cnt = 0 For i = 1 To 10000 makeGrid(15, 15, p) cnt += (percolate() = 1) Next i Print Using "p=#.#: #.####"; p; Abs(cnt / 10000) Next ip Sleep