x의 xᵗʰ 루트 골프


24

고등학교에서 지루할 때 (현재 나이의 절반이되었을 때 ...) f ( x ) = x ( x -1 ) 에는 0 ≤ x 의 최대 ff ( e ), 동위 원소 핵당 결합 에너지는 6 × f ( x ÷ 21) 로 근사 할 수 있습니다 ...

어쨌든, X 계산 최단 기능 또는 프로그램 쓰기 번째 언어의 도메인에있는 번호를 X의 루트를.

사례

모든 언어

     -1   >       -1
   ¯0.2   >    -3125
   ¯0.5   >        4
    0.5   >     0.25
      1   >        1
      2   >    1.414
      e   >    1.444 
      3   >    1.442
    100   >    1.047
  10000   >    1.001

복소수를 처리하는 언어의 경우

   -2   >        -0.7071i
    i   >            4.81         
   2i   >    2.063-0.745i
 1+2i   >   1.820-0.1834i
 2+2i   >   1.575-0.1003i

무한대를 다루는 언어

-1/∞   >   0    (or ∞ or ̃∞)
   0   >   0    (or 1 or ∞)
 1/∞   >   0
   ∞   >   1
  -∞   >   1

무한대와 복소수를 모두 처리하는 언어

 -∞-2i   >   1      (or ̃∞)

̃∞지정 무한대를 나타냅니다 .


1
여기 에 양의 실수에 대한 Wolfram Alpha 도표x있습니다. x쿼리 에서 한계 를 생략하면 Wolfram Alpha는 x함수 로그가 복잡한 로그 (또는 유사한 복잡한 함수)에 대한 "분기"선택에 따라 음수 값을 포함합니다 .
Jeppe Stig Nielsen

소수의 거듭 제곱을 처리하지 않는 언어는 어떻습니까?
Leaky Nun

1
@KennyLau 특히 알고리즘이 작동 할 경우 언어가이를 지원한다는 내용의 메모로 자유롭게 게시하십시오.
Adám

답변:


38

TI-BASIC, 3 바이트

Ans×√Ans

TI-BASIC 때문에, 토큰을 사용 Ans하고 ×√모두 한 바이트입니다.

설명

Ans입력하는 가장 쉬운 방법입니다. 마지막 식의 결과입니다. ×√x의 x 번째 루트에 대한 함수이므로 예를 들어 5×√322입니다.


8
내가 아는 한 ans변수에 대한 입력을 하드 코딩하는 것으로 간주하고 code-golf에 허용되는 입력 방법이 아닌 것 같습니다 . 그러한 경우에는 전체 프로그램 또는 기능을 작성하십시오.
flawr

4
@flawr 나는 당신이 무엇을 말하는지 알 수 있지만 그것이 항상 이렇게 된 것처럼 보입니다. 아마도 메타 게시물을 보증합니까?
NinjaBearMonkey

3
AnsTI-Basic의 STDIN / STDOUT입니다.
Timtech

5
stdin그리고 stdout일반적으로 대화식 텍스트 입력 및 출력 텍스트 스트림입니다. Ans대화 형 TI-BASIC의 다른 기능과 달리 대화 형이 아닙니다.
Olathe

7
@flawr Ans일반적으로 허용 되는 이유 는 값이 모든 표현식에 의해 설정되기 때문입니다 (표현식은로 구분됨 :). 따라서 1337:prgmXTHROOT1337을 입력하면 일반 언어로 된 CLA를 통한 입력과 매우 유사합니다.
lirtosiast

23

젤리, 2 바이트

온라인으로 사용해보십시오!

작동 원리

*İ    Main link. Input: n

 İ    Inverse; yield 1÷n.
*     Power (fork); compute n ** (1÷n).

젤리에는 스택이 없습니다. 모나 딕 체인에서 모나드가 뒤 따르는 다이어 드는 APL의 포크처럼 동작합니다.
Dennis

