Golf la raíz xᵗʰ de x


24

Mientras estaba aburrido en la escuela secundaria (cuando tenía la mitad de mi edad actual ...), descubrí que f ( x ) = x ( x -1 ) tenía algunas propiedades interesantes, incluyendo, por ejemplo, que el máximo f para 0 ≤ x es f ( e ), y que la energía de unión por nucleón de un isótopo puede ser aproximada como 6 × f ( x ÷ 21) ...

De todos modos, escribir la función más corto o un programa que calcula el X º raíz de x para cualquier número en el dominio de la lengua.

Ejemplos de casos

Para todos los idiomas

     -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

Para idiomas que manejan números complejos

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

Para idiomas que manejan infinitos

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

Para idiomas que manejan tanto infinitos como números complejos

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

̃∞denota infinito dirigido .


1
Aquí hay una trama de Wolfram Alpha para real positivo x. Si omite los xlímites en la consulta, Wolfram Alpha incluirá valores negativos de xdonde el valor de la función depende de una elección de "rama" para el logaritmo complejo (o para una función compleja similar).
Jeppe Stig Nielsen

¿Qué pasa con los idiomas que no manejan el poder de los decimales?
Leaky Nun

1
@KennyLau Siéntase libre de publicar con una nota que lo diga, especialmente si el algoritmo funcionaría, si el lenguaje lo admitiera.
Adám

Respuestas:


38

TI-BASIC, 3 bytes

Ans×√Ans

TI-BASIC usa tokens, entonces Ansy×√ son a la vez un byte.

Explicación

Anses la forma más fácil de dar aportes; Es el resultado de la última expresión. ×√es una función para la raíz x de x, por ejemplo, 5×√32es 2.


8
Por lo que sé ans, contaría como entradas de codificación fija en variables y no parece ser un método de entrada aceptado para code-golf . En ese caso, haga un programa completo o una función.
flawr

44
@flawr Puedo ver lo que estás diciendo, pero parece que siempre se ha hecho así. Tal vez justifica una meta publicación?
NinjaBearMonkey

3
Anses STDIN / STDOUT para TI-Basic.
Timtech

55
stdiny stdoutson flujos de texto, generalmente para entrada y salida de texto interactivo. Ansno es interactivo, a diferencia de algunas otras funciones en TI-BASIC, que son interactivas.
Olathe

77
@flawr La razón por la Ansque generalmente se acepta es porque su valor lo establece cualquier expresión (las expresiones están separadas por :). Por lo tanto, algo como 1337:prgmXTHROOTingresar 1337, que se parece mucho a la entrada a través de CLA en un lenguaje normal.
lirtosiast

23

Jalea, 2 bytes

Pruébalo en línea!

Cómo funciona

*İ    Main link. Input: n

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

Jelly no tiene una pila. Una díada seguida por una mónada en una cadena monádica se comporta como las horquillas de APL.
Dennis

3
No, J ^%es un gancho (que no existe en Dyalog APL), no un tenedor. El código Jelly y APL es difícil de comparar ya que Jelly es de izquierda a derecha. El equivalente más cercano sería ÷*⊢(también una bifurcación), que se calcula (1/x)**xdebido a la dirección diferente. Como los átomos de Jelly no están sobrecargados (son monádicos o diádicos, pero nunca ambos), puede haber horquillas monádicas 1,2,1 y 2,1.
Dennis

Gracias por la aclaración. Naturalmente, estoy bastante intrigado por Jelly (que todavía creo que debería llamarse ȷ o algo similar.)
Adám

17

Javascript (ES2016), 11 bytes

x=>x**(1/x)

Raramente uso ES7 sobre ES6.


2
x=>x**x**-1También funciona, nuevamente para 11 bytes.
Neil

77
¡Todos saluden al nuevo operador de exponenciación!
mbomb007

15

Python 3, 17 bytes

lambda x:x**(1/x)

Autoexplicativo


77
Me gusta bastante lambda x:x**x**-1, pero no es más corto.
seequ

1
@Seeq Su expresión tiene la misma longitud, pero tiene la ventaja de trabajar tanto en Python 2 como en 3.
Mathmandan

1
El más corto de Python 2 es lambda x:x**x**-1, por lo que es el mismo en 2 y 3.
mbomb007

