Fonction inverse


31

Ne serait-ce pas bien si les fonctions de programmation pouvaient être inversées, tout comme la fonction mathématique qu'elles implémentent?

Écrivez une fonction (ou un programme) qui prend une entrée xsous n'importe quelle forme, qui sort ln(x).
Lorsque les octets du programme sont réorganisés / inversés de sorte que le premier octet soit maintenant le dernier octet, il doit prendre une entrée xsous n'importe quelle forme et sortir à la e^xplace.

  • Votre réponse doit contenir au moins 3 chiffres significatifs corrects.
  • Les approximations sont bonnes, tant qu'elles ont au moins 3 chiffres significatifs corrects.
  • Votre code doit être dans le même langage de programmation en avant et en arrière.

Disons que ce programme implémente ln(x):

abc你好

Ensuite, ce programme doit implémenter e^x:

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

Étoile d'or si vous utilisez une langue sans support flottant.

C'est une forme étrange de golf de code, donc le programme le plus court l'emporte.


4
"Ce ne serait pas bien si les fonctions de programmation pouvaient être inversées, tout comme la fonction mathématique qu'elles implémentent?" Certains langages (par exemple J et Mathematica) peuvent en fait le faire pour certaines fonctions.
Martin Ender

De plus, K2 pourrait approximer un inverse pour une fonction pure monadique arbitraire via sa surcharge "fonction inverse" de dyadique et triadique ?, qui a utilisé la méthode sécante.
JohnE

1
"au moins 3 chiffres significatifs corrects" - sur quelle plage?
TLW

4
Je me rends compte qu'il est beaucoup trop tard maintenant, mais je pense que cela aurait été un très beau défi si les commentaires avaient été refusés.
Alex A.

En fait, j'y ai pensé quand j'ai proposé ce défi @AlexA. mais je l'ai oublié lors de la rédaction de l'article: P Cela aurait également rendu les langages "normaux" comme java, c ++ etc fondamentalement impossibles.
Filip Haglund

Réponses:


75

Haskell, 11 octets

f=log
pxe=f

et dans l'ordre inverse:

f=exp
gol=f

Cela fonctionne sans l'astuce "commenter". Au lieu de cela, chaque version définit une fonction supplémentaire, mais inutilisée ( pxe/ gol).


49
+1 pour gol=f.
Leif Willerts

2
C'est également une solution valable dans Julia.
Rainer P.

44

APL, 3 octets

*⊣⍟

Ceci est un train de fonctions. Monadiques * retours e^x, monades retours ln(x). est une fonction dyadique qui renvoie son argument de gauche. Ainsi, *⊣⍟équivaut à juste *et l'inverse ⍟⊣*équivaut à juste .


22

Gelée, 5 4 octets

Oui, ma première réponse Jelly. :) L'entrée se fait via un argument de ligne de commande.

Jelly a sa propre page de codes, donc chaque caractère est d'un octet.

eÆÆl

Essayez-le en ligne!

Renversé:

lÆÆe

Essayez-le en ligne!

Explication

Le Æseul est un jeton non reconnu, il agit donc de la même manière qu'un saut de ligne. Cela signifie que dans les deux cas, le lien principal est uniquement Ælou Æequi est le caractère intégré à 2 caractères pour exp()ou ln()et est par défaut effectué sur le premier argument de ligne de commande.


9

Javascript, 18 octets

Math.log//pxe.htaM

N'avez-vous pas besoin d'un retour () ou d'une console.log () autour?
OldBunny2800

2
@ OldBunny2800 Il évalue une fonction, qui devrait être autorisée.
Neil

5
Math.ln||pxe.htaMfonctionnera probablement aussi.
SuperJedi224

@ SuperJedi224 Merci, cela m'a aidé à repérer l'erreur dans ma réponse!
Neil

@Neil Je n'avais même pas remarqué ça
SuperJedi224


5

Julia, 7 octets

log#pxe

Il s'agit d'une fonction anonyme. Affectez-le à une variable pour l'appeler. Évalue les fonctions intégrées logou expajoute un commentaire.


