Golf pierwiastek xᵗʰ z x


24

Podczas gdy się nudziłem w szkole średniej (kiedy byłem w połowie mojego obecnego wieku ...), odkryłem, że f ( x ) = x ( x -1 ) ma pewne interesujące właściwości, w tym np. Że maksymalne f dla 0 ≤ x wynosi f ( e ) oraz że energię wiązania na nukleon izotopu można oszacować jako 6 × f ( x ÷ 21) ...

W każdym razie napisz najkrótszą funkcję lub program, który oblicza x- ty rdzeń x dla dowolnej liczby w domenie twojego języka.

Przykłady przypadków

Dla wszystkich języków

     -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

Dla języków, które obsługują liczby zespolone

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

Dla języków obsługujących nieskończoności

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

Dla języków obsługujących zarówno nieskończoność, jak i liczby zespolone

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

̃∞oznacza ukierunkowaną nieskończoność .


1
Oto fabuła Wolfram Alpha dla pozytywnej rzeczywistości x. Jeśli pominiesz xlimity w zapytaniu, Wolfram Alpha będzie zawierać ujemne wartości, dla xktórych wartość funkcji zależy od wyboru „gałęzi” dla złożonego logarytmu (lub dla podobnej złożonej funkcji).
Jeppe Stig Nielsen

Co powiesz na języki, które nie obsługują potęgi dziesiętnej?
Leaky Nun

1
@KennyLau Nie krępuj się pisać z notatką, która tak mówi, szczególnie jeśli algorytm zadziała, gdyby język go obsługiwał.
Adám

Odpowiedzi:


38

TI-BASIC, 3 bajty

Ans×√Ans

TI-BASIC używa tokenów, tak Ansi ×√to zarówno jeden bajt.

Wyjaśnienie

Ansjest najprostszym sposobem na przekazanie danych; jest to wynik ostatniego wyrażenia. ×√jest funkcją dla x-tego pierwiastka x, więc na przykład 5×√32jest 2.


8
O ile mi wiadomo ansliczą się jako dane wejściowe na stałe do zmiennych i nie wydają się być przyjętą metodą wprowadzania kodu w golfa . W takim przypadku wykonaj pełny program lub funkcję.
flawr

4
@flawr Widzę, co mówisz, ale wygląda na to, że zawsze tak było. Może to uzasadnia meta post?
NinjaBearMonkey

3
Ansjest STDIN / STDOUT dla TI-Basic.
Timtech

5
stdini stdoutsą strumieniami tekstowymi, zwykle do interaktywnego wprowadzania i wysyłania tekstu. Ansnie jest interaktywny, w przeciwieństwie do niektórych innych funkcji w TI-BASIC, które są interaktywne.
Olathe

7
@flawr Powód Ansjest zwykle akceptowany, ponieważ jego wartość jest ustawiana przez dowolne wyrażenie (wyrażenia są oddzielone :). Dlatego coś podobnego 1337:prgmXTHROOTwprowadziłoby 1337, co wygląda bardzo podobnie do wprowadzania przez CLA w normalnym języku.
lirtosiast

23

Galaretka, 2 bajty

Wypróbuj online!

Jak to działa

*İ    Main link. Input: n

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

Galaretka nie ma stosu. Diadada, za którą podąża monada w łańcuchu monadycznym, zachowuje się jak widelce APL.
Dennis

3
Nie, J's ^%jest hakiem (który nie istnieje w Dyalog APL), a nie widelcem. Kod Jelly i APL jest trudny do porównania, ponieważ Jelly jest od lewej do prawej. Najbliższym odpowiednikiem byłby ÷*⊢(również widelec), który oblicza z (1/x)**xpowodu innego kierunku. Ponieważ atomy galaretki nie są przeciążone (monadyczne lub dyadyczne, ale nigdy oba), mogą istnieć monadowe widły 1,2,1- i 2,1-widelec.
Dennis

Dziękuję za wyjaśnienie. Oczywiście bardzo intryguje mnie Jelly (którą nadal uważam za nazwę ȷ lub coś podobnego.)
Adám

17

JavaScript (ES2016), 11 bajtów

x=>x**(1/x)

Rzadko kiedy używam ES7 zamiast ES6.


2
x=>x**x**-1działa również ponownie dla 11 bajtów.
Neil

7
Pozdrawiam nowy operator potęgowania!
mbomb007

15

Python 3, 17 bajtów

lambda x:x**(1/x)

Nie wymaga wyjaśnienia


7
Bardzo mi się podoba lambda x:x**x**-1, ale nie jest krótszy.
patrz

1
@ Patrz Twoje wyrażenie jest tej samej długości, ale ma tę zaletę, że działa zarówno w Pythonie 2, jak i 3.
mathmandan

1
Najkrótszy jest w Pythonie 2 lambda x:x**x**-1, więc jest taki sam w 2 i 3.
mbomb007

