计算复杂的力量


10

破败不堪

给定任何输入xy,执行复杂的操作,并打印相应的结果。

您的程序应如何工作

  1. 给定xy的形式z = x + yi,找到z i-z

  2. 如果z i-z的绝对实际值大于绝对虚部,则打印该实部;否则,打印实部。反之亦然。如果两个值相等,则打印其中一个值。

x: 2
y: 0

因此:

z = 2
z^(i-z) ~= 0.192309 + 0.159740i

由于实部的绝对值大于虚部的绝对值,因此程序返回

0.192309

更多例子

z = 1+i >> 0.5
z = i >> 1
z = 0.5 >> 1.08787
z = -2+8i >> 2.22964E7
z = -10i >> 3.13112E7

10
专家提示:摆脱奖金!
Stewie Griffin


7
将复数提高到复数是不连续的,并且取决于所使用的分支剪切。您可以指定吗?尽管我猜每个人都只会使用内置的数学运算,并且可能都使用相同的约定。
xnor

2
“较大”是否意味着选择具有最大绝对值的值,而不是(大多数人都假设)选择最大值?-2+i可以使用一个测试用例(z^(i-z)=3-4i因此3>-4vs abs(-4)>abs(3))。
乔纳森·艾伦

5
“绝对值”的澄清/更改使大多数答案无效。
xnor

Answers:


7

果冻8 11字节

感谢Johnathan Allan通过更改规则来更新答案。

ı_*@µĊ,ḞAÞṪ

在线尝试!

ı_*@        z^(i-z)
    µ       new monadic link
     Ċ,Ḟ    pair real and imaginary parts
        AÞṪ sort by absolute value and take last value

这样做ı_*@µĊ,ḞAÞṪ,您很可能只有唯一有效的条目(考虑到更改需要绝对值的最大值,例如,-2+1j返回-4.0而不是3.0)。
乔纳森·艾伦

6

Python 2,45个字节

def f(z):z=z**(1j-z);print max(z.real,z.imag)

在线试用 -所有测试案例

编程语言通常使用j代替i。在Python中就是这种情况。有关原因的更多信息,请参见此SO问题


5

Mathematica,21 22字节

编辑:感谢郑焕敏节省了3个bty

