Percolation/Mean cluster density: Difference between revisions

Content added Content deleted
m (Fix Perl 6 -> Raku links)
(Added Wren)
Line 1,468: Line 1,468:
n=1080, K(p)=0.0661267146776406
n=1080, K(p)=0.0661267146776406
n=6480, K(p)=0.06582889898643499
n=6480, K(p)=0.06582889898643499
</pre>

=={{header|Wren}}==
{{trans|Kotlin}}
{{libheader|Wren-fmt}}
<lang ecmascript>import "random" for Random
import "/fmt" for Fmt

var rand = Random.new()
var RAND_MAX = 32767

var list = []
var w = 0
var ww = 0

var ALPHA = "+.ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
var ALEN = ALPHA.count - 3

var makeList = Fn.new { |p|
var thresh = (p * RAND_MAX).truncate
ww = w * w
var i = ww
list = List.filled(i, 0)
while (i != 0) {
i = i - 1
var r = rand.int(RAND_MAX+1)
if (r < thresh) list[i] = -1
}
}

var showCluster = Fn.new {
var k = 0
for (i in 0...w) {
for (j in 0...w) {
var s = list[k]
k = k + 1
var c = (s < ALEN) ? ALPHA[1 + s] : "?"
System.write(" %(c)")
}
System.print()
}
}

var recur // recursive
recur = Fn.new { |x, v|
if (x >= 0 && x < ww && list[x] == -1) {
list[x] = v
recur.call(x - w, v)
recur.call(x - 1, v)
recur.call(x + 1, v)
recur.call(x + w, v)
}
}

var countClusters = Fn.new {
var cls = 0
for (i in 0...ww) {
if (list[i] == -1) {
cls = cls + 1
recur.call(i, cls)
}
}
return cls
}

var tests = Fn.new { |n, p|
var k = 0
for (i in 0...n) {
makeList.call(p)
k = k + countClusters.call() / ww
}
return k / n
}

w = 15
makeList.call(0.5)
var cls = countClusters.call()
System.print("width = 15, p = 0.5, %(cls) clusters:")
showCluster.call()

System.print("\np = 0.5, iter = 5:")
w = 1 << 2
while (w <= (1 << 13)) {
var t = tests.call(5, 0.5)
Fmt.print("$5d $9.6f", w, t)
w = w << 1
}</lang>

{{out}}
Sample run:
<pre>
width = 15, p = 0.5, 28 clusters:
. A A . . B . C . D . . . . A
A A A . E . F . G . . A A A A
. A A A . F F . . . A A . . .
. A . . . . F . . H . A . A .
. A A . . . . . H H H . A A A
A A A . . I I . . H . J . . A
A . . K . . . . H H . . . A A
A . L . M M . N . . O . . . .
A A . P . . . N . Q . R . S .
. A A . T T . . U . R R R . .
A A . . T T T . . . . R . . .
. A . T T T . . . . . R R R R
. A . . . T . . V . W . R R .
A A . X . T T . . . W . . . .
. . Y . T T . Z . a . . . b b

p = 0.5, iter = 5:
4 0.125000
8 0.081250
16 0.094531
32 0.073242
64 0.067920
128 0.068567
256 0.067404
512 0.066401
1024 0.065870
2048 0.065885
4096 0.065812
8192 0.065795
</pre>
</pre>