Golf die xᵗʰ Wurzel von x


24

Während in der High-School gebohrt (wenn ich die Hälfte meines aktuellen Alter ... war), fand ich , dass f ( x ) = x ( x -1 ) hatte einige interessante Eigenschaften, darunter zum Beispiel , dass die maximale f für 0 ≤ x heißt f ( e ), und dass die Bindungsenergie pro Nukleon eines Isotops als 6 × f ( x ÷ 21) angenähert werden kann ...

Wie auch immer, schreiben Sie die kürzeste Funktion oder das kürzeste Programm, das die x- te Wurzel von x für eine beliebige Zahl in der Domain Ihrer Sprache berechnet .

Beispiele Fälle

Für alle Sprachen

     -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

Für Sprachen, die komplexe Zahlen verarbeiten

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

Für Sprachen, die mit Unendlichkeiten umgehen

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

Für Sprachen, die sowohl mit Unendlichkeiten als auch mit komplexen Zahlen umgehen

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

̃∞bezeichnet gerichtete Unendlichkeit .


1
Hier ist ein Wolfram Alpha-Plot für Positive Real x. Wenn Sie die xGrenzwerte in der Abfrage weglassen , enthält Wolfram Alpha negative Werte, bei xdenen der Funktionswert von der Auswahl von "branch" für den komplexen Logarithmus (oder für eine ähnliche komplexe Funktion) abhängt.
Jeppe Stig Nielsen

Was ist mit Sprachen, die keine Nachkommastellen verarbeiten?
Undichte Nonne

1
@KennyLau Fühlen Sie sich frei, mit einer Notiz zu posten, die besagt, dass die Sprache dies unterstützt, insbesondere wenn der Algorithmus funktionieren würde.
Adám

Antworten:


38

TI-BASIC, 3 Bytes

Ans×√Ans

TI-BASIC verwendet Token Ansund ×√besteht aus einem Byte.

Erläuterung

Ansist der einfachste Weg, um Input zu geben; es ist das Ergebnis des letzten Ausdrucks. ×√ist eine Funktion für die x-te Wurzel von x, also ist zum Beispiel 5×√322.


8
Soweit mir bekannt ist ans, gelten Eingaben in Variablen als Hardcodierung und scheinen keine akzeptierte Eingabemethode für Code-Golf zu sein . In diesem Fall machen Sie bitte ein vollständiges Programm oder eine Funktion.
Fehler

4
@flawr Ich kann sehen, was du sagst, aber es scheint, dass es immer so gemacht wurde. Vielleicht rechtfertigt es einen Meta-Post?
NinjaBearMonkey

3
Ansist STDIN / STDOUT für TI-Basic.
Timtech

5
stdinund stdoutsind Textströme, normalerweise für die interaktive Texteingabe und -ausgabe. Ansist nicht interaktiv, im Gegensatz zu einigen anderen interaktiven Funktionen in TI-BASIC.
Olathe

7
@flawr Normalerweise wird der Grund Ansakzeptiert, weil sein Wert durch einen beliebigen Ausdruck festgelegt wird (Ausdrücke werden durch getrennt :). Daher würde so etwas wie 1337:prgmXTHROOT1337 eingeben, was einer Eingabe über CLAs in einer normalen Sprache sehr ähnlich sieht.
Lirtosiast

23

Gelee, 2 Bytes

Probieren Sie es online!

Wie es funktioniert

*İ    Main link. Input: n

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

Jelly hat keinen Stapel. Eine Dyade, der eine Monade in einer monadischen Kette folgt, verhält sich wie die Gabeln von APL.
Dennis

3
Nein, J's ^%ist ein Haken (der in Dyalog APL nicht existiert), keine Gabel. Jelly- und APL-Code sind schwer zu vergleichen, da Jelly von links nach rechts ist. Das nächste Äquivalent wäre ÷*⊢(auch eine Gabelung), die (1/x)**xaufgrund der unterschiedlichen Richtung rechnet . Da Jellys Atome nicht überladen sind (sie sind entweder monadisch oder dyadisch, aber niemals beides), kann es monadische 1,2,1- und 2,1-Gabeln geben.
Dennis

Danke für die Klarstellung. Natürlich bin ich ziemlich fasziniert von Jelly (was ich immer noch als ȷ oder so ähnlich bezeichnen sollte)
Adám

17

Javascript (ES2016), 11 Byte

x=>x**(1/x)

Ich benutze ES7 selten über ES6.


2
x=>x**x**-1funktioniert auch wieder für 11 bytes.
Neil

7
Alle begrüßen den neuen Exponentiationsoperator!
mbomb007

15

Python 3, 17 Bytes

lambda x:x**(1/x)

Selbsterklärend


7
Ich mag lambda x:x**x**-1, aber es ist nicht kürzer.
Siehe auch

1
@Seeq Ihr Ausdruck ist gleich lang, hat aber den Vorteil, dass er sowohl in Python 2 als auch in Python 3
funktioniert

1
Python 2 ist am kürzesten lambda x:x**x**-1, daher ist es in 2 und 3
dasselbe

