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 √⍨ x↔ x √ 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.