Nie mogłem znaleźć tej odpowiedzi przez wieki i byłem naprawdę zirytowany, kiedy to zrobiłem.

12

Haskell, 12 11 bajtów

Dzięki @LambdaFairy za trochę magii:

(**)<*>(1/) 

Moja stara wersja:

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

4
(**)<*>(1/)ma 11 bajtów.
Lambda Fairy

@LambdaFairy Thanks! Czy masz coś przeciwko wyjaśnianiu? Wygląda na to, że robisz magię z częściowo zastosowanymi funkcjami, ale ponieważ jestem całkiem nowy w Haskell, tak naprawdę nie rozumiem, jak to działa =)
flawr

Wykorzystuje to fakt, że funkcję 1-argumentową można uznać za funktor aplikacyjny („monadę czytnika”). <*>Operator bierze aplikacyjnych, która produkuje funkcję, oraz aplikacyjnych, które wytwarza wartość, a zastosowanie funkcji do wartości. Tak więc w tym przypadku zastanawiający sposób na zastosowanie funkcji 2-argumentowej do funkcji 1-argumentowej.
MathematicalOrchid

2
Funkcja <*>przyjmuje 3 argumenty, dwie funkcje fi gargument x. Jest ona definiowana jako (<*>) f g x = f x (g x), czyli ma ona zastosowanie fdo xa g x. Tutaj jest częściowo stosowany fi gpomijany x, gdzie f = (**)i g = (1/)(inna częściowo zastosowana funkcja (sekcja), która oblicza wzajemną wartość swojego argumentu). Tak ( (**)<*>(1/) ) xjest (**) x ((1/) x)lub napisane w wrostkiem: x ** ((1/) x)iz sekcji rozwiązany: x ** (1/x). - Uwaga: <*>jest tutaj używany w kontekście funkcji i zachowuje się inaczej w innych kontekstach.
nimi

@nimi Więc to jest odpowiednik Skombinatora tj. S (**) (1 /)?
Neil

10

J, 2 bajty

^%

Wypróbuj online! .

Jak to działa

^%  Monadic verb. Argument: y

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

Chciałem napisać tę odpowiedź. Jestem w tym zbyt wolny.
Bijan

1
@Bijan Wydaje się, że ponad rok jest zbyt wolny. : P
Dennis

Rozumiem, gram w golfa dopiero od tygodnia.
Bijan

9

Pyth, 3 bajty

@QQ

Trywialne wyzwanie, trywialne rozwiązanie ...

(niekonkurencyjny, 1 bajt)

@

Wykorzystuje to funkcję niejawnego wprowadzania danych obecną w wersji Pyth, która jest późniejsza niż to wyzwanie.


Czy to rozwiązanie jest wcześniejsze niż funkcja niejawnego wprowadzania danych?
Leaky Nun

@KennyLau Tak, przez długi czas. Ale i tak edytowałem jednobajtowe rozwiązanie.
Klamka


8

Java 8, 18 bajtów

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

Java nie jest na ostatnim miejscu?!?!

Przetestuj za pomocą:

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);
}

Faktem jest, że jest to funkcja
CalculatorFeline

6

Java, 41 bajtów

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

Nie do końca konkurencyjne, ponieważ Java, ale dlaczego nie?


1
Witamy w PPCG! Myślę, że może brakować typu zwrotu dla tej funkcji.
spaghetto

Ups, mam niechlujstwa. Oczywiście odpowiedź Java 8 pokonała już tę ...
Darrel Hoffman


6

Mathematica, 8 7 4 7 bajtów

#^#^-1&

