Add tasks for all the new languages
This commit is contained in:
parent
9dc3c2bb62
commit
bba7bfd280
13208 changed files with 134745 additions and 0 deletions
52
Task/Resistor-mesh/Sidef/resistor-mesh.sidef
Normal file
52
Task/Resistor-mesh/Sidef/resistor-mesh.sidef
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
var (w, h) = (10, 10)
|
||||
|
||||
var v = h.of { w.of(0) } # voltage
|
||||
var f = h.of { w.of(0) } # fixed condition
|
||||
var d = h.of { w.of(0) } # diff
|
||||
var n = [] # neighbors
|
||||
|
||||
for i in ^h {
|
||||
for j in (1 ..^ w ) { n[i][j] := [] << [i, j-1] }
|
||||
for j in (0 ..^ w-1) { n[i][j] := [] << [i, j+1] }
|
||||
}
|
||||
|
||||
for j in ^w {
|
||||
for i in (1 ..^ h ) { n[i][j] := [] << [i-1, j] }
|
||||
for i in (0 ..^ h-1) { n[i][j] := [] << [i+1, j] }
|
||||
}
|
||||
|
||||
func set_boundary {
|
||||
f[1][1] = 1; f[6][7] = -1;
|
||||
v[1][1] = 1; v[6][7] = -1;
|
||||
}
|
||||
|
||||
func calc_diff {
|
||||
var total_diff = 0
|
||||
for i,j in (^h ~X ^w) {
|
||||
var p = n[i][j]
|
||||
var w = 0
|
||||
p.each { |a| w += v.dig(a...) }
|
||||
d[i][j] = (w = (v[i][j] - w/p.len))
|
||||
f[i][j] || (total_diff += w*w)
|
||||
}
|
||||
total_diff
|
||||
}
|
||||
|
||||
func iter {
|
||||
var diff = 1
|
||||
while (diff > 1e-24) {
|
||||
set_boundary()
|
||||
diff = calc_diff()
|
||||
for i,j in (^h ~X ^w) {
|
||||
v[i][j] -= d[i][j]
|
||||
}
|
||||
}
|
||||
|
||||
var current = 3.of(0)
|
||||
for i,j in (^h ~X ^w) {
|
||||
current[ f[i][j] ] += (d[i][j] * n[i][j].len)
|
||||
}
|
||||
(current[1] - current[-1]) / 2
|
||||
}
|
||||
|
||||
say "R = #{2 / iter()}"
|
||||
Loading…
Add table
Add a link
Reference in a new issue