打高尔夫球x的x根


24

虽然闷在高中(当我有一半我现在的年龄......),我发现˚FX)= X X -1有一些有趣的特性,包括例如,最大˚F 0≤ X就是˚Fe),每个同位素的每个核子结合能可以近似为fx ÷21) ...

无论如何,编写最短的函数或程序来计算您语言域中任意数字的x的 x 根。

案例案例

对于所有语言

     -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

对于处理复数的语言

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

对于处理无限性的语言

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

对于同时处理无限数和复数的语言

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

̃∞表示有向无穷大


1
这是正实数的Wolfram Alpha图x。如果您省略x查询中的限制,则Wolfram Alpha将包含负值x,该负值表示函数值取决于复数对数(或类似复数函数)的“分支”选项。
Jeppe Stig Nielsen

对于不处理小数幂的语言该怎么办?
Leaky Nun

1
@KennyLau随意发表便条,上面写着这样的注释,尤其是如果该算法可以运行,请提供该语言的支持。
2013年

Answers:


38

TI-BASIC,3个字节

Ans×√Ans

TI-BASIC使用令牌,因此Ans×√都是一个字节。

说明

Ans是输入的最简单方法;它是最后一个表达式的结果。×√是x的第x个根的函数,例如5×√32是2。


8
据我所知,ans这将算作对变量的硬编码输入,并且似乎不是code-golf的公认输入方法。在这种情况下,请编写完整的程序或功能。
瑕疵的2016年

4
@flawr我可以看到您在说什么,但似乎总是像这样完成。也许它需要一个元发布?
NinjaBearMonkey '16

3
Ans是TI-Basic的STDIN / STDOUT。
Timtech '16

5
stdinstdout是文本流,通常用于交互式文本输入和输出。Ans与TI-BASIC中的其他一些交互式功能不同,它不是交互式的。
奥拉西

7
@flawr Ans通常被接受的原因是因为其值由任何表达式设置(表达式由分隔:)。因此,类似的1337:prgmXTHROOT输入将是1337,看起来很像是通过CLA以正常语言输入的。
lirtosiast

23

果冻,2个字节

在线尝试!

怎么运行的

*İ    Main link. Input: n

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

果冻没有堆栈。一个单子链中紧随其后的一个双子组的行为类似于APL的分叉。
丹尼斯

3
不,J ^%是一个钩子(Dyalog APL中不存在),而不是叉子。由于Jelly从左到右,因此很难比较Jelly和APL代码。最接近的等价项是÷*⊢(也是一个分叉),(1/x)**x由于方向不同而进行计算。由于果冻的原子不会超载(它们要么是单原子的,要么是双原子的,但绝不会两者都重),因此可以有单原子的1,2,1-和2,1-叉。
丹尼斯

感谢您的澄清。自然,我对Jelly感兴趣(我仍然认为它应命名为ȷ或类似名称。)
Adám16年

17

Javascript(ES2016),11个字节

x=>x**(1/x)

我很少使用ES7而不是ES6。


2
x=>x**x**-1同样适用于11个字节。
尼尔

7
都欢呼新的求幂运算符!
mbomb007 '16

15

Python 3,17个字节

lambda x:x**(1/x)

不言自明


7
我很喜欢lambda x:x**x**-1,但是它并不短。
seequ '16

1
@Seeq您的表达式长度相同,但是具有可以同时在Python 2和3中使用的优点
。– mathmandan

1
Python 2中的最短的lambda x:x**x**-1,所以它是在2和3相同的
mbomb007

我好久没找到这个答案了,当我真的很生气。

12

Haskell,12 11个字节

感谢@LambdaFairy做一些魔术:

(**)<*>(1/) 

我的旧版本:

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

4
(**)<*>(1/)是11个字节。
Lambda Fairy

@LambdaFairy谢谢!你介意解释吗?看来您正在通过部分应用的函数来做一些魔术,但是由于我对Haskell相当
陌生

这利用了一个事实,即1参数函数可以被视为应用函子(“阅读器单子”)。在<*>操作者取产生的功能,并且产生一个值的一个应用性一个适用,并且函数适用于该值。因此,在这种情况下,一种将2参数函数应用于1参数函数的弯腰方法。
MathematicalOrchid

2
该函数<*>接受3个参数,两个函数fg和一个参数x。它定义为(<*>) f g x = f x (g x),即适用fxg x。在这里,它部分地应用于fg省略x,而f = (**)and g = (1/)(另一个部分地应用的函数(一个部分),用于计算其参数的倒数值)。所以( (**)<*>(1/) ) x(**) x ((1/) x)或写入缀:x ** ((1/) x)与解决部分:x ** (1/x)。-注意:<*>此处在函数上下文中使用,在其他上下文中的行为有所不同。
nimi 2016年

@nimi所以它等同于S组合器,即S(**)(1 /)?
尼尔

10

J,2个字节

^%

在线尝试!

怎么运行的

^%  Monadic verb. Argument: y

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

我要写这个答案。我对此太慢了。
Bijan

1
@Bijan似乎一年来太慢了。:P
丹尼斯

