Funkcja odwrotna


31

Czy nie byłoby fajnie, gdyby funkcje programowania można było odwrócić, tak jak zaimplementowane funkcje matematyczne?

Napisz funkcję (lub program), która przyjmuje jedno dane wejściowe xw dowolnej formie i generuje dane wyjściowe ln(x).
Kiedy bajty programu są ponownie uporządkowane / odwrócone, tak że pierwszy bajt jest teraz ostatnim bajtem, powinien zamiast tego przyjąć jedno wejście xw dowolnej formie i dane wyjściowe e^x.

  • Twoja odpowiedź musi zawierać co najmniej 3 prawidłowe znaczące liczby.
  • Przybliżenia są w porządku, o ile mają co najmniej 3 prawidłowe znaczące liczby.
  • Twój kod musi być w tym samym języku programowania, zarówno do przodu, jak i do tyłu.

Powiedzmy, że ten program implementuje ln(x):

abc你好

Następnie ten program musi zaimplementować e^x:

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

Złota gwiazda, jeśli używasz języka bez obsługi pływaka.

To dziwna forma golfa kodowego, więc wygrywa najkrótszy program.


4
„Czy nie byłoby fajnie, gdyby funkcje programowania można było odwrócić, tak jak funkcje matematyczne, które implementują?” Niektóre języki (np. J i Mathematica) mogą to zrobić w przypadku niektórych funkcji.
Martin Ender,

Dodatkowo, K2 może aproksymować odwrotność arbitralnej czystej funkcji monadycznej poprzez swoje „przeciążenie funkcji odwrotnej” diadycznej i triadowej ?, która wykorzystuje metodę sieczną.
JohnE

1
„co najmniej 3 prawidłowe liczby znaczące” - w jakim zakresie?
TLW

4
Zdaję sobie sprawę, że jest już o wiele za późno, ale myślę, że byłoby to naprawdę miłe wyzwanie, gdyby komentarze zostały odrzucone.
Alex A.

Pomyślałem o tym, kiedy wymyśliłem to wyzwanie @AlexA. ale zapomniałem o tym podczas pisania postu: P Także to uniemożliwiłoby „normalne” języki, takie jak java, c ++ itp.
Filip Haglund,

Odpowiedzi:


75

Haskell, 11 bajtów

f=log
pxe=f

i w odwrotnej kolejności:

f=exp
gol=f

Działa to bez sztuczki „komentowania”. Zamiast tego każda wersja definiuje dodatkową, ale nieużywaną funkcję ( pxe/ gol).


49
+1 dla gol=f.
Leif Willerts

2
Jest to również prawidłowe rozwiązanie w Julii.
Rainer P.

44

APL, 3 bajty

*⊣⍟

To jest pociąg funkcyjny. Monadyczne * zwroty e^x, monadyczne zwroty ln(x). jest funkcją dynamiczną, która zwraca swój lewy argument. Zatem *⊣⍟jest równoważne z just *, a odwrotność ⍟⊣*jest równoważna z just .


22

Galaretka, 5 4 bajtów

Tak, moja pierwsza galaretka odpowiedź. :) Dane wejściowe są przez argument wiersza poleceń.

Galaretka ma własną stronę kodową, więc każdy znak ma jeden bajt.

eÆÆl

Wypróbuj online!

Wywrócony:

lÆÆe

Wypróbuj online!

Wyjaśnienie

Sam Æw sobie jest nierozpoznanym tokenem, więc działa tak samo jak linia. Oznacza to, że w obu przypadkach główny link jest tylko Ællub Æektóry jest wbudowanym 2-znakowym znakiem dla exp()lub ln()i jest domyślnie wykonywany dla pierwszego argumentu wiersza poleceń.


9

JavaScript, 18 bajtów

Math.log//pxe.htaM

Czy nie potrzebujesz wokół niego return () lub console.log ()?
OldBunny2800

2
@ OldBunny2800 Ocenia funkcję, która powinna być dopuszczalna.
Neil

5
Math.ln||pxe.htaMprawdopodobnie również zadziała.
SuperJedi224,

@ SuperJedi224 Dzięki, dzięki temu zauważyłem błąd w mojej odpowiedzi!
Neil,

@Neil Nawet tego nie zauważyłem
SuperJedi224,


5

Julia, 7 bajtów

log#pxe

To anonimowa funkcja. Przypisz ją do zmiennej, aby ją wywołać. Ocenia wbudowane loglubexp plus komentarz.