No pude encontrar esta respuesta por años y realmente me molestó cuando lo hice.

12

Haskell, 12 11 bytes

Gracias @LambdaFairy por hacer algo de magia:

(**)<*>(1/) 

Mi versión anterior

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

44
(**)<*>(1/)es de 11 bytes.
Lambda Fairy

@LambdaFairy ¡Gracias! ¿Te importa explicar? Parece que estás haciendo algo de magia con funciones parcialmente aplicadas, pero como soy bastante nuevo en Haskell, realmente no entiendo cómo funciona esto =)
error

Esto utiliza el hecho de que una función de 1 argumento puede considerarse un funtor aplicativo (la "mónada del lector"). El <*>operador toma un aplicativo que produce una función, y un aplicativo que produce un valor, y aplica la función al valor. Entonces, en este caso, una forma alucinante de aplicar una función de 2 argumentos a una función de 1 argumento.
MathematicalOrchid

2
La función <*>toma 3 argumentos, dos funciones fy gy un argumento x. Se define como (<*>) f g x = f x (g x), es decir, se aplica fa xy g x. Aquí se aplica parcialmente fy se gomite x, donde f = (**)y g = (1/)(otra función parcialmente aplicada (una sección) que calcula el valor recíproco de su argumento). Así ( (**)<*>(1/) ) xestá (**) x ((1/) x)o escrita en infija: x ** ((1/) x)y con la sección resuelto: x ** (1/x). - Nota: aquí <*>se usa en el contexto de la función y se comporta de manera diferente en otros contextos.
nimi

@nimi Entonces, ¿es el equivalente del Scombinador, es decir, S (**) (1 /)?
Neil

10

J, 2 bytes

^%

Pruébalo en línea! .

Cómo funciona

^%  Monadic verb. Argument: y

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

Iba a escribir esta respuesta. Soy demasiado lento en esto.
Bijan

1
@Bijan Más de un año demasiado lento, parece. : P
Dennis

Ya veo, solo llevo una semana jugando al golf.
Bijan

9

Pyth, 3 bytes

@QQ

Desafío trivial, solución trivial ...

(sin competencia, 1 byte)

@

Esto utiliza la función de entrada implícita presente en una versión de Pyth que es posterior a este desafío.


¿Esta solución es anterior a la característica de entrada implícita?
Leaky Nun

@KennyLau Sí, por mucho tiempo. Pero he editado la solución de un byte de todos modos.
Pomo de la puerta


8

Java 8, 18 bytes

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

Java no está en el último lugar?!?!

Prueba con lo siguiente:

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 el hecho de que es una función
CalculatorFeline

6

Java, 41 bytes

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

No es exactamente competitivo porque Java, pero ¿por qué no?


1
Bienvenido a PPCG! Creo que puede faltar un tipo de retorno en esta función.
un espagueti

Vaya, se volvió descuidado. Una respuesta de Java 8 ya superó a esta, por supuesto ...
Darrel Hoffman


6

Mathematica, 8 7 4 7 bytes

#^#^-1&

