Display a linear combination: Difference between revisions
Content added Content deleted
(we don't really need decimal numbers) |
(Perl 6 solution) |
||
Line 24: | Line 24: | ||
9) -1, -2, 0, -3 |
9) -1, -2, 0, -3 |
||
10) -1</pre> |
10) -1</pre> |
||
=={{header|Perl 6}}== |
|||
<lang perl6>my @examples = |
|||
sub linear-combination(@coeff) { |
|||
my @terms = @coeff Z=> map { "e($_)" }, 1 .. *; |
|||
@terms.=grep(+*.key); |
|||
return '0' unless @terms; |
|||
my $result = join '+', |
|||
map { .key ~ '*' ~ .value }, |
|||
@terms; |
|||
$result ~~ s:g/'+-'/-/; |
|||
$result ~~ s:g/<|w>1\*//; |
|||
return $result; |
|||
} |
|||
say linear-combination(@$_) for |
|||
[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] |
|||
;</lang> |
|||
{{out}} |
|||
<pre>e(1)+2*e(2)+3*e(3) |
|||
e(2)+2*e(3)+3*e(4) |
|||
e(1)+3*e(3)+4*e(4) |
|||
e(1)+2*e(2) |
|||
0 |
|||
0 |
|||
e(1)+e(2)+e(3) |
|||
-e(1)-e(2)-e(3) |
|||
-e(1)-2*e(2)-3*e(4) |
|||
-e(1)</pre> |
Revision as of 20:43, 11 October 2015
Display a linear combination is a draft programming task. It is not yet considered ready to be promoted as a complete task, for reasons that should be found in its talk page.
The purpose of this task is to display a finite linear combination in an infinite vector basis .
Write a function that, when given a finite list of scalars , creates a string representing the linear combination
Your output must comply to the following rules:
- you don't show null terms, unless the whole combination is null. For instance while the output "0" is fine, "e(0) + 0*e(3)" or "0 + e(1)" are wrong.
- you don't show scalars when they are equal to one or minus one. For instance the string "1*e(3)" is wrong.
- you don't prefix by '-' if it follows a preceding term. Instead you use subtraction. Thus "e(4) - e(5)" is correct while "e(4) + -e(5)" is wrong.
Show here output for the following lists of scalars:
1) 1, 2, 3 2) 0, 1, 2, 3 3) 1, 0, 3, 4 4) 1, 2, 0 5) 0, 0, 0 6) 0 7) 1, 1, 1 8) -1, -1, -1 9) -1, -2, 0, -3 10) -1
Perl 6
<lang perl6>my @examples =
sub linear-combination(@coeff) {
my @terms = @coeff Z=> map { "e($_)" }, 1 .. *;
@terms.=grep(+*.key);
return '0' unless @terms;
my $result = join '+', map { .key ~ '*' ~ .value }, @terms;
$result ~~ s:g/'+-'/-/; $result ~~ s:g/<|w>1\*//; return $result;
}
say linear-combination(@$_) for [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]
- </lang>
- Output:
e(1)+2*e(2)+3*e(3) e(2)+2*e(3)+3*e(4) e(1)+3*e(3)+4*e(4) e(1)+2*e(2) 0 0 e(1)+e(2)+e(3) -e(1)-e(2)-e(3) -e(1)-2*e(2)-3*e(4) -e(1)