Jouez à la racine xᵗʰ de x


24

Alors que je m'ennuyais au lycée (quand j'avais la moitié de mon âge actuel ...), j'ai trouvé que f ( x ) = x ( x -1 ) avait des propriétés intéressantes, y compris par exemple que le maximum f pour 0 ≤ x est f ( e ), et que l' énergie de liaison par nucléon d'un isotope peut être approchée comme 6 × f ( x ÷ 21) ...

Quoi qu'il en soit, écrivez la fonction ou le programme le plus court qui calcule la x ème racine de x pour n'importe quel nombre dans le domaine de votre langue.

Exemples de cas

Pour toutes les langues

     -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

Pour les langues qui gèrent des nombres complexes

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

Pour les langues qui gèrent les infinis

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

Pour les langues qui traitent à la fois les infinis et les nombres complexes

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

̃∞désigne l' infini dirigé .


1
Voici un tracé Wolfram Alpha pour un réel positif x. Si vous omettez les xlimites dans la requête, Wolfram Alpha inclura des valeurs négatives de l' xendroit où la valeur de la fonction dépend d'un choix de "branche" pour le logarithme complexe (ou pour une fonction complexe similaire).
Jeppe Stig Nielsen

Qu'en est-il des langues qui ne gèrent pas la puissance des décimales?
Leaky Nun

1
@KennyLau N'hésitez pas à poster avec une note qui le dit, surtout si l'algorithme fonctionne, si le langage le supportait.
Adám

Réponses:


38

TI-BASIC, 3 octets

Ans×√Ans

TI-BASIC utilise des jetons, donc Anset ×√sont tous les deux d'un octet.

Explication

Ansest le moyen le plus simple de fournir des informations; c'est le résultat de la dernière expression. ×√est une fonction pour la xième racine de x, donc par exemple 5×√32est 2.


8
Pour autant que je sache, anscela compterait comme des entrées codées en dur dans des variables et ne semble pas être une méthode d'entrée acceptée pour le code-golf . Dans ce cas, veuillez créer un programme complet ou une fonction.
flawr

4
@flawr Je peux voir ce que vous dites, mais il semble que cela ait toujours été fait comme ça. Peut-être que cela mérite un meta post?
NinjaBearMonkey

3
Ansest STDIN / STDOUT pour TI-Basic.
Timtech

5
stdinet stdoutsont des flux de texte, généralement pour la saisie et la sortie de texte interactif. Ansn'est pas interactif, contrairement à certaines autres fonctions de TI-BASIC, qui sont interactives.
Olathe

7
@flawr La raison Ansgénéralement admise est que sa valeur est définie par n'importe quelle expression (les expressions sont séparées par :). Par conséquent, quelque chose comme 1337:prgmXTHROOTentrerait 1337, qui ressemble beaucoup à une entrée via CLA dans un langage normal.
lirtosiast

23

Gelée, 2 octets

Essayez-le en ligne!

Comment ça marche

*İ    Main link. Input: n

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

Jelly n'a pas de pile. Une dyade suivie par une monade dans une chaîne monadique se comporte comme les fourches d'APL.
Dennis

3
Non, J's ^%est un crochet (qui n'existe pas dans Dyalog APL), pas une fourche. Le code Jelly et APL est difficile à comparer car Jelly est de gauche à droite. L'équivalent le plus proche serait ÷*⊢(également une fourchette), qui calcule en (1/x)**xraison de la direction différente. Comme les atomes de Jelly ne sont pas surchargés (ils sont soit monadiques, soit dyadiques, mais jamais les deux), il peut y avoir des fourches 1,2,1 et 2,1 monadiques.
Dennis

Merci pour la clarification. Naturellement, je suis assez intrigué par Jelly (qui devrait toujours être nommé ȷ ou quelque chose de similaire.)
Adám

17

Javascript (ES2016), 11 octets

x=>x**(1/x)

J'utilise rarement ES7 sur ES6.


2
x=>x**x**-1fonctionne également, encore une fois pour 11 octets.
Neil

7
Tous saluent le nouvel opérateur d'exponentiation!
mbomb007

15

Python 3, 17 octets

lambda x:x**(1/x)

Explicite


7
J'aime bien lambda x:x**x**-1, mais ce n'est pas plus court.
seequ

1
@Seeq Votre expression est de la même longueur, mais elle a l'avantage de fonctionner à la fois en Python 2 et 3.
mathmandan

