Resistor mesh: Difference between revisions
Content added Content deleted
m (→{{header|zkl}}: comments) |
SqrtNegInf (talk | contribs) m (→{{header|Perl 6}}: flatten output from cross operators) |
||
Line 912: | Line 912: | ||
sub calc_diff(@v, @d, Int $w, Int $h) { |
sub calc_diff(@v, @d, Int $w, Int $h) { |
||
my $total = 0; |
my $total = 0; |
||
for ^$h X ^$w -> $i, $j { |
for (flat ^$h X ^$w) -> $i, $j { |
||
my @neighbors = grep *.defined, @v[$i-1][$j], @v[$i][$j-1], @v[$i+1][$j], @v[$i][$j+1]; |
my @neighbors = grep *.defined, @v[$i-1][$j], @v[$i][$j-1], @v[$i+1][$j], @v[$i][$j+1]; |
||
my $v = [+] @neighbors; |
my $v = [+] @neighbors; |
||
Line 929: | Line 929: | ||
force-v(@v); |
force-v(@v); |
||
$diff = calc_diff(@v, @d, $w, $h); |
$diff = calc_diff(@v, @d, $w, $h); |
||
for ^$h X ^$w -> $i, $j { |
for (flat ^$h X ^$w) -> $i, $j { |
||
@v[$i][$j] -= @d[$i][$j]; |
@v[$i][$j] -= @d[$i][$j]; |
||
} |
} |
||
} |
} |
||
for ^$h X ^$w -> $i, $j { |
for (flat ^$h X ^$w) -> $i, $j { |
||
@cur[ @fixed[$i][$j] + 1 ] |
@cur[ @fixed[$i][$j] + 1 ] |
||
+= @d[$i][$j] * (?$i + ?$j + ($i < $h - 1) + ($j < $w - 1)); |
+= @d[$i][$j] * (?$i + ?$j + ($i < $h - 1) + ($j < $w - 1)); |