Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
78
Task/Brownian-tree/Sidef/brownian-tree.sidef
Normal file
78
Task/Brownian-tree/Sidef/brownian-tree.sidef
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
const size = 100
|
||||
const mid = size>>1
|
||||
const particlenum = 1000
|
||||
|
||||
var map = []
|
||||
var spawnradius = 5
|
||||
|
||||
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) = (
|
||||
(mid-spawnradius .. mid+spawnradius -> pick),
|
||||
[mid-spawnradius, mid+spawnradius] -> pick
|
||||
)
|
||||
(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 }) {
|
||||
++spawnradius
|
||||
}
|
||||
}
|
||||
|
||||
display()
|
||||
Loading…
Add table
Add a link
Reference in a new issue