逆関数


31

プログラミング関数を、それらが実装する数学関数のように逆にすることができれば、きれいではないでしょうか?

x任意の形式で1つの入力を受け取り、出力する関数(またはプログラム)を記述しますln(x)
最初のバイトが最後のバイトになるようにプログラムのバイトが並べ替えられたり反転さxれたりする場合、任意の形式の入力を1つ受け取り、e^x代わりに出力する必要があります。

  • 回答には、少なくとも3つの有効数字が必要です。
  • 少なくとも3つの正しい有効数字がある限り、近似は問題ありません。
  • コードは、前方と後方の両方で同じプログラミング言語である必要があります。

このプログラムが実装するとしましょうln(x)

abc你好

次に、このプログラムを実装する必要がありますe^x

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

フロートをサポートしない言語を使用している場合は、ゴールドスター。

これは奇妙な形のコードゴルフなので、最短のプログラムが勝ちます。


4
「プログラミング関数を、それらが実装する数学関数のように逆にすることができたら、きれいではないでしょうか?」一部の言語(JやMathematicaなど)では、一部の関数に対して実際にこれを実行できます。
マーティンエンダー

さらに、K2は?、セカント法を使用したdyadicおよびtriadicの「関数逆」オーバーロードを介して、任意の単項純関数の逆を近似できます。
-JohnE

1
「少なくとも3つの正しい有効数字」-どの範囲で?
TLW

4
今では遅すぎることはわかっていますが、コメントが許可されていなければ、これは本当に素晴らしい挑戦だったと思います。
アレックスA.

この挑戦を思いついたとき、私は実際にそのことを考えました@AlexA。しかし、記事を書いている間、それを忘れていました:Pまた、それは、java、c ++などのような「通常の」言語を基本的に不可能にしました。
フィリップハグランド

回答:


75

Haskell、11バイト

f=log
pxe=f

そして逆順:

f=exp
gol=f

これは「コメント」トリックなしで機能します。代わりに、各バージョンは追加の未使用の関数(pxe/ gol)を定義します。


49
+1 gol=f
レイフウィラーツ

2
これもジュリアの有効なソリューションです。
レイナーP.

44

APL、3バイト

*⊣⍟

これは機能トレインです。モナド* が戻りe^x、モナドが戻りますln(x)左引数を返す二項関数です。したがって、*⊣⍟はjustと同等*であり、逆⍟⊣*はjustと同等です。


22

ゼリー、5 4バイト

イェー、私の最初のゼリーの答え。:)入力はコマンドライン引数を介して行われます。

Jellyには独自のコードページがあるため、各文字は1バイトです。

eÆÆl

オンラインでお試しください!

逆に:

lÆÆe

オンラインでお試しください!

説明

Æ自分自身では認識できないトークンなので、改行と同じように動作します。手段は、いずれの場合には、メインリンクが唯一であることÆlÆeその2文字がために、内蔵されexp()たりln()、デフォルトでは最初のコマンドライン引数で実行されます。


9

Javascript、18バイト

Math.log//pxe.htaM

return()またはconsole.log()は必要ありませんか?
OldBunny2800

2
@ OldBunny2800関数に評価されますが、これは許容されるべきです。
ニール

5
Math.ln||pxe.htaMおそらくも動作します。
SuperJedi224

@ SuperJedi224おかげで、答えのエラーを見つけることができました!
ニール

@Neil私も気づかなかった
-SuperJedi224


5

ジュリア、7バイト

log#pxe

これは匿名関数です。それを呼び出す変数に割り当てます。組み込み関数logまたはexpコメントに評価します。


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

あなたは使用してオフ10個の文字を剃ることができます__import__("math").代わりに
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.

後続のチルダは許容されますが、先頭の添え字は許容されないため、これはID述語を使用します。(もしそうなら、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

ファジーオクトワカモレ、7バイト

非競合、FOGはチャレンジよりも新しい

EZO@pZE

これは、FOGの関数と同等です。入力がスタック上にあると想定しています。これはcodeによって関数に割り当てることができます"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

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

オンラインでお試しください!

信じられないほど面白くないプログラム。@左側の暗黙のエントリポイントの終了を保証します。その後はすべて実行されません。'またはA命令を再利用するために一生懸命努力しましたが、プログラムのサイズが大きくても役に立たなかった。複数行プログラムに必要な明示的なエントリポイントは、本質的にそれを排除します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.