1
Le plus court de Python 2 est lambda x:x**x**-1donc le même en 2 et 3.
mbomb007

Je n'ai pas pu trouver cette réponse depuis des lustres et j'étais vraiment ennuyé quand je l'ai fait.

12

Haskell, 12 11 octets

Merci @LambdaFairy d'avoir fait de la magie:

(**)<*>(1/) 

Mon ancienne version:

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

4
(**)<*>(1/)est de 11 octets.
Lambda Fairy

@LambdaFairy Merci! Ça vous dérange d'expliquer? On dirait que vous faites de la magie avec des fonctions partiellement appliquées mais comme je suis assez nouveau pour Haskell, je ne comprends pas vraiment comment cela fonctionne =)
flawr

Cela utilise le fait qu'une fonction à 1 argument peut être considérée comme un foncteur applicatif (la "monade lecteur"). L' <*>opérateur prend un applicatif qui produit une fonction, et un applicatif qui produit une valeur, et applique la fonction à la valeur. Donc, dans ce cas, une façon époustouflante d'appliquer une fonction à 2 arguments à une fonction à 1 argument.
MathematicalOrchid

2
La fonction <*>prend 3 arguments, deux fonctions fet get un argument x. Il est défini comme (<*>) f g x = f x (g x), c'est à dire qu'il s'applique fà xet g x. Ici, il est partiellement appliqué fet gomis x, où f = (**)et g = (1/)(une autre fonction partiellement appliquée (une section) qui calcule la valeur réciproque de son argument). Donc , ( (**)<*>(1/) ) xest (**) x ((1/) x)ou écrit en infix: x ** ((1/) x)et la section résolu: x ** (1/x). - Remarque: <*>est utilisé ici dans le contexte de la fonction et se comporte différemment dans les autres contextes.
nimi

@nimi C'est donc l'équivalent du Scombinateur ie S (**) (1 /)?
Neil

10

J, 2 octets

^%

Essayez-le en ligne! .

Comment ça marche

^%  Monadic verb. Argument: y

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

J'allais écrire cette réponse. Je suis trop lent à ça.
Bijan

1
@Bijan Plus d'un an trop lent, semble-t-il. : P
Dennis

Je vois, je ne joue au golf que depuis une semaine maintenant.
Bijan

9

Pyth, 3 octets

@QQ

Défi trivial, solution triviale ...

(non compétitif, 1 octet)

@

Cela utilise la fonction d'entrée implicite présente dans une version de Pyth qui postdate ce défi.


Cette solution est-elle antérieure à la fonctionnalité d'entrée implicite?
Leaky Nun

@KennyLau Oui, depuis longtemps. Mais j'ai quand même édité la solution à un octet.
Poignée de porte


8

Java 8, 18 octets

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

Java n'est pas à la dernière place?!?!

Testez avec les éléments suivants:

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

C'est le fait que c'est une fonction
CalculatorFeline

6

Java, 41 octets

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

Pas vraiment compétitif parce que Java, mais pourquoi pas?


1
Bienvenue chez PPCG! Je pense que vous pourriez manquer un type de retour sur cette fonction.
un spaghetto du

Oups, je suis devenu bâclé. Une réponse Java 8 a déjà battu celle-ci bien sûr ...
Darrel Hoffman


6

Mathematica, 8 7 4 7 octets

#^#^-1&