1
La même réponse fonctionne pour R
Dason

5

Mathematica, 19 octets

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

Renversé:

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

C'était intéressant pour le golf! Mathematica n'a pas de commentaires de ligne / terminaisons de chaîne implicites, donc je ne pouvais pas prendre la route simple. Au lieu de cela, je le fait que 0 + x == x, 0 x == 0et que 1 x == x, peu importe ce qui xest! Essai:

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 octets

io: stdin / stdout

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

inverse:

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

Vous pouvez raser 10 caractères en utilisant __import__("math").au lieu de
TLW

3

CJam, 11 octets

rdmle#eemdr

Testez-le ici.

Renversé:

rdmee#elmdr

Testez-le ici.

Fondamentalement, la même astuce de commentaire que la réponse Python de l'OP. e#commence un commentaire. rdlit l'entrée et mlou mecalcule le logarithme ou l'exponentielle.


3

Brachylog , 3 octets

*₁≡

Essayez-le en ligne!

Initialement, j'avais espéré l'utiliser ~*, mais bien que *~calcule e^xet ignore avec succès le tilde de fin, ~*échoue pour toutes les entrées entières et frappe un débordement flottant sur la plupart des entrées non entières.

Attaquants:

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

En arrière:

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

Cela utilise le prédicat d'identité car, bien que les tildes de fin soient tolérés, les indices principaux ne le sont pas. (S'ils l'étaient, la réponse Brachylog serait *₁seule, ce qui est juste la fonction normale pour le journal naturel.)


2

Vitsy, 5 octets

Il s'agit d'un programme qui se termine en cas d'erreur.

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

Ce programme se termine sur une erreur avec ln (entrée) sur la pile.

Essayez-le en ligne! (notez que j'ai mis Npour avoir une sortie visible)

Alors c'est l'inverse:

Er^LE

Ce programme se termine sur une erreur avec e ^ (entrée) sur la pile.

Essayez-le en ligne!


2

Octo Guacamole flou, 7 octets

non compétitif, FOG est plus récent que le défi

EZO@pZE

C'est l'équivalent d'une fonction dans FOG. Il suppose que l'entrée se trouve sur la pile. Cela peut être attribué à une fonction par le code "EZO@pZE""f"o, où fest le nom à caractère unique que vous souhaitez attribuer. Ensuite, utilisez-le comme n'importe quelle autre commande. Exemple: "EZO@pZE"'f'o^f.

Explication:

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.

Renversé:

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 octets

Trouve ln(input())

.lQ) " Q1n.^

Trouve e^input()

^.n1Q " )Ql.

Les espaces arrêtent l'impression implicite des chaînes, chaque version la calcule puis crée une chaîne avec les caractères restants.

ln(x) mode ici

e^x mode ici



1

Jolf, 9 octets

Programme 1: expd'entrée

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

Programme 2: lnd'entrée

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

Des points bonus pour être un palindrome insensible à la casse? Essayez-le ici!


1

J, 8 octets

Le logarithme népérien est ^.exponentiel ^. Le problème est .que vous ne pouvez modifier qu'un verbe valide, sinon une erreur d'orthographe se produira. Ainsi, nous ne pouvons pas utiliser l'astuce d'argument de gauche dans la réponse APL, ^.[^car elle provoquerait une erreur lorsqu'elle est inversée, car elle ^[.^crée un verbe invalide. Donc, nous devons utiliser des commentaires; mais NB.c'est si long :( Heureusement, ils se terminent tous les deux par. , alors & ldots; il y a ça.

Logarithme:

^.NB.BN^

Exponentiel:

^NB.BN.^

Vous pouvez les saisir vous-même en ligne !



0

Enchantements runiques , 9 octets

i'lA@Ae'i

Essayez-le en ligne!

Un programme impie et inintéressant. @assure la terminaison du point d'entrée implicite à gauche, tout ce qui suit n'est pas exécuté. J'ai vraiment essayé de réutiliser les instructions 'or A, mais en vain, même avec des programmes de plus grande taille. Le point d'entrée explicite requis pour les programmes multilignes l'exclut essentiellement.

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.