Display a linear combination: Difference between revisions
Content added Content deleted
(→{{header|Elixir}}: String.lstrip -> trim_leading) |
(Added Sidef) |
||
Line 309: | Line 309: | ||
-1, -2, 0, -3 ──► -e(1) - 2*e(2) - 3*e(4) |
-1, -2, 0, -3 ──► -e(1) - 2*e(2) - 3*e(4) |
||
-1 ──► -e(1) |
-1 ──► -e(1) |
||
</pre> |
|||
=={{header|Sidef}}== |
|||
{{trans|Tcl}} |
|||
<lang ruby>func linear_combination(coeffs) { |
|||
var res = "" |
|||
for e,f in (coeffs.kv) { |
|||
given(f) { |
|||
when (1) { |
|||
res += "+e(#{e+1})" |
|||
} |
|||
when (-1) { |
|||
res += "-e(#{e+1})" |
|||
} |
|||
case (.> 0) { |
|||
res += "+#{f}*e(#{e+1})" |
|||
} |
|||
case (.< 0) { |
|||
res += "#{f}*e(#{e+1})" |
|||
} |
|||
} |
|||
} |
|||
res -= /^\+/ |
|||
res || 0 |
|||
} |
|||
var tests = [ |
|||
%n{1 2 3}, |
|||
%n{0 1 2 3}, |
|||
%n{1 0 3 4}, |
|||
%n{1 2 0}, |
|||
%n{0 0 0}, |
|||
%n{0}, |
|||
%n{1 1 1}, |
|||
%n{-1 -1 -1}, |
|||
%n{-1 -2 0 -3}, |
|||
%n{-1}, |
|||
] |
|||
tests.each { |t| |
|||
printf("%10s -> %-10s\n", t.join(' '), linear_combination(t)) |
|||
}</lang> |
|||
{{out}} |
|||
<pre> |
|||
1 2 3 -> e(1)+2*e(2)+3*e(3) |
|||
0 1 2 3 -> e(2)+2*e(3)+3*e(4) |
|||
1 0 3 4 -> e(1)+3*e(3)+4*e(4) |
|||
1 2 0 -> e(1)+2*e(2) |
|||
0 0 0 -> 0 |
|||
0 -> 0 |
|||
1 1 1 -> e(1)+e(2)+e(3) |
|||
-1 -1 -1 -> -e(1)-e(2)-e(3) |
|||
-1 -2 0 -3 -> -e(1)-2*e(2)-3*e(4) |
|||
-1 -> -e(1) |
|||
</pre> |
</pre> |
||