Зворотна функція


31

Чи не було б акуратним, якби функції програмування можна було перевернути, як і математичну функцію, яку вони реалізують?

Напишіть функцію (або програму), яка приймає один вхід xу будь-якій формі, яка виводить ln(x).
Коли байти програми переупорядковані / перетворені так, що перший байт зараз є останнім байтом, він повинен приймати один вхід xу будь-якій формі та виводити e^xнатомість.

  • У вашій відповіді повинно бути не менше 3 правильних значущих цифр.
  • Наближення чудово, якщо вони мають принаймні 3 правильні значущі цифри.
  • Ваш код повинен бути однаковою мовою програмування і вперед, і назад.

Скажімо, ця програма реалізує ln(x):

abc你好

Тоді ця програма повинна реалізувати e^x:

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

Золота зірка, якщо ви використовуєте мову без плаваючої підтримки.

Це дивна форма коду-гольфу, тому виграє найкоротша програма.


4
"Чи не було б акуратним, якби функції програмування могли бути перевернуті, як і математична функція, яку вони реалізують?" Деякі мови (наприклад, J та Mathematica) насправді можуть це робити для деяких функцій.
Мартін Ендер

Крім того, K2 може наблизити обернену для довільної монадичної чистої функції за допомогою її "зворотної функції" перевантаження діадичної та тріадичної ?, яка використовувала метод сеансу.
JohnE

1
"принаймні 3 правильних значущих цифри" - за який діапазон?
TLW

4
Я усвідомлюю, що зараз вже занадто пізно, але я думаю, що це було б дуже гарним завданням, якби коментарі були заборонені.
Алекс А.

Я насправді про це думав, коли придумав цей виклик @AlexA. але забув про це під час написання публікації: P Також це зробило б "нормальні" мови, такі як java, c ++ і т. д. взагалі неможливими.
Філіп Хаглунд

Відповіді:


75

Haskell, 11 байт

f=log
pxe=f

і в зворотному порядку:

f=exp
gol=f

Це працює без хитрості "коментар". Натомість кожна версія визначає додаткову, але невикористану функцію ( pxe/ gol).


49
+1 для gol=f.
Leif Willerts

2
Це також дійсне рішення у Джулії.
Райнер П.

44

APL, 3 байти

*⊣⍟

Це функціональний потяг. Монадичний * повертається e^x, монадичний повертається ln(x). - діадична функція, яка повертає лівий аргумент. Таким чином, *⊣⍟рівнозначно справедливому *, а зворотний ⍟⊣*рівнозначний справедливому .


22

Желе, 5 4 байти

Так, моя перша відповідь на желе. :) Введення здійснюється через аргумент командного рядка.

У Jelly є своя сторінка коду, тому кожен символ - один байт.

eÆÆl

Спробуйте в Інтернеті!

Відмінено:

lÆÆe

Спробуйте в Інтернеті!

Пояснення

Сам Æпо собі є невпізнаним символом, тому він діє так само, як і передача ліній. Це означає, що в будь-якому випадку головне посилання є лише Ælабо Æeє вбудованим двома символами для 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
Ця

5

Математика, 19 байт

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

Відмінено:

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

Це було цікаво гольфу! У Mathematica немає коментарів до рядків / неявних рядкових закінчень, тож я не зміг прийняти простий маршрут. Замість цього я використовував той факт , що 0 + x == x, 0 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

Брахілог , 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.

Для цього використовується предикат ідентичності, оскільки, хоча тривалі тильди є толерантними, провідні підписки не є. (Якби вони були, відповідь Брахілога була б *₁самотньою, що є просто нормальним вбудованим для природного журналу.)


2

Віци, 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 ^ (вхід) у стеці.

Спробуйте в Інтернеті!


2

Нечітка Окто Гуакамоле, 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

Джольф, 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, тому ^.[^що becuase призведе до помилки при звороті, оскільки ^[.^створюється недійсне дієслово. Отже, ми повинні використовувати коментарі; але NB.так довго :( На щастя, вони обоє закінчуються ., так & ldots; є це.

Логарифм:

^.NB.BN^

Експоненціальна:

^NB.BN.^

Ви можете ввести їх для себе в Інтернеті !



0

Рунічні чари , 9 байт

i'lA@Ae'i

Спробуйте в Інтернеті!

Нечесна нецікава програма. @гарантує припинення мається на увазі точки входу зліва, все після цього не виконується. Я дуже намагався повторно використовувати інструкції 'або Aінструкції, але безрезультатно, навіть при великих розмірах програми. Необхідна чітка точка входу для багаторядкових програм, по суті, виключає її.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.