Display a linear combination: Difference between revisions
Content added Content deleted
No edit summary |
|||
Line 1,088: | Line 1,088: | ||
ReadChar |
ReadChar |
||
END Linear.</lang> |
END Linear.</lang> |
||
=={{header|Nim}}== |
|||
{{trans|Kotlin}} |
|||
<lang Nim>import strformat |
|||
proc linearCombo(c: openArray[int]): string = |
|||
for i, n in c: |
|||
if n == 0: continue |
|||
let op = if n < 0: |
|||
if result.len == 0: "-" else: " - " |
|||
else: |
|||
if n > 0 and result.len == 0: "" else: " + " |
|||
let av = abs(n) |
|||
let coeff = if av == 1: "" else: $av & '*' |
|||
result &= fmt"{op}{coeff}e({i + 1})" |
|||
if result.len == 0: |
|||
result = "0" |
|||
const Combos = [@[1, 2, 3], |
|||
@[0, 1, 2, 3], |
|||
@[1, 0, 3, 4], |
|||
@[1, 2, 0], |
|||
@[0, 0, 0], |
|||
@[0], |
|||
@[1, 1, 1], |
|||
@[-1, -1, -1], |
|||
@[-1, -2, 0, -3], |
|||
@[-1]] |
|||
for c in Combos: |
|||
echo fmt"{($c)[1..^1]:15} → {linearCombo(c)}"</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> |
|||
=={{header|Perl}}== |
=={{header|Perl}}== |