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 …
3y ago
[JavaScript (Node.js)], 99 96 …
3y ago
Ruby, 25 bytes ```ruby ->e …
3y ago
Python 3, 63 bytes ```python …
2y ago
Sidef, 25 bytes ``` {eval …
2y ago
J, 2 bytes ``` / ``` T …
3y ago
[Ruby], 35 bytes -> …
3y ago
7 answers
J, 2 bytes
*/
For complex numbers with 0
as the second part, J will represent them as ints, but they are treated the same.
0 comment threads
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
.
2 comment threads
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
Sidef, 25 bytes
{eval .split.join(" * ")}
{eval .split.join(" * ")}
{ } # Create anonymous code block
.split.join(" * ") # splits on whitespace and joins with " * "
. # equivalent to _.split.join, where _ is the topic
# variable, which is an implicit name for the block arg
eval # eval
Complex literals are built like a:b
.
0 comment threads
Python 3, 63 bytes
print(str(eval(f"({input().replace(' ',')*(')})")).strip("()"))
Similar to hyper-neutrino's answer. Doesn't replace i by j and back, and uses f-string instead of strings and +
to make it a bit shorter.
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.
3 comment threads