¡Más respuestas solo integradas, y ahora incluso más cortas! No Por definición, la siguiente respuesta debe ser de 13 bytes. (¡Fibonacci!) El patrón todavía está roto. :(


1
# ^ # ^ - 1 y guarda 1 byte.
njpipeorgan

AHORA está golfizado.
Adám

1
AHORA está golfizado.
CalculatorFeline

1
Cuando se publique Mthmtca, vamos a gobernar este foro.
Michael Stern

1
¿Seguramente Surdno es válido ya que requiere dos argumentos?
LLlAMnYP

5

Perl 5, 10 bytes

9 bytes más 1 para -p

$_**=1/$_

5

R, 19 17 bytes

function(x)x^x^-1

-2 bytes gracias a @Flounderer


¿Por qué no x^(1/x)? Editar: x^x^-1parece funcionar también.
Flounderer

Eso es un fragmento, y aparentemente a la gente no le gustan los fragmentos.
CalculatorFeline

@CatsAreFluffy es la definición de una función.
mnel

5

Rubí, 15 bytes

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

Sin golf:

->es el operador stada lambda donde a=->nes equivalente aa = lambda {|n|}


5

NARS APL, 2 bytes

√⍨

NARS admite la función, que proporciona la raíz root-ésima de ⍵. La aplicación de conmutación (⍨) proporciona una función que, cuando se usa monádicamente, aplica su argumento a ambos lados de la función dada. Por lo tanto√⍨ xx √ x.

Otras APL, 3 bytes

⊢*÷

Este es un tren de funciones, es decir, (F G H) x(F x) G H x. Monádico es identidad, diádico *es poder y monádico ÷es inverso. Por lo tanto, ⊢*÷se eleva x a 1 / x .


5

Python 2 - 56 bytes

La primera respuesta real, si estoy en lo correcto. Utiliza el método de Newton.

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

Las funciones están bien.
CalculatorFeline

5

CJam, 6 bytes

rd_W##

Pruébalo en línea!

Cómo funciona

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

Pilones , 5 bytes.

ideAe

Cómo funciona.

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

La segunda línea define una función lambda anónima. Se puede usar asignándolo a un puntero de función y llamándolo, o simplemente llamándolo directamente.

Pruébalo en línea


¿ ^No funciona en C ++ como lo hace en C?
takra

2
@ minerguy31: ^es bitor xor en C (y C ++).
marinus

4

Vía Láctea 1.6.5 , 5 bytes

'1'/h

Explicación

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


Uso

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

4

O , 6 bytes

j.1\/^

No hay enlace en línea porque el IDE en línea no funciona (específicamente, la exponenciación está rota)

Explicación:

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

oh hey lo hiciste yay
fase


4

Pyke (commit 29), 6 bytes

D1_R^^

Explicación:

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

¿Puede Haz Link PLS?
gato

Oh, pensé que querías decir que no hay implementación disponible. Sí, el intérprete no tiene que estar alojado , solo un enlace al repositorio / fuente (o documentos) será suficiente
cat

4

C # - 18 43 41 bytes

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

-2 byes gracias a @VoteToClose

Pruébalo

Nota:

Primer intento real de jugar al golf: sé que podría hacerlo mejor.


Bienvenido a la multitud! Es exactamente por los recién llegados que hago desafíos triviales como este.
Adám

Fijo. Gracias por informarme sobre esto
EnragedTanker

@crayzeedude No hay problema en absoluto. Buen trabajo y nuevamente, ¡bienvenido a PPCG!
Alex A.

¿C # tiene float?
Addison Crump

De hecho lo hace.
EnragedTanker

4

C, 23 bytes

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

Esto define una función macro pque se evalúa comoa raíz th dea .

Gracias a Dennis por recordarme que gccno requieremath.h ser incluido.

Gracias a @ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ por recordarme que el espacio después del primero )no es necesario.

Pruébalo en línea


Con GCC, no necesita incluir math.h.
Dennis

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

4

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

A diferencia de la otra respuesta de CC, esto funciona para todos los reales xmayores o iguales a 1 (1 ≤ x ). Preciso a 4-5 lugares después del decimal.

Hubiera incluido un enlace TIO aquí, pero por alguna razón esto arroja un error de segmentación con la versión allí ( dc 1.3) mientras que no con mi versión local (dc 1.3.95 ).

Explicación

Como dcno admite el aumento de números a exponentes no enteros para calcular x^(1/x), esto aprovecha el hecho de que:

Ventaja

Entonces, para calcular ln(x), esto también aprovecha el hecho de que:

Ventaja2

cuya integral definida de 1 to (b = x)se aproxima numéricamente en incrementos al 10^-5usar la siguiente fórmula de suma:

Fórmula de sumatoria.

La suma resultante se multiplica por 1/xpara obtener ln(x)/x.e^(ln(x)/x)luego se calcula finalmente utilizando la e^xserie Maclaurin a 100 términos de la siguiente manera:

e ^ x Serie Maclaurin.

Esto da como resultado nuestra salida relativamente precisa de x^(1/x).


1
+1 Esta tiene que ser una de las mejores respuestas de CC que existen. Estoy marcando esto!
Kritixi Lithos

@KritixiLithos ¡Gracias! Agradezco las amables palabras. :)
R. Kap

3

PHP 5.6, 32 30 29 bytes

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

o

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

30-> 29, gracias Dennis!

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.