Max@ReIm[#^(I-#)]&

需要一个复数作为参数的纯函数。如果传递了确切的数字,则将返回一个精确的数字(例如,1/2给出Sqrt[2] Cos[Log[2]])。在发布解决方案以指定应使用绝对值之后,对问题规范进行了编辑。为此,我能想到的最好是MaximalBy[ReIm[#^(I-#)],Abs][[1]]&Last@MaximalBy[Abs]@ReIm[#^(I-#)]&,两个34字节。


1
Max不必是团长。无论输入多深List(例如Max[1, {2, {3}}]return 3),它都会返回最大值。另外,该问题仅指定您打印值,所以我认为您不需要NMax@ReIm[#^(I-#)]&可以工作。
JungHwan Min

3

八度,29字节

@(z)max(real(z^(i-z)./[1 i]))

这定义了一个匿名函数。它也可以在MATLAB中工作。

在线尝试!

说明

按元素逐个(./)将数字除以z^(i-z)数组,[1 i]然后取实数部分,得到的数组包含的实部和虚部z^(i-z)


3

MATL,10字节

Jy-^&ZjhX>

在线尝试!验证所有测试用例

说明

以输入-2+8i为例。

J     % Push i (imaginary unit)
      % STACK: i
y     % Implicit input. Duplicate from below
      % STACK: -2+8i, i, -2+8i
-     % Subtract
      % STACK: -2+8i, 2-7i
^     % Power
      % STACK: 3168271.58+22296434.47i
&Zj   % Real and imaginary parts
      % STACK: 3168271.58, 22296434.47
h     % Concatenate
      % STACK: [3168271.58 22296434.47]
X>    % Maximum. Implicitly display
      % STACK: 22296434.47

2

TI-BASIC,403231 29个字节

感谢@Conor O'Brien,节省了一个字节

Z^(i-Z→A                   #Perform operation, store as A, 8 bytes
:real(A)>imag(A            #Test if real part is greater than imaginary, 9 bytes
:Ansreal(A)+imag(Anot(Ans  #Determine output and print, 12 bytes

将输入作为Z变量的复数。

TI-BASIC使用自己的编码,您可以在此处找到。



1

Perl 6,24个字节

{($_**(i-$_)).reals.max}

$_是可能复杂的论点;$_ ** (i - $_)是要计算的表达式;.reals是一种Complex返回实部和虚部列表的方法;最后.max返回两者中较大的一个。


1

C(GCC),93 79 + 4(-lm)= 97 83字节

@ceilingcat节省了14个字节!

float f(_Complex z){z=cpow(z,csqrt(-1)-z);return cimag(z)>creal(z)?cimag(z):z;}

包含标头complex.h比¯\ _(ツ)_ /¯更长

在线尝试!


为什么+4个字节?我数3, , -lm
Rɪᴋᴇʀ

@Riker正常编译是gcc file.c -o exe,那么该标志添加4个字节:空间,-l,和m。(至少这是我在编译时看到它的方式。)
betseg

@ceilingcat哦,不知道那是可能的。谢谢!
betseg



1

TI基本(19 16字节)

Ans^(i-Ans
max(real(Ans),imag(Ans

real(imag(是两个字节的令牌。

使用5+3i:prgmNAME5+3i是argmuent,NAME是程序名)运行。


0

R,38个字节

pryr::f({z=z^(1i-z);max(Re(z),Im(z))})

匿名函数。取(可能)复数z,它需要以指定的功率,和然后返回max所述的ReAl和Imaginary份。


0

公理,60字节

f(z:Complex Float):Float==(y:=z^(%i-z);max(real(y),imag(y)))

测试代码和结果;我遵循另一个问题的先例版本...

(28) -> [[k,f(k)] for k in [1+%i,%i,1,-2+8*%i,-10*%i]]
   (28)
   [[1.0 + %i,0.5], [%i,1.0], [1.0,1.0],
    [- 2.0 + 8.0 %i,22296434.4737098688 53],
    [- 10.0 %i,31311245.9804955291 66]]

0

C#-189字节

double f(double x, double y){double r,t,m,c;r=Math.Sqrt(x*x+y*y);t=Math.Atan2(y,x);m=Math.Pow(r,-x)*Math.Exp(y*t-t);c=Math.Cos((1-y)*Math.Log(r)-t*x);return m*(2*c*c<1?Math.Sqrt(1-c*c):c);}

可读性:

double f(double x, double y){
double r, t, m, c;
r = Math.Sqrt(x * x + y * y);
t = Math.Atan2(y, x);
m = Math.Pow(r, -x) * Math.Exp(y * t - t);
c = Math.Cos((1 - y) * Math.Log(r) - t * x);
return m * (2 * c * c < 1 ? Math.Sqrt(1 - c * c) : c); }

说明:决定不使用任何复杂库。

ž=X+一世ÿ=[RË一世Ťž一世-ž=[RË一世Ť-X+一世1个-ÿ=[R-X[R一世1个-ÿË-X一世ŤËŤÿ-1个=[R-XËŤÿ-1个Ë一世1个-ÿln[R-XŤ (如 [R一世=Ë一世ln[R

让它等于 Ë一世一个 哪里

=[R-XËŤÿ-1个
一个=1个-ÿln[R-XŤ

然后 ž一世-ž=cos一个ž一世-ž=一个

最大绝对值可以由 cos一个一个 项,这些在 1个2 (因此测试 2C2<1个)。

如前所述,提高到复杂的指数取决于选择特定的分支切割(例如 ž=1个 可能 Ë一世π 要么 Ë3一世π -提出来 一世 给出了 Ë-π 要么 Ë-3π 分别),但是,我只是使用了约定 Ť[02π 根据问题。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.