3
아니요, J ^%는 포크가 아닌 후크 (Dyalog APL에는 존재하지 않음)입니다. 젤리가 왼쪽에서 오른쪽이기 때문에 젤리와 APL 코드를 비교하기가 어렵습니다. 가장 근접한 값은 다른 방향으로 인해 ÷*⊢계산되는 포크이기도합니다 (1/x)**x. 젤리의 원자가 과부하되지 않았기 때문에 (모노 딕 또는 다이아 딕이지만 둘다는 아닙니다), 모나 딕 1,2,1- 및 2,1- 포크가있을 수 있습니다.
Dennis

설명해 주셔서 감사합니다. 당연히, 나는 젤리에 꽤 흥미를 느낀다 (여전히 ȷ 또는 이와 비슷한 이름을 사용해야한다고 생각한다)
Adám

17

자바 스크립트 (ES2016), 11 바이트

x=>x**(1/x)

ES6보다 ES7을 거의 사용하지 않습니다.


2
x=>x**x**-111 바이트에도 다시 작동합니다.
Neil

7
모두 새로운 지수 연산자를 환영합니다!
mbomb007

15

파이썬 3, 17 바이트

lambda x:x**(1/x)

자기 설명


7
나는 아주 좋아 lambda x:x**x**-1하지만 짧지 않습니다.
seequ

1
@Seeq 당신의 표현은 길이는 같지만 파이썬 2와 3 모두에서 작업 할 수 있다는 장점이 있습니다.
mathmandan

1
Python 2의 최단 값은 lambda x:x**x**-1이므로 2와 3에서 동일합니다.
mbomb007

나는이 대답을 오랫동안 찾을 수 없었고 내가했을 때 정말 화가났다.

12

하스켈, 12 11 바이트

마술을 해주신 @LambdaFairy에게 감사드립니다 :

(**)<*>(1/) 

내 이전 버전 :

\x->x**(1/x)

4
(**)<*>(1/)11 바이트입니다.
Lambda Fairy

@LambdaFairy 감사합니다! 설명해 주실 래요? 부분적으로 적용된 함수로 마술을하는 것처럼 보이지만 Haskell을 처음
접했을 때

이것은 1- 인수 함수가 적용 펑터 ( "판독기 모나드")로 간주 될 수 있다는 사실을 사용합니다. <*>연산자는 기능, 값을 생성하는 실용적를 생성하는 실용적을 얻어, 그 값에 함수를 적용한다. 따라서이 경우 2 인수 함수를 1 인수 함수에 적용하는 마음을 구부리는 방법입니다.
MathematicalOrchid

2
함수는 <*>3 개 인자 두 함수 소요 f하고 g, 인수를 x. 그것은 다음과 같이 정의된다 (<*>) f g x = f x (g x), 그것은 적용 즉, fxg x. 여기 부분적으로 적용된 fg탈락 x, f = (**)g = (1/)(그것의 인수의 역수 값을 산출하고 다른 일부 응용 기능 (섹션)). 그래서 ( (**)<*>(1/) ) x됩니다 (**) x ((1/) x): 중위에 서면 또는 x ** ((1/) x)과 해결 섹션에 : x ** (1/x). -참고 : <*>여기서 함수 컨텍스트에서 사용되며 다른 컨텍스트에서는 다르게 동작합니다.
nimi

@nimi 그래서 결합기 S즉 S (**) (1 /)에 해당합니까?
Neil

10

J, 2 바이트

^%

온라인으로 사용해보십시오! .

작동 원리

^%  Monadic verb. Argument: y

 %  Inverse; yield 1÷y.
^   Power (hook); compute y ** (1÷y).

나는이 답변을 쓰려고했다. 나는 이것에 너무 느립니다.
Bijan

1
@Bijan 1 년 이상 너무 느립니다. : P
Dennis

나는 지금 일주일 동안 만 골프를 쳤다는 것을 알았습니다.
Bijan

9

Pyth, 3 바이트

@QQ

사소한 도전, 사소한 해결책 ...

(비경쟁, 1 바이트)

