Não seria legal se as funções de programação pudessem ser invertidas, assim como a função matemática que elas implementam?
Escreva uma função (ou programa) que receba uma entrada x
de qualquer forma, que saia ln(x)
.
Quando os bytes do programa são reordenados / revertidos para que o primeiro byte agora seja o último, ele deve receber uma entrada x
em qualquer formato e saída e^x
.
- Sua resposta deve ter pelo menos três valores significativos corretos.
- As aproximações são boas, desde que tenham pelo menos três valores significativos corretos.
- Seu código deve estar na mesma linguagem de programação para frente e para trás.
Digamos que este programa implemente ln(x)
:
abc你好
Então este programa precisa implementar e^x
:
\xBD\xA5\xE5\xA0\xBD\xE4cba
Estrela de ouro se você usar um idioma sem suporte de flutuação.
Essa é uma forma estranha de código-golfe, então o programa mais curto vence.
code-golf
arithmetic
source-layout
Filip Haglund
fonte
fonte
?
, que usava o método secante.Respostas:
Haskell, 11 bytes
e na ordem inversa:
Isso funciona sem o truque "comentar". Em vez disso, cada versão define uma função adicional, mas não utilizada (
pxe
/gol
).fonte
gol=f
.APL, 3 bytes
Este é um trem funcional. Monádicas
*
retornose^x
, monádicas⍟
retornosln(x)
.⊣
é uma função diádica que retorna seu argumento esquerdo. Assim,*⊣⍟
é equivalente a apenas*
, e o inverso⍟⊣*
é equivalente a apenas⍟
.fonte
Geléia,
54 bytesSim, minha primeira resposta Jelly. :) A entrada é via argumento da linha de comando.
O Jelly tem sua própria página de código, portanto, cada caractere tem um byte.
Experimente online!
Invertida:
Experimente online!
Explicação
Por
Æ
si só, é um token não reconhecido e, portanto, age da mesma forma que um avanço de linha. Isso significa que, em ambos os casos, o link principal é apenasÆl
ouÆe
qual é o caractere de 2 caracteres incorporadoexp()
ouln()
é executado por padrão no primeiro argumento da linha de comando.fonte
Javascript, 18 bytes
fonte
Math.ln||pxe.htaM
will probably also work.Seriously, 5 bytes
Input, ln, output, then exp on an empty stack (does nothing), and input (does nothing since input is exhausted). Try it online!
Reversed:
Try it online!
fonte
Julia, 7 bytes
This is an anonymous function. Assign it to a variable to call it. Evaluates to builtins
log
orexp
plus a comment.fonte
Mathematica, 19 bytes
Reversed:
This was interesting to golf! Mathematica has no line comments / implicit string endings, so I couldn't take the simple route. Instead, I used the fact that
0 + x == x
,0 x == 0
, and that1 x == x
, no matter whatx
is! Testing:fonte
Python2, 73 bytes
io: stdin/stdout
inverse:
fonte
__import__("math").
instead ofCJam, 11 bytes
Test it here.
Reversed:
Test it here.
Basically the same comment-trick as the OP's Python answer.
e#
starts a comment.rd
reads the input andml
orme
computes the logarithm or exponential.fonte
Brachylog, 3 bytes
Try it online!
Initially, I had hoped to use
~*
, but although*~
computese^x
and successfully ignores the trailing tilde,~*
fails for all integer inputs and hits a float overflow on most non-integer inputs.Forwards:
Backwards:
This uses the identity predicate because, although trailing tildes are tolerated, leading subscripts are not. (If they were, the Brachylog answer would be
*₁
alone, which is just the normal builtin for natural log.)fonte
Vitsy, 5 bytes
This is a program that exits on an error.
This program exits on an error with ln(input) on the stack.
Try it online! (note that I have put
N
to have visible output)Then it's inverse:
This program exits on an error with e^(input) on the stack.
Try it online!
fonte
Fuzzy Octo Guacamole, 7 bytes
non-competing, FOG is newer than the challenge
This is the equivalent of a function in FOG. It assumes the input is on the stack. This can be assigned to a function by the code
"EZO@pZE""f"o
, wheref
is any single-char name you want to assign. Then use it like any other command. Example:"EZO@pZE"'f'o^f
.Explanation:
Reversed:
fonte
Matl, 5 bytes
Yl
: logZe
: exp%
: commentfonte
Pyth, 12 bytes
Finds
ln(input())
Finds
e^input()
Spaces stop implicit printing of strings, each version calculates it then creates a string with the remaining characters.
ln(x)
mode heree^x
mode herefonte
𝔼𝕊𝕄𝕚𝕟, 8 chars / 10 bytes
Try it here (Firefox only).Try reverse here (Firefox only).
Just 2 builtins separated by a comment.
fonte
Jolf, 9 bytes
Program 1:
exp
of inputProgram 2:
ln
of inputBonus points for being a case-insensitive palindrome? Try it here!
fonte
J, 8 bytes
The natural logarithm is
^.
, and exponential^
. The problem is,.
can only modify a valid verb, otherwise, a spelling error will occur. Thus, we can't use the left argument trick in the APL answer, becuase^.[^
would cause an error when reversed, as^[.^
creates an invalid verb. So, we must use comments; butNB.
is so long :( Fortunately, they both end with.
, so&ldots; there's that.Logarithm:
Exponential:
You can enter them for yourself online!
fonte
Java 8,
19818230 bytesTry it online.
and reversed:
Try it online.
Uses the comment trick (
//
) with built-ins forMath.log
andMath.exp
.fonte
Runic Enchantments, 9 bytes
Try it online!
An ungodly uninteresting program.
@
insures termination of the implied entry point at the left, everything after is unexecuted. I tried really hard to re-use the'
orA
instructions, but to no avail, even at larger program sizes. The required explicit entry point for multi-line programs essentially precludes it.fonte