Ters fonksiyon


31

Programlama işlevleri, uygulandıkları matematiksel işlevler gibi ters çevrilebilseydi, düzgün olmaz mıydı?

xHerhangi bir biçimde bir girdi alan, çıktı veren bir işlev (veya program) yazın ln(x).
Programın baytları, ilk baytın şimdiki son bayt olması için yeniden sıralandığında / tersine döndüğünde, bunun yerine xherhangi bir biçimde ve çıktıda bir girdi almalıdır e^x.

  • Cevabınız en az 3 doğru önemli rakamdan oluşmalıdır.
  • Yaklaşımlar gayet iyi, en az 3 doğru önemli rakama sahip oldukları sürece.
  • Kodunuz hem ileri hem de geri aynı programlama dilinde olmalıdır.

Diyelim ki bu program uygular ln(x):

abc你好

Sonra bu program uygulamak zorundadır e^x:

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

Float desteği olmayan bir dil kullanıyorsanız, altın yıldız.

Bu garip bir kod-golf biçimidir, bu yüzden en kısa program kazanır.


4
“Programlama işlevleri, uyguladıkları matematiksel işlev gibi, tersine çevrilebilirse düzgün olmaz mıydı?” Bazı diller (örneğin J ve Mathematica) bazı fonksiyonlar için bunu yapabilir.
Martin Ender

Ek olarak, K2 ?, sekant yöntemini kullanan, dyadik ve triadik olan "fonksiyon ters" aşırı yüklemesi yoluyla keyfi bir monadik saf fonksiyon için yaklaşık bir tersine yaklaşabilir .
JohnE,

1
"en az 3 doğru önemli rakam" - hangi aralıkta?
TLW

4
Şimdi çok geç olduğunu fark ettim, ancak yorumların yasaklanmasına rağmen bunun gerçekten güzel bir zorluk olacağını düşünüyorum.
Alex A.

Aslında bu zorlukla @AlexA ile karşılaştığımda bunu düşündüm. Ancak yazı yazarken unuttum: P Ayrıca java, c ++ vb. gibi "normal" dilleri de temelde imkansız hale getirirdi.
Filip Haglund

Yanıtlar:


75

Haskell, 11 bayt

f=log
pxe=f

ve ters sırada:

f=exp
gol=f

Bu "yorum" numarası olmadan çalışır. Bunun yerine her sürüm ek, ancak kullanılmayan bir işlev ( pxe/ gol) tanımlar .


49
İçin +1 gol=f.
Leif Willerts

2
Bu aynı zamanda Julia'da geçerli bir çözümdür.
Rainer P.

44

APL, 3 bayt

*⊣⍟

Bu bir fonksiyon treni. Monadic * döner e^x, monadic döner ln(x). sol argümanını döndüren ikili bir işlevdir. Böylece, *⊣⍟sadece eşittir *ve tam tersi ⍟⊣*de eşittir .


22

Jöle, 5 4 bayt

Yay, ilk Jelly cevabım. :) Giriş, komut satırı argümanı ile yapılır.

Jelly'in kendi kod sayfası vardır, böylece her karakter bir bayttır.

eÆÆl

Çevrimiçi deneyin!

ters:

lÆÆe

Çevrimiçi deneyin!

açıklama

Tek Æbaşına tanınmayan bir belirteçtir, bu yüzden bir satır yarışı gibi davranır. Bu, her iki durumda da ana bağlantının yalnızca Ælveya Æehangisinin yerleşik olduğu 2 karakterli exp()veya ln()varsayılan olarak ilk komut satırı argümanında gerçekleştirildiği anlamına gelir.


9

Javascript, 18 bayt

Math.log//pxe.htaM

Etrafında bir return () veya console.log () kullanmanıza gerek yok mu?
OldBunny2800

2
@ OldBunny2800 İzin verilen bir işlevi değerlendirir.
Neil

5
Math.ln||pxe.htaMmuhtemelen de çalışacak.
SuperJedi224

@ SuperJedi224 Teşekkürler, bu benim cevabımdaki hatayı tespit etmeme yardımcı oldu!
Neil

@Neil Bunu farketmemiştim bile
SuperJedi224


5

Julia, 7 bayt

log#pxe

Bu anonim bir işlevdir. Aramak için bir değişkene atayın. Yerleşiklere logveya expartı bir yorum için değerlendirir .