我知道,我现在才打高尔夫球一个星期。
Bijan

9

Pyth,3个字节

@QQ

琐碎的挑战,琐碎的解决方案...

(非竞争,1个字节)

@

这将使用在此挑战发布之后的Pyth版本中提供的隐式输入功能。


此解决方案是否早于隐式输入的功能?
Leaky Nun

@KennyLau是的,很长一段时间。但是我无论如何都编辑了一个字节的解决方案。
门把手


8

Java 8,18字节

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

Java不在最后吗?!?!

测试以下内容:

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

这是事实,它是一个函数
CalculatorFeline



6

Mathematica,8 7 4 7个字节

#^#^-1&

更多内置答案,现在更短!不。 根据定义,下一个答案应该是13个字节。(斐波那契!)图案仍然断了。:(


1
#^#^-1&保存1个字节。
njpipeorgan

现在它打高尔夫球了。
亚当

1
现在它打高尔夫球了。
CalculatorFeline

1
当Mthmtca发布时,我们将统治该委员会。
Michael Stern

1
肯定Surd是无效的,因为它需要两个参数?
LLlAMnYP'6

5

Perl 5、10个字节

9字节加1用于 -p

$_**=1/$_

5

R,19 17字节

function(x)x^x^-1

-2个字节,感谢@Flounderer


为什么不x^(1/x)呢?编辑:x^x^-1似乎也可以。
Flounderer

那是一个片段,显然人们不喜欢片段。
CalculatorFeline

@CatsAreFluffy它是一个函数的定义。
mnel


5

NARS APL,2个字节

√⍨

NARS支持该功能,该功能给出⍺的第root个根。应用通勤(⍨)会产生一个函数,该函数一元使用时,会将其参数应用于给定函数的两侧。因此√⍨ xx √ x

其他APL,3个字节

⊢*÷

这是功能列,即(F G H) x(F x) G H x。Monadic 是同一性,二元*是力量,Monadic ÷是逆。因此,⊢*÷x提高到1 / x


5

Python 2-56个字节

第一个实际答案,如果我是正确的话。使用牛顿法。

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

功能还可以。
CalculatorFeline

5

CJam,6个字节

rd_W##

在线尝试!

怎么运行的

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

塔架,5个字节。

ideAe

怎么运行的。

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个字节

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

第二行定义了一个匿名lambda函数。可以通过将其分配给函数指针并调用它,或者直接调用它来使用它。

在线尝试


^用C不行++作为在C呢?
塔克拉

2
@ minerguy31:^在C(和C ++)中按位异或。
marinus

4

银河1.6.5,5字节

'1'/h

说明

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


用法

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

4

O,6个字节

j.1\/^

没有在线链接,因为在线IDE不起作用(特别是,幂运算中断了)

说明:

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

哦,嘿,您做到了
阶段


4

Pyke(commit 29),6个字节

D1_R^^

说明:

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

可以链接链接吗?

哦,我认为您的意思是没有可用的实现。是的,不需要托管解释器,只需指向存储库/源(或文档)的链接就可以了
2016年

4

C#-18 43 41字节

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

-2 byes感谢@VoteToClose

试试看

注意:

高尔夫的第一次实际尝试-我知道我可以做得更好。


欢迎来到人群!正是由于新来者,我才这样提出了微不足道的挑战。
2013年

固定。感谢您告知我这一点
EnragedTanker

@crayzeedude完全没有问题。干得好,欢迎来到PPCG!
Alex A.

C#有float吗?
Addison Crump

确实如此。
EnragedTanker

4

C,23个字节

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

这定义了一个宏函数p,其计算结果为的aa

感谢Dennis提醒我,gcc不需要math.h包括在内。

感谢@EʀɪᴋᴛʜᴇGᴏʟғᴇʀ提醒我,)不需要第一个之后的空格。

在线尝试


使用GCC,您无需包含math.h。
丹尼斯

-1个字节:#define p(a)pow(a,1./a)
Egg the Outgolfer

4

直流,125字节

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

不同于其他DC答案,这适用于所有真正的x大于或等于1( 1 ≤ x)。小数点后精确到4-5位。

我应该在此处包括一个TIO链接,但是由于某种原因,这会导致那里的版本(dc 1.3)出现分段错误,而不会出现我的本地版本(dc 1.3.95)。

说明

由于dc不支持对非整数指数进行递增计算x^(1/x),因此利用了以下事实:

优点

因此,要计算ln(x),这还利用了以下事实:

优势2

使用下面的求和公式1 to (b = x)以递增方式10^-5对它的定积分进行数值逼近:

求和公式

然后将所得的总和乘以1/x得到ln(x)/xe^(ln(x)/x)然后使用e^xMaclaurin系列最终将100项计算如下:

e ^ x Maclaurin系列

这导致的输出相对准确x^(1/x)


1
+1这一定是最好的直流答案之一。我为此加了书签!
Kritixi Lithos

@KritixiLithos谢谢!我很欣赏客气的话。:)
R. Kap's

3

PHP 5.6,32 30 29个字节

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

要么

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

30-> 29,谢谢丹尼斯!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.