# Brownian tree

``````const size = 100
const mid = size>>1
const particlenum = 1000

var map = []

func set(x, y) {
map[x][y] = 1
}

func get(x, y) {
map[x][y] \\ 0
}

set(mid, mid)

var blocks = [
" ",
"\N{UPPER HALF BLOCK}",
"\N{LOWER HALF BLOCK}",
"\N{FULL BLOCK}"
]

func block(a, b) {
blocks[2*b + a]
}

func display {
0..size `by` 2 -> map {|y|
0..size -> map {|x|
if ([x, y].all { .-mid < spawnradius }) {
block(get(x, y), get(x, y+1))
} else { " " }
}.join
}.join("\n").say
}

for progress in (^particlenum) {
var (x=0, y=0)

var reset = {
do {
(x, y) = (
)
(x, y) = (y, x) if (1.rand < 0.5)
} while(get(x, y))
}

reset.run

while ([[-1, 0, 1]]*2 -> cartesian.any {|pair|
get(x+pair[0], y+pair[1])
} -> not) {
x = [x-1, x, x+1].pick
y = [y-1, y, y+1].pick

if (1.rand < 0.25) {
x = (x >= mid ? (x-1) : (x+1))
y = (y >= mid ? (y-1) : (y+1))
}

if ([x,y].any { .-mid > spawnradius }) {
reset.run
}
}

set(x, y)
display() if (progress %% 50)

if ((spawnradius < mid) && [x,y].any { .-mid > spawnradius-5 }) {
}
}

display()
``````

#### Output:

``````                                 ▄               ▄▀          ▄  ▀▄
▀█▄▄▀ █  █▄█▀        ▄  █▄          ▀▄█ █
▄▀  ▀▄█      █       ▄▀ ▄▀   █ ▄    ▄▀  ▀ ▀  ▄ ▄▀
▀▀▄  ▄▀        █▄▀█     ▀█ ▄ ▄▀        ▄█▄▄
▄▄▄▀ ▄▀      ▀▀ ▀  ▀▄   ▀▄▀ ▀        ▀▀▄▀  ▀
▄▀ ▀▄▀▄           ▄ ▄▄▀   █▄▄     ▄ ▄  █
█▄         ▄▀█     █  ▄  █▀ ▀▄█▀
██▀ ▄▀▄▄▀▄   ▀▀█      ▄▀█  █   ▀
▀▄ ▀▄     ▀▀█          ▀▄  ▄▄▄ █▀     ▀▄▀▀
▄ █▄▄▄▀     █▄▄▀     ▄▀▀▄ █▄▀▄ ▄▀▀▄  ▀▄▄█      ▄  ▄
▀▀█▄▀          ▀▄▄     ▀▄▀  ██▄ ▀▄▀    █▀▄▄ ▄▄█ ▀▀
▀▄▀▄█ ▄ ▄▀  ▄█    ▀█▀▄     ▄▀ ▄▀▄▀ █▀ █▀▀ ▄ ▄▀
▄█  ▄▀▀▀▄ ▄ ▀▄ █ ▄  █        ▄ ▀█▀▄▀  █ ▄▄█▀▀      ▀▄▀
▀█▄▀▀▄▀▄  ▀▄▄▀▀  ▄▄    ▀▄▀ ▀▄ ▄█▀█   ▀▄  ▄ ▄▄▀
▄▄▀  ▀    █▄  ▀▀▄▀ ▄█   █      ▀▄▄ ▄       ▄█  ▀▄▀      █
▄    ▄  ▄▄▀▄▀ ▄ ▄▄▄█  ▄█ ▄▀      █▀██▀▄ ▄▀ ▄▀  ▄▄  ▀▀   ▄▀  ▄
▄▄▄▄▀     ▀▄     ▀▀▄   ▀ ▀▀▄ ▀ ▀█▀ ▀█▄▀  ▄   ▄▀▀   █▄▄     ▄▄▀▄▄▀    ▄▀
▀▄▄▄ █▀ ▀▀▄█    ▀▄▀▄▄ ▀▄▄▄  ▄█   ▀█▀▀▄▄ █    ▄▀▄▄ ▄▄  ▄▀        ▄▀
▀▄▀  ▄▀   ▄▄▄▄▀▄▄▄▄ ██▄  ▄▄▀▄▀▄▄▀ ▄▀ ▄▄▄▀▄▄█▄▄▀▀   █ ▄▄▀▄█▄    ▄ █▄▄▄
▀▄ █▀     ▀█▄▀ █▄▀ ▀▀ ▀█▄▀ ▀▄▄█▀ ▀▄▀█▄▄▀▀▄ ▀   ▄█▄█▀█   ▀   █ ▀█▄▀▀▄▀▀ ▄▀
▀▀       ▀ ▄  ▀▄▀     ▀▄ ▄▄▀ ▀ ▄▀  ▀  ▀▄        ▄▀  ▀▄ ▄     ▀ █▄▄
▄▄█ ▀█▀     ▄  ▄▀█ ▀  █      ██ ▄▀     ▀▄▀ ▄▀▄▀▄▀█      ▀ ▀
▀▀   █    ▄   ▀█▀ █   ▄▀   ▄▄█▀ ▀▀▄        ▀  █   ▄▀▄  ▄
▀▀▄▄          ▀▄ █     ▄▀▄   █   ▀█▄█ ▀▄▄▀▄▄      ▀ ▀   ▀▀▄
▄█▄   ▀▄▀▄▄ ▄▀▀      ▀ ▀▄ ▄▀   ▄▀▄    █ █▄  ▄▀
▄▀▄█▀ █ █▀█           ▄    ▄▀ ▀▄▀      ▄█▀ █▄▄▀▀▄
▄   ▄▀▄▄█     ▀▄   ▄▀▄        ▀ ▀▀▄▀   █       ▀ ▄█ ▀▄▀▄  █
▀▄▀  ▀▀█     █▄▄ ▀  ▄▀         █▀    ▀ ▀▄▀▀▄▄▀  █  ▄▀  ▀▄ ▀▄
▀▀       ▀   ██▀ ▀▄ ▄█       ▄▄▀▄▀      █▀                ▀
▄▀  █   ▀▄         ▄▀   ▀▄ ▄█ ▀▀
▀▄  ▀█▄          ▄▄▀▄   ▄▀▀▀▄▄▄
▀    ▀            ▀       ▄▀ █▀  ▄
▄▄▀█▄▀▄
▄▀▄   █  ▀
▄▀▄▄▄▀
▀   █ █
▀█
``````