Wäre es nicht schön, wenn Programmierfunktionen umgekehrt werden könnten, genau wie die mathematische Funktion, die sie implementieren?
Schreiben Sie eine Funktion (oder ein Programm), die eine Eingabe x
in beliebiger Form annimmt und ausgibt ln(x)
.
Wenn die Bytes des Programms neu angeordnet / vertauscht werden, so dass das erste Byte jetzt das letzte Byte ist, sollte es stattdessen eine Eingabe x
in beliebiger Form und Ausgabe annehmen e^x
.
- Ihre Antwort muss mindestens 3 korrekte signifikante Ziffern enthalten.
- Annäherungen sind in Ordnung, solange sie mindestens 3 korrekte signifikante Zahlen haben.
- Ihr Code muss vorwärts und rückwärts in derselben Programmiersprache sein.
Nehmen wir an, dieses Programm implementiert ln(x)
:
abc你好
Dann muss dieses Programm folgendes implementieren e^x
:
\xBD\xA5\xE5\xA0\xBD\xE4cba
Goldener Stern, wenn Sie eine Sprache ohne Float-Unterstützung verwenden.
Dies ist eine seltsame Form von Code-Golf, so dass das kürzeste Programm gewinnt.
code-golf
arithmetic
source-layout
Filip Haglund
quelle
quelle
?
, die die Sekantenmethode verwendeten, approximieren.Antworten:
Haskell, 11 Bytes
und in umgekehrter Reihenfolge:
Dies funktioniert ohne den Trick "Kommentar". Stattdessen definiert jede Version eine zusätzliche, aber nicht verwendete Funktion (
pxe
/gol
).quelle
gol=f
.APL, 3 Bytes
Dies ist ein Funktionszug. Monadische
*
Rückkehre^x
, monadische⍟
Rückkehrln(x)
.⊣
ist eine dyadische Funktion, die das linke Argument zurückgibt. Also*⊣⍟
ist äquivalent zu gerecht*
, und das Gegenteil⍟⊣*
ist äquivalent zu gerecht⍟
.quelle
Gelee,
54 BytesJa, meine erste Gelee-Antwort. :) Die Eingabe erfolgt über ein Befehlszeilenargument.
Jelly hat eine eigene Codepage, sodass jedes Zeichen aus einem Byte besteht.
Probieren Sie es online!
Rückgängig gemacht:
Probieren Sie es online!
Erläuterung
Das
Æ
Token für sich ist ein nicht erkanntes Token und entspricht daher einem Zeilenvorschub. Dies bedeutet, dass in beiden Fällen nur der Hauptlink vorhanden istÆl
oderÆe
der 2-stellige eingebaute Link fürexp()
oder istln()
und standardmäßig für das erste Befehlszeilenargument ausgeführt wird.quelle
Javascript, 18 Bytes
quelle
Math.ln||pxe.htaM
wird wohl auch funktionieren.Im Ernst, 5 Bytes
Input, In, Output, dann Exp auf einem leeren Stack (führt nichts aus) und Input (führt nichts aus, da Input erschöpft ist). Probieren Sie es online!
Rückgängig gemacht:
Probieren Sie es online!
quelle
Julia, 7 Bytes
Dies ist eine anonyme Funktion. Weisen Sie es einer Variablen zu, um es aufzurufen. Wertet zu Builtins
log
oderexp
plus einem Kommentar aus.quelle
Mathematica, 19 Bytes
Rückgängig gemacht:
Das war interessant zum Golfen! Mathematica hat keine Zeilenkommentare / impliziten Zeichenfolgenenden, daher konnte ich den einfachen Weg nicht einschlagen. Stattdessen habe ich die Tatsache ausgenutzt
0 + x == x
, dass0 x == 0
, und das1 x == x
, egal wasx
ist! Testen:quelle
Python2, 73 Bytes
io: stdin / stdout
invers:
quelle
__import__("math").
anstelle vonCJam, 11 Bytes
Teste es hier.
Rückgängig gemacht:
Teste es hier.
Grundsätzlich der gleiche Kommentar-Trick wie die Python-Antwort des OP.
e#
startet einen Kommentar.rd
und liest die Eingabeml
oderme
berechnet den Logarithmus oder exponentiell.quelle
Brachylog , 3 Bytes
Probieren Sie es online!
Anfangs hatte ich gehofft, zu verwenden
~*
, aber obwohl die nachgestellte Tilde*~
berechnete^x
und erfolgreich ignoriert wird,~*
schlägt dies für alle Ganzzahleingaben fehl und führt bei den meisten Nicht-Ganzzahleingaben zu einem Float-Überlauf.Vorwärts:
Rückwärts:
Hierbei wird das Identitätsprädikat verwendet, da nachfolgende Tilden zwar toleriert werden, führende Indizes jedoch nicht. (Wenn dies der Fall
*₁
wäre, wäre die Brachylog-Antwort allein. Dies ist nur der normale Wert für natürliches Protokoll.)quelle
Vitsy, 5 Bytes
Dies ist ein Programm, das bei einem Fehler beendet wird.
Dieses Programm wird bei einem Fehler mit ln (Eingabe) auf dem Stapel beendet.
Probieren Sie es online! (beachte, dass ich
N
sichtbare Ausgabe gemacht habe)Dann ist es umgekehrt:
Dieses Programm wird bei einem Fehler mit e ^ (Eingabe) auf dem Stapel beendet.
Probieren Sie es online!
quelle
Fuzzy Octo Guacamole, 7 Bytes
Nicht konkurrierend, ist FOG neuer als die Herausforderung
Dies entspricht einer Funktion in FOG. Es wird davon ausgegangen, dass sich die Eingabe auf dem Stapel befindet. Dies kann durch den Code einer Funktion zugeordnet werden
"EZO@pZE""f"o
, in demf
irgendein Einzel char Namen , den Sie zuweisen möchten. Verwenden Sie es dann wie jeden anderen Befehl. Beispiel:"EZO@pZE"'f'o^f
.Erläuterung:
Rückgängig gemacht:
quelle
Matl, 5 Bytes
Yl
: logZe
: exp%
: commentquelle
Pyth, 12 Bytes
Funde
ln(input())
Funde
e^input()
Leerzeichen stoppen das implizite Drucken von Zeichenfolgen. Jede Version berechnet dies und erstellt dann eine Zeichenfolge mit den verbleibenden Zeichen.
ln(x)
Modus hiere^x
Modus hierquelle
8 Zeichen / 10 Bytes
Try it here (Firefox only).Try reverse here (Firefox only).
Nur 2 durch einen Kommentar getrennte Builtins.
quelle
Jolf, 9 Bytes
Programm 1:
exp
der EingabeProgramm 2:
ln
der EingabeBonuspunkte für ein Palindrom ohne Berücksichtigung der Groß- und Kleinschreibung? Probieren Sie es hier aus!
quelle
J, 8 Bytes
Der natürliche Logarithmus ist
^.
exponentiell^
. Das Problem ist,.
kann nur ein gültiges Verb ändern, sonst tritt ein Rechtschreibfehler auf. Daher können wir den linken Argumenttrick nicht in der APL-Antwort verwenden, da^.[^
dies beim Umkehren zu einem Fehler führen würde, da^[.^
ein ungültiges Verb erstellt wird. Wir müssen also Kommentare verwenden. ist aberNB.
so lang :( Zum Glück enden beide mit.
, also gibt es das.Logarithmus:
Exponentiell:
Sie können sie online selbst eintragen !
quelle
Java 8,
19818230 BytesProbieren Sie es online aus.
und umgekehrt:
Probieren Sie es online aus.
Verwendet den Kommentar-Trick (
//
) mit eingebauten Funktionen fürMath.log
undMath.exp
.quelle
Runenverzauberungen , 9 Bytes
Probieren Sie es online!
Ein gottlos uninteressantes Programm.
@
versichert die Kündigung des implizierten Einstiegspunkts links, alles danach ist nicht ausgeführt. Ich habe mich wirklich sehr bemüht, die Anweisungen'
oder wiederzuverwendenA
, aber auch bei größeren Programmgrößen ohne Erfolg. Der erforderliche explizite Einstiegspunkt für mehrzeilige Programme schließt dies im Wesentlichen aus.quelle