Multiply complex numbers.
Multiply complex numbers. 2 space-seperated ones will be input, as follows: (update: you can replace i with j or some other symbol if needed)
a+bi
-a+bi
a-bi
-a-bi
where a and b are integers written in base 10.
You are expected to output in the same format.
For those unfamiliar: $i$ is the imaginary constant, the value of $\sqrt{-1}$, and a complex number is the sum of a real number and an imaginary number.
Shortest code following the rules wins.
EDIT: test cases:
-
3+4i 4-5i
->32+1i
-
-4+9i 2-2i
->10+26i
-
-4+9i 2+2i
->-26+10i
-
-3+0i 10+0i
->-30+0i
-
0+1i 0+1i
->-1+0i
[Python 3], 98 bytes …
10mo ago
[JavaScript (Node.js)], 99 96 …
11mo ago
Ruby, 25 bytes ```ruby ->e …
4mo ago
[Ruby], 35 bytes -> …
10mo ago
J, 2 bytes ``` / ``` T …
4mo ago
5 answers
You are accessing this answer with a direct link, so it's being shown above all other answers regardless of its score. You can return to the normal view.
Python 3, 98 bytes
print(str(eval("("+input().replace(" ",")*(").replace("i","j")+")")).strip("()").replace("j","i"))
Since the input format is restrictive, I may as well just spam replace and abuse eval
.
JavaScript (Node.js), 99 96 69 bytes
s=>([a,b,c,d]=s.match(/-?\d+/g),a*c-b*d+(a=a*d+b*c,a<0?'':'+')+a+'i')
This regex is probably the best way to get the numbers.
Also, for some reason, JavaScript math works with strings of numbers, so that's convenient.
0 comment threads
Ruby, 35 bytes
->a{a.split.map{eval _1}.reduce :*}
Right tool for the job, I suppose.
uses ruby 2.7+ features, so tio link will look different.
0 comment threads
J, 2 bytes
*/
For complex numbers with 0
as the second part, J will represent them as ints, but they are treated the same.
3 comment threads