@

이것은 Pyth 버전에 존재하는 암시 적 입력 기능을 사용하여이 문제를 해결합니다.


이 솔루션이 암시 적 입력 기능보다 먼저 사용됩니까?
Leaky Nun

@KennyLau 네, 오랫동안. 그러나 어쨌든 1 바이트 솔루션을 편집했습니다.
Doorknob


8

자바 8, 18 바이트

n->Math.pow(n,1/n)

Java가 마지막에 없습니까?!?!

다음을 사용하여 테스트하십시오.

import java.lang.Math;

public class Main {
  public static void main (String[] args) {
    Test test = n->Math.pow(n,1/n);
    System.out.println(test.xthRoot(6.0));
  }
}

interface Test {
  double xthRoot(double x);
}

그것은 함수라는 사실입니다
CalculatorFeline

6

자바, 41 바이트

float f(float n){return Math.pow(n,1/n);}

Java 때문에 경쟁이 치열하지는 않지만 왜 그렇지 않습니까?


1
PPCG에 오신 것을 환영합니다! 이 함수에서 반환 유형이 누락되었을 수 있습니다.
스파게티

죄송합니다. 자바는 8 대답은 이미 물론이 하나 ... 이길
대럴 호프만


6

수학, 8 7 4 7 바이트

#^#^-1&

더 많은 내장 된 답변, 그리고 더 짧은! 아니. 정의에 따라 다음 답변은 13 바이트 여야합니다. (피보나치!) 패턴이 여전히 깨졌습니다. :(


1
# ^ # ^-1 &는 1 바이트를 저장합니다.
njpipeorgan

지금은 골프입니다.
Adám

1
지금은 골프입니다.
CalculatorFeline

1
Mthmtca가 출시되면이 보드를 지배 할 것입니다.
Michael Stern

1
Surd두 개의 인수가 필요하기 때문에 확실히 유효하지 않습니까?
LLlAMnYP

5

펄 5, 10 바이트

9 바이트 + 1 -p

$_**=1/$_

5

R, 19 17 바이트

function(x)x^x^-1

@Flounderer 덕분에 -2 바이트


왜 안돼 x^(1/x)? 편집 : x^x^-1작동하는 것 같습니다.
Flounderer

그것은 스 니펫이며 사람들은 스 니펫을 좋아하지 않는 것 같습니다.
CalculatorFeline

@ CatsAreFluffy 그것은 함수의 정의입니다.
mnel

5

루비, 15 바이트

a=->n{n**n**-1}

언 골프 드 :

->는 IS stabby의 람다 연산자 a=->n동등은a = lambda {|n|}


5

NARS APL, 2 바이트

√⍨

NARS는 ⍺의 ⍺를 나타내는 함수를 지원합니다 . 통근 (⍨)을 적용하면 모나드 방식으로 사용할 때 주어진 함수의 양쪽에 인수를 적용하는 함수가 제공됩니다. 따라서 √⍨ xx √ x.

다른 APL, 3 바이트

⊢*÷

이것은 기능 기차입니다. 즉 (F G H) x(F x) G H x. 모나드는 이항가, 정체성 인 *힘, 그리고 모나드 ÷역이다. 따라서 ⊢*÷되고 , X는 1 / 제기 X .


5

파이썬 2-56 바이트

내가 맞다면 첫 번째 실제 답변. 뉴턴의 방법을 사용합니다.

n=x=input();exec"x-=(x**n-n)/(1.*n*x**-~n);"*999;print x

기능은 괜찮습니다.
CalculatorFeline



4

Pylons , 5 바이트

ideAe

작동 방식

i # Get command line input.
d # Duplicate the top of the stack.
e # Raise the top of the stack to the power of the  second to the top element of the stack.
A # Push -1 to the stack (pre initialized variable).
e # Raise the top of the stack to the power of the second to the top element of the stack.
  # Implicitly print the stack.


4

C ++, 48 바이트

#include<math.h>
[](auto x){return pow(x,1./x);}

두 번째 줄은 익명의 람다 함수를 정의합니다. 함수 포인터에 할당하고 호출하거나 직접 호출하여 사용할 수 있습니다.

온라인으로 사용해보십시오


하는가 ^는 C에서와 같이 C ++에서 작동하지?
타 크라

2
@minerguy31: ^ is bitwise xor in C (and C++).
marinus

4

Milky Way 1.6.5, 5 bytes

'1'/h

Explanation

'      ` Push input
 1     ` Push the integer literal
  '    ` Push input
   /   ` Divide the STOS by the TOS
    h  ` Push the STOS to the power of the TOS

x**(1/x)


Usage

$ ./mw <path-to-code> -i <input-integer>

4

O, 6 bytes

j.1\/^

No online link because the online IDE doesn't work (specifically, exponentiation is broken)

Explanation:

j.1\/^
j.      push two copies of input
  1\/   push 1/input (always float division)
     ^  push pow(input, 1/input)

oh hey you did it yay
phase


4

Pyke (commit 29), 6 bytes

D1_R^^

Explanation:

D      - duplicate top
 1_    - load -1
   R   - rotate
    ^  - ^**^
     ^ - ^**^

Can haz link pls?
cat

Oh, I thought you meant there's no implementation available. Yes, the interpreter doesn't have to be hosted, just a link to the repo / source (or docs) will suffice
cat

4

C# - 18 43 41 bytes

float a(float x){return Math.Pow(x,1/x);}

-2 byes thanks to @VoteToClose

Try it out

Note:

First actual attempt at golfing - I know I could do this better.


Welcome to the crowd! It is exactly because of newcomers that I make trivial challenges like this.
Adám

Fixed. Thanks for informing me about this
EnragedTanker

@crayzeedude No problem at all. Nice job and again, welcome to PPCG!
Alex A.

Does C# have float?
Addison Crump

Indeed it does.
EnragedTanker

4

C, 23 bytes

#define p(a)pow(a,1./a)

This defines a macro function p which evaluates to the ath root of a.

Thanks to Dennis for reminding me that gcc doesn't require math.h to be included.

Thanks to @EʀɪᴋᴛʜᴇGᴏʟғᴇʀ for reminding me that the space after the first ) is not needed.