Ich konnte diese Antwort seit Ewigkeiten nicht finden und war sehr verärgert, als ich das tat.

12

Haskell, 12 11 Bytes

Danke @LambdaFairy für die Magie:

(**)<*>(1/) 

Meine alte Version:

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

4
(**)<*>(1/)ist 11 Bytes.
Lambda Fairy

@ LambdaFairy Vielen Dank! Stört es dich zu erklären? Es sieht so aus, als würden Sie mit teilweise angewendeten Funktionen etwas zaubern, aber da ich für Haskell ziemlich neu bin, verstehe ich nicht wirklich, wie das funktioniert =)
Fehler

Dies beruht auf der Tatsache, dass eine 1-Argument-Funktion als anwendbarer Funktor (die "Leser-Monade") betrachtet werden kann. Der <*>Operator nimmt eine Anwendung, die eine Funktion erzeugt, und eine Anwendung, die einen Wert erzeugt, und wendet die Funktion auf den Wert an. In diesem Fall ist dies eine umwerfende Methode, um eine 2-Argument-Funktion auf eine 1-Argument-Funktion anzuwenden.
MathematicalOrchid

2
Die Funktion <*>nimmt drei Argumente, zwei Funktionen fund gund ein Argument x. Es ist definiert als (<*>) f g x = f x (g x), dh es gilt ffür xund g x. Hier wird es teilweise angewendet fund gweggelassen x, wo f = (**)und g = (1/)(eine andere teilweise angewendete Funktion (ein Abschnitt), der den reziproken Wert seines Arguments berechnet). So ( (**)<*>(1/) ) xwird (**) x ((1/) x)oder in infix geschrieben: x ** ((1/) x)und mit dem Abschnitt aufgelöst: x ** (1/x). - Hinweis: <*>Wird hier im Funktionskontext verwendet und verhält sich in anderen Kontexten anders.
Nimi

@nimi Also ist es das Äquivalent des SKombinators, dh S (**) (1 /)?
Neil

10

J, 2 Bytes

^%

Probieren Sie es online! .

Wie es funktioniert

^%  Monadic verb. Argument: y

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

Ich wollte diese Antwort schreiben. Ich bin zu langsam dabei.
Bijan

1
@ Bijan Über ein Jahr zu langsam, scheint es. : P
Dennis

Ich sehe, ich habe jetzt nur für eine Woche Golf gespielt.
Bijan

9

Pyth, 3 Bytes

@QQ

Triviale Herausforderung, triviale Lösung ...

(nicht konkurrierend, 1 Byte)

@

Hierbei wird die implizite Eingabefunktion verwendet, die in einer Version von Pyth vorhanden ist, die diese Herausforderung nachholt.


Ist diese Lösung älter als die implizite Eingabe?
Undichte Nonne

@KennyLau Ja, schon lange. Aber ich habe die Ein-Byte-Lösung trotzdem bearbeitet.
Türklinke


8

Java 8, 18 Bytes

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

Java ist nicht an letzter Stelle?!?!

Testen Sie mit den folgenden:

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

Es ist die Tatsache, dass es eine Funktion ist
CalculatorFeline

6

Java, 41 Bytes

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

Nicht gerade konkurrenzfähig, weil Java, aber warum nicht?


1
Willkommen bei PPCG! Ich denke, Sie könnten einen Rückgabetyp für diese Funktion vermissen.
ein Spaghetto

Hoppla, bin schlampig geworden. Eine Java-8-Antwort hat diese natürlich schon geschlagen ...
Darrel Hoffman


6

Mathematica, 8 7 4 7 Bytes

#^#^-1&