Plus de réponses intégrées et maintenant encore plus courtes! Nan. Par définition, la réponse suivante doit être de 13 octets. (Fibonacci!) Le motif est encore cassé. :(


1
# ^ # ^ - 1 & enregistre 1 octet.
njpipeorgan

MAINTENANT, il est joué au golf.
Adám

1
MAINTENANT, il est joué au golf.
CalculatorFeline

1
Lorsque Mthmtca sera publié, nous allons régner sur ce forum.
Michael Stern

1
Ce Surdn'est sûrement pas valable car cela nécessite deux arguments?
LLlAMnYP

5

Perl 5, 10 octets

9 octets plus 1 pour -p

$_**=1/$_

5

R, 19 17 octets

function(x)x^x^-1

-2 octets grâce à @Flounderer


Pourquoi ne pas x^(1/x)? Edit: x^x^-1semble fonctionner aussi.
Flounderer

C'est un extrait, et apparemment, les gens n'aiment pas les extraits.
CalculatorFeline

@CatsAreFluffy c'est la définition d'une fonction.
mnel

5

Rubis, 15 octets

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

Non golfé:

->est l' opérateur lambda stabbya=->nest équivalent àa = lambda {|n|}


5

NARS APL, 2 octets

√⍨

NARS prend en charge la fonction, qui donne la ⍺-ème racine de ⍵. L'application de commute (⍨) donne une fonction qui, lorsqu'elle est utilisée de façon monadique, applique son argument aux deux côtés de la fonction donnée. Par conséquent √⍨ xx √ x.

Autres APL, 3 octets

⊢*÷

Il s'agit d'un train de fonctions, c'est-à-dire (F G H) x(F x) G H x. Monadique est identité, dyadique *est pouvoir et monadique ÷est inverse. Par conséquent, x⊢*÷ est élevé à 1 / x .


5

Python 2 - 56 octets

La première vraie réponse, si j'ai raison. Utilise la méthode de Newton.

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

Les fonctions sont correctes.
CalculatorFeline

5

CJam, 6 octets

rd_W##

Essayez-le en ligne!

Comment ça marche

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

Pylônes , 5 octets.

ideAe

Comment ça marche.

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 octets

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

La deuxième ligne définit une fonction lambda anonyme. Il peut être utilisé en l'affectant à un pointeur de fonction et en l'appelant, ou en l'appelant directement.

Essayez-le en ligne


Ne ^fonctionne pas en C ++ comme en C?
takra

2
@ minerguy31: ^est xor au niveau du bit en C (et C ++).
marinus

4

Voie lactée 1.6.5 , 5 octets

'1'/h

Explication

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

j.1\/^

Pas de lien en ligne car l'IDE en ligne ne fonctionne pas (en particulier, l'exponentiation est rompue)

Explication:

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

oh hey vous l'avez fait yay
phase


4

Pyke (commit 29), 6 octets

D1_R^^

Explication:

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

Puis-je lier les pls?
chat

Oh, je pensais que vous vouliez dire qu'il n'y avait pas d'implémentation disponible. Oui, l'interprète ne doit pas être hébergé , juste un lien vers le repo / source (ou les documents) suffira
cat

4

C # - 18 43 41 octets

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

-2 byes grâce à @VoteToClose

Essaye le

Remarque:

Première tentative réelle de golf - je sais que je pourrais faire mieux.


Bienvenue dans la foule! C'est exactement à cause des nouveaux arrivants que je lance des défis insignifiants comme celui-ci.
Adám

Fixé. Merci de m'avoir informé de cela
EnragedTanker

@crayzeedude Aucun problème. Beau travail et encore une fois, bienvenue chez PPCG!
Alex A.

Est-ce que C # a float?
Addison Crump

En effet.
EnragedTanker

4

C, 23 octets

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

Ceci définit une fonction macro pqui évalue à la aracine e de a.

Merci à Dennis de m'avoir rappelé qu'il gccn'est pas nécessaire math.hd'être inclus.

Merci à @ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ de me rappeler que l'espace après le premier )n'est pas nécessaire.

Essayez-le en ligne


Avec GCC, vous n'avez pas besoin d'inclure math.h.
Dennis

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

4

DC , 125 octets

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

Contrairement à l'autre réponse DC, cela fonctionne pour tous les réels xsupérieurs ou égaux à 1 ( 1 ≤ x). Précis à 4-5 places après la décimale.

J'aurais inclus un lien TIO ici, mais pour une raison quelconque, cela jette un défaut de segmentation avec la version là ( dc 1.3) alors qu'il ne le fait pas avec ma version locale ( dc 1.3.95).

Explication

Comme dcne prend pas en charge l'augmentation des nombres à des exposants non entiers à calculer x^(1/x), cela profite du fait que:

Avantage

Donc, pour calculer ln(x), cela profite également du fait que:

Avantage2

dont l'intégrale définie de 1 to (b = x)est approximée numériquement par incréments en 10^-5utilisant la formule de sommation suivante:

Formule de sommation.

La somme résultante est ensuite multipliée par 1/xpour obtenir ln(x)/x. e^(ln(x)/x)est ensuite finalement calculé en utilisant la e^xsérie Maclaurin à 100 termes comme suit:

e ^ x Maclaurin Series.

Il en résulte notre sortie relativement précise de x^(1/x).


1
+1 Cela doit être l'une des meilleures réponses DC disponibles. Je marque ceci!
Kritixi Lithos

@KritixiLithos Merci! J'apprécie les mots aimables. :)
R. Kap

3

PHP 5.6, 32 30 29 octets

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

ou

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

30-> 29, merci Dennis!

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.