Try it online


With GCC, you don't need to include math.h.
Dennis

-1 byte: #define p(a)pow(a,1./a)
Erik the Outgolfer

4

dc, 125 bytes

15k?ddsk1-A 5^*sw1sn0[A 5^ln+_1^+ln1+dsnlw!<y]syr1<y1lk/*sz[si1[li*li1-dsi0<p]spli0<p]so0dsw[lzlw^lwlox/+lw1+dswA 2^!<b]dsbxp

Unlike the other dc answer, this works for all real x greater than or equal to 1 (1 ≤ x). Accurate to 4-5 places after the decimal.

I would have included a TIO link here, but for some reason this throws a segmentation fault with the version there (dc 1.3) whereas it does not with my local version (dc 1.3.95).

Explanation

As dc does not support raising numbers to non-integer exponents to calculate x^(1/x), this takes advantage of the fact that:

Advantage

So, to calculate ln(x), this also takes advantage of the fact that:

Advantage2

whose definite integral from 1 to (b = x) is numerically-approximated in increments of 10^-5 using the following summation formula:

Summation Formula.

The resulting sum is then multiplied by 1/x to get ln(x)/x. e^(ln(x)/x) is then finally calculated using the e^x Maclaurin Series to 100 terms as follows:

e^x Maclaurin Series.

This results in our relatively accurate output of x^(1/x).


1
+1 This has got to be one of the best dc answers out there. I'm bookmarking this!
Kritixi Lithos

@KritixiLithos Thank you! I appreciate the kind words. :)
R. Kap

3

PHP 5.6, 32 30 29 bytes

function($x){echo$x**(1/$x);}

or

function($x){echo$x**$x**-1;}

30->29, thank you Dennis!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.