1
Ta sama odpowiedź działa dla R
Dason

5

Mathematica, 19 bajtów

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

Wywrócony:

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

To było interesujące dla golfa! Mathematica nie ma komentarzy do linii / niejawnych zakończeń ciągów, więc nie mogłem wybrać prostej drogi. Zamiast tego wykorzystał fakt 0 + x == x, 0 x == 0i to 1 x == xbez względu na to, co xjest! Testowanie:

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 bajty

io: stdin / stdout

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

odwrotność:

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

Możesz ogolić 10 znaków, używając __import__("math").zamiast
TLW

3

CJam, 11 bajtów

rdmle#eemdr

Sprawdź to tutaj.

Wywrócony:

rdmee#elmdr

Sprawdź to tutaj.

Zasadniczo taka sama sztuczka związana z komentowaniem jak w odpowiedzi na Python w OP. e#zaczyna komentarz. rdodczytuje dane wejściowe i mlczy meoblicza logarytm lub wykładniczy.


3

Brachylog , 3 bajty

*₁≡

Wypróbuj online!

Początkowo miałem nadzieję użyć ~*, ale chociaż *~oblicza e^xi z powodzeniem ignoruje tyldy tyldy, ~*nie udaje się we wszystkich wejściowych liczbach całkowitych i napotyka przepełnienie zmiennoprzecinkowe na większości danych niecałkowitych.

Naprzód:

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

Wstecz:

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

Używa predykatu tożsamości, ponieważ chociaż tyldy tyldy są tolerowane, wiodące indeksy dolne nie są. (Gdyby tak było, odpowiedź Brachylog byłaby *₁sama, co jest zwykłym wbudowanym logiem naturalnym).


2

Vitsy, 5 bajtów

Jest to program, który kończy działanie po błędzie.

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

Ten program kończy działanie z błędem z ln (wejściem) na stosie.

Wypróbuj online! (zauważ, że umieściłem, Naby mieć widoczny wynik)

To jest odwrotne:

Er^LE

Ten program kończy działanie z błędem z e ^ (wejście) na stosie.

Wypróbuj online!


2

Rozmyte Octo Guacamole, 7 bajtów

niekonkurujący, FOG jest nowszy niż wyzwanie

EZO@pZE

Jest to odpowiednik funkcji w FOG. Zakłada, że ​​dane wejściowe znajdują się na stosie. Można to przypisać do funkcji za pomocą kodu "EZO@pZE""f"o, gdzie fjest dowolna nazwa jednoznakowa, którą chcesz przypisać. Następnie używaj go jak każdego innego polecenia. Przykład: "EZO@pZE"'f'o^f.

Wyjaśnienie:

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.

Wywrócony:

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 bajtów

Znaleziska ln(input())

.lQ) " Q1n.^

Znaleziska e^input()

^.n1Q " )Ql.

Spacje zatrzymują niejawne drukowanie ciągów, każda wersja oblicza je, a następnie tworzy ciąg z pozostałymi znakami.

ln(x) tryb tutaj

e^x tryb tutaj



1

Jolf, 9 bajtów

Program 1: expwejścia

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

Program 2: lnwejścia

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

Punkty bonusowe za bycie palindromem bez rozróżniania wielkości liter? Wypróbuj tutaj!


1

J, 8 bajtów

Logarytm naturalny jest ^.wykładniczy ^. Problem polega na tym, że .można modyfikować tylko prawidłowy czasownik, w przeciwnym razie wystąpi błąd pisowni. Dlatego nie możemy użyć lewy argument lewy w odpowiedzi APL, ponieważ ^.[^spowodowałby błąd po odwróceniu, ponieważ ^[.^tworzy niepoprawny czasownik. Musimy więc używać komentarzy; ale NB.jest tak długi :( Na szczęście oba kończą się na ., więc & ldots; jest to.

Logarytm:

^.NB.BN^

Wykładniczy:

^NB.BN.^

Możesz wprowadzić je samemu online !



0

Runiczne Zaklęcia , 9 bajtów

i'lA@Ae'i

Wypróbuj online!

Bezbożny, nieciekawy program. @zapewnia zakończenie domniemanego punktu wejścia po lewej stronie, wszystko po nim jest niewykonane. Bardzo starałem się ponownie użyć instrukcji 'lub A, ale bezskutecznie, nawet przy większych programach. Wymagany wyraźny punkt wejścia dla programów wieloliniowych zasadniczo go wyklucza.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.