1
R
Dason

5

Mathematica, 19 bayt

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

ters:

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

Bu golf için ilginçti! Mathematica vardır hayır ben basit yoldan değil bu yüzden, satır yorum / örtük dize sonlar. Bunun yerine, gerçeği kullanılan 0 + x == x, 0 x == 0ve bu 1 x == xne olursa olsun xolduğunu! Test yapmak:

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 bayt

io: stdin / stdout

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

ters:

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

__import__("math").
TLW

3

CJam, 11 bayt

rdmle#eemdr

Burada test et.

ters:

rdmee#elmdr

Burada test et.

Temel olarak OP'nin Python yanıtıyla aynı yorum numarası. e#bir yorum başlatır. rdgirişi okur ve mlveya melogaritmayı veya üsteli hesaplar.


3

Brachylog , 3 bayt

*₁≡

Çevrimiçi deneyin!

Başlangıçta, kullanmayı ummuştum ~*, ancak izleyen tilde *~hesaplar e^xve başarılı bir şekilde görmezden gelse de, ~*tüm tamsayı girişleri için başarısız olur ve tamsayı olmayan çoğu giriş üzerinde bir taşma dalgalanmasına neden olur.

Forvetler:

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

Geriye doğru:

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

Bu, kimlik belirleyicisini kullanır, çünkü izleyen tillerler hoş görünse de, önde gelen aboneler değildir. (Onlar olsaydı, Brachylog cevabı *₁yalnız olurdu , bu da sadece doğal kütük için normal bir yapı olurdu .)


2

Vitsy, 5 bayt

Bu bir hata ile çıkan bir programdır.

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

Bu program yığında ln (giriş) olan bir hata ile çıkar.

Çevrimiçi deneyin! ( Ngözle görünür bir çıktıya sahip olduğumu unutmayın )

O zaman tersi olur:

Er^LE

Bu program yığında e ^ (giriş) olan bir hata ile çıkar.

Çevrimiçi deneyin!


2

Bulanık Octo Guacamole, 7 bayt

rekabet etmeyen FOG mücadeleden daha yeni

EZO@pZE

Bu, FOG içindeki bir fonksiyonun karşılığıdır. Girişin yığında olduğunu varsayar. Bu, bir işleve kodla atanabilir "EZO@pZE""f"o, fatamak istediğiniz herhangi bir tek char adı. Sonra başka bir komut gibi kullanın. Örnek: "EZO@pZE"'f'o^f.

Açıklama:

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.

ters:

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 bayt

Buluntular ln(input())

.lQ) " Q1n.^

Buluntular e^input()

^.n1Q " )Ql.

Boşluklar, dizelerin örtük olarak yazdırılmasını durdurur, her sürüm onu ​​hesaplar ve sonra kalan karakterlerle bir dize oluşturur.

ln(x) burada modu

e^x burada modu



1

Jolf, 9 bayt

Program 1: expgiriş

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

Program 2: lngiriş

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

Büyük / küçük harfe duyarlı palindrom olmanın avantajı? Burada dene!


1

J, 8 bayt

Doğal logaritma ^.ve üsteldir ^. Sorun, .yalnızca geçerli bir fiili değiştirebilir, aksi takdirde bir yazım hatası ortaya çıkar. Bu nedenle, APL'nin cevabındaki sol argüman numarasını kullanamayız, çünkü ^.[^tersine çevrildiğinde hataya neden olur, ^[.^geçersiz bir fiil oluşturur. Yani yorumları kullanmalıyız; ama NB.çok uzun :( Neyse ki, her ikisi de biter ., yani & ldots; işte bu.

Logaritma:

^.NB.BN^

üstel:

^NB.BN.^

Onları çevrimiçi olarak kendiniz girebilirsiniz !



0

Runik Büyüleri , 9 bayt

i'lA@Ae'i

Çevrimiçi deneyin!

Aşırı derecede ilginç olmayan bir program. @soldaki zımni giriş noktasının sonlandırılmasını sağlar, sonrasında her şey beklenmedik şekilde olur. Daha fazla program kullanmak için, 'ya da Akomutları tekrar kullanmak için çok çaba sarf ettim ama boşuna. Çok hatlı programlar için gereken açık giriş noktası, esasen onu engellemektedir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.