Обчисліть складну потужність


10

The Rundown

З огляду на будь-які введення x і y , виконайте складну операцію та надрукуйте відповідний результат.

Як має працювати ваша програма

  1. Давши введення x і y у вигляді 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
Порада: позбудься бонусу!
Стюі Гріффін


7
Підвищення складних чисел до складної потужності припиняється і залежить від використовуваного зрізу гілки. Чи можете ви це вказати? Хоча я здогадуюсь, всі просто використовуватимуть вбудовані математичні операції, а ті, ймовірно, всі використовують ту саму умову.
xnor

2
Чи означає «більший» вибрати значення з найбільшою абсолютною величиною, а не (що більшість з них припускають), щоб вибрати максимальне значення? Для цього -2+iможе бути використаний тестовий випадок ( z^(i-z)=3-4iтак 3>-4vs abs(-4)>abs(3)).
Джонатан Аллан

5
Уточнення / зміна "абсолютного значення" визнало недійсною більшість відповідей.
xnor

Відповіді:


7

Желе , 8 11 байт

Дякуємо Джонатану Аллану за оновлення відповіді зі зміною правил.

ı_*@µĊ,Ḟ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. Дивіться це питання ТА для отримання додаткової інформації про те, чому.


5

Математика, 21 22 байт

Редагувати: Дякую JungHwan Min за економію 3-х мільйонів

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}}]повертається 3). Крім того, питання вказує лише на те, що ви друкуєте значення, тому я не думаю, що вам знадобиться N: Max@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, 40 , 32 , 31 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 байт

Збережено 14 байт завдяки @ceilingcat!

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

У тому числі заголовок complex.hдовший, ніж ¯ \ _ (ツ) _ / ¯

Спробуйте в Інтернеті!


Чому +4 байти? Я вважаю 3, -, l, і m.
Rɪᴋᴇʀ

@Riker нормального компіляція gcc file.c -o exe, тому цей прапор додає 4 байт: простір, -, l, і m. (Принаймні, так я вважаю, що це підраховується при складанні.)
betseg

@ceilingcat о, не знав, що це можливо. Дякую!
betseg



1

TI-Basic, 19 16 байт

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

real(і imag(є двобайтовими лексемами.

Запустити з 5+3i:prgmNAME( 5+3iбудучи аргументом, 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); }

Пояснення: Вирішили не використовувати жодних складних бібліотек.

z=х+iу=rеiтzi-z=(rеiт)(-х+i(1-у))=r-хri(1-у)е-хiтет(у-1)=r-хет(у-1)еi((1-у)ln(r)-хт) (як ri=еiln(r))

Нехай це дорівнює меiа де

м=r-хет(у-1)
а=(1-у)ln(r)-хт

Тоді (zi-z)=мcosа і (zi-z)=мгріха

Максимальне абсолютне значення може бути визначене cosа і гріха терміни, при цьому вони рівні на 12 (звідси і тест 2c2<1).

Як було сказано, підняття до складного показника залежить від вибору конкретного розрізу гілки (наприклад, z=1 може бути еiπ або е3iπ - піднімаючи це до i дає реальну частину е-π або е-3π відповідно), однак я щойно використовував конвенцію т[0,2π) відповідно до питання.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.