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


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.