Więcej wbudowanych odpowiedzi, a teraz jeszcze krótsze! Nie. Z definicji następna odpowiedź powinna mieć 13 bajtów. (Fibonacci!) Wzór jest nadal zepsuty. :(


1
# ^ # ^ - 1 i zapisuje 1 bajt.
njpipeorgan

TERAZ jest golfem.
Adám

1
TERAZ jest golfem.
CalculatorFeline,

1
Kiedy Mthmtca zostanie wydana, będziemy rządzić tą tablicą.
Michael Stern,

1
Z pewnością po prostu Surdnie jest poprawny, ponieważ wymaga dwóch argumentów?
LLlAMnYP


5

R 19 19 bajtów

function(x)x^x^-1

-2 bajty dzięki @Flounderer


Dlaczego nie x^(1/x)? Edycja: x^x^-1wydaje się również działać.
Flądrowiec

To jest urywek i podobno ludzie nie lubią urywków.
CalculatorFeline

@CatsAreFluffy jest to definicja funkcji.
mnel

5

Rubin, 15 bajtów

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

Nie golfowany:

->jest stałym operatorem lambda, gdzie a=->njest równoważnea = lambda {|n|}


5

NARS APL, 2 bajty

√⍨

NARS obsługuje funkcję, która daje root -ty pierwiastek z ⍵. Zastosowanie dojazdy (⍨) daje funkcję, która zastosowana monadycznie, stosuje swój argument do obu stron danej funkcji. Dlatego √⍨ xx √ x.

Inne APL, 3 bajty

⊢*÷

Jest to pociąg funkcyjny, tj . (F G H) x(F x) G H x. Monadic to tożsamość, dyadic *to moc, a monadic ÷to odwrotność. Dlatego x⊢*÷ jest podniesione do 1 / x .


5

Python 2 - 56 bajtów

Pierwsza faktyczna odpowiedź, jeśli mam rację. Wykorzystuje metodę Newtona.

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

Funkcje są w porządku.
CalculatorFeline

5

CJam, 6 bajtów

rd_W##

Wypróbuj online!

Jak to działa

rd     e# Read a double D from STDIN and push it on the stack.
  _    e# Push a copy of D.
   W   e# Push -1.
    #  e# Compute D ** -1.
     # e# Compute D ** (D ** -1).


4

Pylony , 5 bajtów.

ideAe

Jak to działa.

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 bajtów

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

Druga linia definiuje anonimową funkcję lambda. Można go użyć, przypisując go do wskaźnika funkcji i wywołując go, lub po prostu wywołując bezpośrednio.

Wypróbuj online


Nie ^działa w C ++, podobnie jak w C?
takra

2
@ minerguy31: ^jest bitowo xor w C (i C ++).
marinus

4

Droga Mleczna 1.6.5 , 5 bajtów

'1'/h

Wyjaśnienie

'      ` 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)


Stosowanie

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

4

O , 6 bajtów

j.1\/^

Brak linku online, ponieważ IDE online nie działa (zwłaszcza potęgowanie jest zepsute)

Wyjaśnienie:

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

och hej, zrobiliście to yay
faza


4

Pyke (zatwierdzenie 29), 6 bajtów

D1_R^^

Wyjaśnienie:

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

Czy Haz link pls?
kot

Och, myślałem, że masz na myśli, że nie ma dostępnej implementacji. Tak, tłumacz nie musi być hostowany , wystarczy link do repozytorium / źródła (lub dokumentów)
cat

4

C # - 18 43 41 bajtów

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

-2 bajki dzięki @VoteToClose

Wypróbuj to

Uwaga:

Pierwsza faktyczna próba gry w golfa - wiem, że mogłabym to zrobić lepiej.


Witamy w tłumie! Właśnie z powodu nowicjuszy stawiam takie błahe wyzwania.
Adám

Naprawiony. Dzięki za poinformowanie mnie o tym
EnragedTanker

@crayzeedude W ogóle nie ma problemu. Dobra robota i jeszcze raz, witamy w PPCG!
Alex A.

Czy C # ma float?
Addison Crump

Rzeczywiście tak jest.
EnragedTanker

4

C, 23 bajty

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

Definiuje to funkcję makra, pktórej wynikiem jest ardzeń a.

Dzięki Dennisowi za przypomnienie mi, że gccnie wymaga math.huwzględnienia.

Dzięki @ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ za przypomnienie, że miejsce po pierwszym )nie jest potrzebne.

Wypróbuj online


W GCC nie musisz uwzględniać matematyki.h.
Dennis

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

4

dc , 125 bajtów

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

W przeciwieństwie do innych odpowiedzi dc, działa to dla wszystkich naprawdę xwiększych lub równych 1 ( 1 ≤ x). Dokładne do 4-5 miejsc po przecinku.

Dołączyłbym tutaj link TIO, ale z jakiegoś powodu powoduje to błąd segmentacji w wersji tam ( dc 1.3), podczas gdy nie w mojej wersji lokalnej ( dc 1.3.95).

Wyjaśnienie

Ponieważ dcnie obsługuje podnoszenia liczb do wykładników niecałkowitych do obliczenia x^(1/x), wykorzystuje to fakt, że:

Korzyść

Aby więc obliczyć ln(x), wykorzystuje to również fakt, że:

Zaleta 2

których całka oznaczona z 1 to (b = x)jest przybliżona liczbowo w przyrostach 10^-5przy użyciu następującej formuły sumowania:

Formuła sumowania.

Otrzymana suma jest następnie mnożona przez, 1/xaby uzyskać ln(x)/x. e^(ln(x)/x)jest następnie obliczany za pomocą e^xMaclaurin Series do 100 terminów w następujący sposób:

e ^ x Maclaurin Series.

Daje to naszą względnie dokładną wydajność x^(1/x).


1
+1 To musi być jedna z najlepszych dostępnych odpowiedzi dc. Zakładam to!
Kritixi Lithos

@KritixiLithos Dziękujemy! Doceniam miłe słowa. :)
R. Kap

3

PHP 5.6, 32 30 29 bajtów

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

lub

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

30-> 29, dziękuję Dennis!

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.