Mehr integrierte Antworten und jetzt noch kürzer! Nee. Per Definition sollte die nächste Antwort 13 Bytes sein. (Fibonacci!) Das Muster ist immer noch gebrochen. :(


1
# ^ # ^ - 1 & spart 1 Byte.
njpipeorgan

JETZT wird Golf gespielt.
Adám

1
JETZT wird Golf gespielt.
CalculatorFeline

1
Wenn Mthmtca veröffentlicht wird, werden wir dieses Board regieren.
Michael Stern

1
Sicherlich ist es einfach Surdnicht gültig, da es zwei Argumente erfordert?
LLlAMnYP

5

Perl 5, 10 Bytes

9 Bytes plus 1 für -p

$_**=1/$_

5

R, 19 17 Bytes

function(x)x^x^-1

-2 Bytes dank @Flounderer


Warum nicht x^(1/x)? Edit: x^x^-1scheint auch zu funktionieren.
Flunder

Das ist ein Ausschnitt, und anscheinend mögen die Leute keine Ausschnitte.
CalculatorFeline

@CatsAreFluffy ist die Definition einer Funktion.
29.

5

Rubin, 15 Bytes

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

Ungolfed:

->ist der Stabby- Lambda-Operator, zu dem a=->näquivalent ista = lambda {|n|}


5

NARS APL, 2 Bytes

√⍨

NARS unterstützt die Funktion, die die ⍺-te Wurzel von ⍵ ergibt. Das Anwenden von pendeln (⍨) ergibt eine Funktion, die bei monadischer Verwendung ihr Argument auf beide Seiten der angegebenen Funktion anwendet. Deshalb √⍨ xx √ x.

Andere APLs, 3 Byte

⊢*÷

Dies ist ein Funktionszug, dh (F G H) x(F x) G H x. Monade ist Identität, Dyade ist *Macht und Monade ÷ist invers. Daher ⊢*÷wird x auf 1 / x erhöht .


5

Python 2 - 56 Bytes

Die erste tatsächliche Antwort, wenn ich richtig bin. Verwendet Newtons Methode.

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

Funktionen sind in Ordnung.
CalculatorFeline

5

CJam, 6 Bytes

rd_W##

Probieren Sie es online!

Wie es funktioniert

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

Pylone , 5 Bytes.

ideAe

Wie es funktioniert.

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 Bytes

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

Die zweite Zeile definiert eine anonyme Lambda-Funktion. Es kann verwendet werden, indem es einem Funktionszeiger zugewiesen und aufgerufen wird oder einfach direkt aufgerufen wird.

Probieren Sie es online aus


Funktioniert ^nicht in C ++ wie in C?
Takra

2
@ minerguy31: ^ist bitweises xor in C (und C ++).
Marinus

4

Milchstraße 1.6.5 , 5 Bytes

'1'/h

Erläuterung

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


Verwendung

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

4

O , 6 Bytes

j.1\/^

Kein Online-Link, da die Online-IDE nicht funktioniert (insbesondere ist die Potenzierung fehlerhaft)

Erläuterung:

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

oh hey du hast es geschafft yay
phase


4

Pyke (Festschreiben 29), 6 Bytes

D1_R^^

Erläuterung:

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

Können haz link pls?
Katze

Oh, ich dachte, Sie meinen, es ist keine Implementierung verfügbar. Ja, der Dolmetscher muss nicht gehostet werden , nur ein Link zum Repo / zur Quelle (oder zu den Dokumenten) wird ausreichen
cat

4

C # - 18 43 41 Bytes

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

-2 byes dank @VoteToClose

Versuch es

Hinweis:

Erster wirklicher Golfversuch - ich weiß, ich könnte das besser machen.


Willkommen in der Menge! Gerade wegen der Neuankömmlinge stelle ich mich solchen kleinen Herausforderungen.
Adám

Fest. Vielen Dank, dass Sie mich darüber informiert haben
EnragedTanker

@crayzeedude Kein Problem. Gute Arbeit und wieder willkommen bei PPCG!
Alex A.

Hat C # float?
Addison Crump

In der Tat.
EnragedTanker

4

C 23 Bytes

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

Dies definiert eine Makrofunktion, pdie zur aWurzel von ausgewertet wird a.

Vielen Dank an Dennis, der mich daran erinnert hat, dass gccdies nicht unbedingt erforderlich math.hist.

Vielen Dank an @ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ, der mich daran erinnert hat, dass der Platz nach dem ersten )nicht benötigt wird.

Probieren Sie es online aus


In GCC muss math.h nicht eingeschlossen werden.
Dennis

-1 Byte:#define p(a)pow(a,1./a)
Erik der Outgolfer

4

Gleichstrom , 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

Im Gegensatz zur anderen Gleichstromantwort funktioniert dies für alle reellen xWerte größer oder gleich 1 ( 1 ≤ x). Genau 4-5 Stellen nach dem Komma.

Ich hätte hier einen TIO-Link eingefügt, aber aus irgendeinem Grund führt dies zu einem Segmentierungsfehler bei der dortigen Version ( dc 1.3), wohingegen dies bei meiner lokalen Version ( ) nicht der Fall ist dc 1.3.95.

Erläuterung

Da dcdas Erhöhen von Zahlen auf nicht ganzzahlige Exponenten zum Berechnen nicht unterstützt wird, wird x^(1/x)die Tatsache ausgenutzt, dass:

Vorteil

Zur Berechnung ln(x)wird also auch die Tatsache ausgenutzt, dass:

Advantage2

deren definitives Integral von 1 to (b = x)in Schritten von numerisch angenähert wird, 10^-5wobei die folgende Summenformel verwendet wird:

Summenformel.

Die resultierende Summe wird dann mit multipliziert, um 1/xzu erhalten ln(x)/x. e^(ln(x)/x)wird dann unter Verwendung der e^xMaclaurin-Reihe zu 100 Termen wie folgt berechnet :

e ^ x Maclaurin-Serie.

Dies führt zu unserer relativ genauen Ausgabe von x^(1/x).


1
+1 Dies muss eine der besten DC-Antworten sein. Ich setze ein Lesezeichen dafür!
Kritixi Lithos

@KritixiLithos Danke! Ich schätze die freundlichen Worte. :)
R. Kap

3

PHP 5.6, 32 30 29 Bytes

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

oder

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

30-> 29, danke Dennis!

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.