反函数


31

如果编程功能可以像它们实现的数学功能一样反转,那不是很整洁吗?

编写一个函数(或程序),以x任何形式输入一个输入,然后输出ln(x)
当对程序字节进行重新排序/反转,以便第一个字节现在是最后一个字节时,它应采用x任何形式的一个输入并e^x取而代之。

  • 您的答案必须至少包含3个正确的有效数字。
  • 近似值可以,只要它们具有至少3个正确的有效数字即可。
  • 您的代码向前和向后都必须使用相同的编程语言。

假设这个程序实现了ln(x)

abc你好

然后该程序必须实现e^x

\xBD\xA5\xE5\xA0\xBD\xE4cba

如果您使用的语言没有浮动支持,则为金星。

这是代码高尔夫球的一种怪异形式,因此最短的程序为准。


4
“如果编程功能能够像它们实现的数学功能一样被倒置,这不是很好吗?” 某些语言(例如J和Mathematica)实际上可以对某些功能执行此操作。
Martin Ender

另外,K2可以通过?使用割线方法的二元和三元函数的“函数逆”重载来近似任意一元纯函数的逆。
JohnE '16

1
“至少3个正确的有效数字”-在什么范围内?
TLW

4
我意识到现在为时已晚,但是我认为,如果不允许发表评论,这将是一个非常不错的挑战。
Alex A.

当我提出这个挑战@AlexA时,我实际上想到了这一点。但在撰写文章:P时却忘了它,这也将使“正常”语言(如Java,C ++等)基本上变得不可能。
菲利普·哈格伦德

Answers:


75

Haskell,11个字节

f=log
pxe=f

并以相反的顺序:

f=exp
gol=f

这没有“评论”的技巧。而是每个版本都定义一个附加的但未使用的功能(pxe/ gol)。


49
为+1 gol=f
Leif Willerts '16

2
这也是Julia中的有效解决方案。
Rainer P.

44

APL,3个字节

*⊣⍟

这是一列功能火车。一元* 的回报e^x,一元的回报ln(x)是返回其左参数的二进位函数。因此,*⊣⍟等同于just *,反之⍟⊣*等同于just


22

果冻,5 4个字节

是的,我的第一个果冻答案。:)通过命令行参数输入。

果冻有自己的代码页,因此每个字符都是一个字节。

eÆÆl

在线尝试!

反转:

lÆÆe

在线尝试!

说明

Æ对自己是一个无法识别的标记,所以它的作用一样换行。在任一情况下的装置的主要链路是唯一的ÆlÆe哪些是内置了2个字符exp()ln()和是通过对所述第一命令行参数执行默认。


9

Javascript,18个字节

Math.log//pxe.htaM

您不需要它周围的return()或console.log()吗?
OldBunny2800 '02

2
@ OldBunny2800它求值一个函数,应该允许该函数。
尼尔

5
Math.ln||pxe.htaM可能也会起作用。
SuperJedi224 '16

@ SuperJedi224谢谢,这帮助我发现了答案中的错误!
尼尔

@Neil我什至都没有注意到
SuperJedi224 '16

7

认真地,5个字节

,_.e,

输入,ln,输出,然后在空堆栈上进行exp(不执行任何操作)和输入(由于输入已用尽,因此不执行任何操作)。在线尝试!

反转:

,e._,

在线尝试!


5

朱莉娅,7个字节

log#pxe

这是一个匿名函数。将其分配给变量以调用它。评估为内置logexp加注释。


1
相同的答案适用于R
Dason,

5

Mathematica,19个字节

1&#@pxE+0&0+Log@#&1

反转:

1&#@goL+0&0+Exp@#&1

高尔夫很有趣!Mathematica 没有行注释/隐式字符串结尾,因此我无法采用简单的方法。相反,我用的事实0 + x == x0 x == 0以及那1 x == x,不管是什么x啊!测试:

In[1]:= (1&#@pxE+0&0+Log@#&1)[x]

Out[1]= Log[x]

In[2]:= (1&#@goL+0&0+Exp@#&1)[x]

         x
Out[2]= E

4

Python2,73个字节

io:stdin / stdout

from math import*;print log(input())#))(tupni(pxe tnirp;*tropmi htam morf

逆:

from math import*;print exp(input())#))(tupni(gol tnirp;*tropmi htam morf

您可以使用__import__("math").来代替10个字符,而不是
TLW


3

Brachylog,3个字节

*₁≡

在线尝试!

最初,我曾希望使用~*,但是尽管*~计算e^x并成功忽略了结尾的波浪号,但~*对于所有整数输入均失败,并在大多数非整数输入上产生了浮点溢出。

转发:

       The output
  ≡    is
*₁     the natural logarithm of
       the input.

向后:

       The output is
  *    Euler's number to the power of
       the input
≡      passed through the identity predicate
 ₁     with an extraneous subscript.

这使用了身份谓词,因为尽管可以容忍结尾的波浪号,但不容许前导下标。(如果是这样,那么Brachylog答案将是*₁单独的,这只是自然对数的常规内置函数。)


2

Vitsy,5个字节

这是一个因错误而退出的程序。

EL^rE
E   E  Push java.lang.Math.E
 L     Push log_(top) (input) (ln(input))
  ^    Push (top)^(input)  (e^(input))
   r   Reverse the stack

该程序在堆栈上出现ln(input)的错误时退出。

在线尝试!(请注意,我已经放置N了可见的输出)

然后相反:

Er^LE

该程序在堆栈上出现e ^(input)的错误时退出。

在线尝试!


2

Fuzzy Octo鳄梨调味酱,7个字节

不竞争,FOG比挑战要新

EZO@pZE

这等效于FOG中的功能。假定输入在堆栈上。可以通过代码将其分配给函数"EZO@pZE""f"o,其中f您要分配的任何单字符名称。然后像其他命令一样使用它。范例:"EZO@pZE"'f'o^f

说明:

EZO@pZE
E       # Push E (2.718....)
 Z      # Reverse stack (it is now [e, input])
  O     # log(x, y) which is ln(input)
   @    # Exit. (implicit output) Nothing after this gets run.
    p   # x^y (power function)
     Z  # Reverse stack
      E # Push E.

反转:

EZp@OZE
E       # Push E (2.718....)
 Z      # Reverse stack (it is now [e, input])
  O     # x^y (power function)
   @    # Exit. (implicit output) Nothing after this gets run.
    p   # log(x, y) which is ln(input)
     Z  # Reverse stack
      E # Push E.


1

Pyth,12个字节

发现 ln(input())

.lQ) " Q1n.^

发现 e^input()

^.n1Q " )Ql.

空格会停止隐式打印字符串,每个版本都会对其进行计算,然后使用剩余字符创建一个字符串。

ln(x) 在这里模式

e^x 在这里模式



1

Jolf,9个字节

程序1:exp输入

amoj"jOma
a         print
 moj      e^j
    "jOma  the rest of the line is captured as a string; implicit printing is restricted.

程序2:ln输入

amOj"joma
a         print
 mOj      ln(j)
    "joma  the rest of the line is captured as a string; implicit printing is restricted.

作为不区分大小写的回文的加分点?在这里尝试!


1

J,8个字节

自然对数是^.,并且是指数的^。问题是,.只能修改有效的动词,否则会出现拼写错误。因此,我们不能在APL答案中使用左参数技巧,因为^.[^^[.^创建无效动词时,将其反转会导致错误。因此,我们必须使用注释;但是NB.太长了:(幸运的是,它们都以结尾.,所以就是这样。

对数:

^.NB.BN^

指数:

^NB.BN.^

您可以在线自己输入!



0

符文附魔,9字节

i'lA@Ae'i

在线尝试!

不敬虔的程序。@确保终止隐式入口点在左侧,之后的所有内容均未执行。我非常努力地重复使用'or A指令,但即使程序较大,也无济于事。多行程序所需的显式入口点实际上将其排除在外。

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.