Die Herausforderung
Ganz einfach, wenn Sie einen Input haben x
, berechnen Sie, dass es ein unendlicher Power Tower ist!
x^x^x^x^x^x...
Für Sie Mathe-Liebhaber da draußen ist dies eine x
unendliche Tetration .
Beachten Sie Folgendes:
x^x^x^x^x^x... = x^(x^(x^(x^(x...)))) != (((((x)^x)^x)^x)^x...)
Wir waren überrascht, dass wir keine "einfache" mathematische Herausforderung hatten! *
Annahmen
x
wird immer konvergieren.- Negative und komplexe Zahlen sollten behandelt werden können
- Das ist Code-Golf , also gewinnt das niedrigste Byte !
- Ihre Antworten sollten auf mindestens 5 Dezimalstellen genau sein
Beispiele
Input >> Output
1.4 >> 1.8866633062463325
1.414 >> 1.9980364085457847
[Square root of 2] >> 2
-1 >> -1
i >> 0.4382829367270323 + 0.3605924718713857i
1 >> 1
0.5 >> 0.641185744504986
0.333... >> 0.5478086216540975
1 + i >> 0.6410264788204891 + 0.5236284612571633i
-i >> 0.4382829367270323 -0.3605924718713857i
[4th root of 2] >> 1.239627729522762
* (Anders als eine kompliziertere Herausforderung hier )
Antworten:
APL (Dyalog) , 4 Bytes
Probieren Sie es online!
*
Leistung⍣
bis um≡
stabil⍨
Selfiequelle
Pyth,
43 Bytesdurchgestrichen 4 ist immer noch regulär 4; (
Probieren Sie es online aus
Wie es funktioniert
quelle
G
, es wird automatisch ausgefüllt.Haskell ,
10063 BytesBei Eingaben, die nicht konvergieren (z. B.
-2
), wird dies nicht beendet:Vielen Dank @ ØrjanJohansen, dass du
until
mir das beigebracht und mir37
Bytes gespart hast !Probieren Sie es online!
quelle
until
Funktion erheblich verkürzen . Probieren Sie es online!until
, vielen Dank.Python 3 ,
40 3935 Bytesd>99
anstelle vond==99
: 1 weitere Iteration für eine geringere Anzahl von Bytesx**True
x in ausgewertet wirdx**(d>99or g(x,d+1))
. Der Ausdruck im Ausdruck wird für Tiefen größer als 99 als True ausgewertet und gibt somit den übergebenen Wert zurück.Rekursives Lambda mit einer maximalen Tiefe von 100, dh für eine Tiefe von 100, gibt den gleichen Wert zurück. Tatsächlich ist es konvergenzunabhängig. Erwarten Sie daher das Unerwartete für Zahlen mit nicht konvergierenden Werten für die Funktion.
Probieren Sie es online!
quelle
complex('j')
mit1j
d>99
macht noch eine Iteration und ist kürzer.g=lambda x,d=0:x**(d>99or g(x,d+1))
,x**True
ergibtx
Python 3,
373027 Bytes-7 Bytes von @FelipeNardiBatista.
-3 Bytes von von @xnor
Ich kann mich nicht mehr an viel Python erinnern, aber ich konnte meine Ruby-Antwort portieren und die andere Python 3-Antwort schlagen: D
Probieren Sie es online!
quelle
x
,eval('x**'*99+'1')
worksMathematica, 12 Bytes
Nimmt eine Gleitkommazahl als Eingabe.
quelle
J , 5 Bytes
Probieren Sie es online!
Erläuterung
Zuerst werde ich zeigen, welcher Befehl ausgeführt wird, nachdem das
~
am Ende analysiert wurde , und der Durchgang wird für das neue Verb sein.quelle
(^^:_)
zerlegen , ist es richtig zu sagen, dass Folgendes passiert: Erstellt ein neues dyadisches Verb über die Potenz-Konjunktion, dann~
macht das Selbst-Adverb dieses Verb monadisch, so dass es bei gegebenem Argumentx
erweitert wirdx (^^:_) x
. das linke bleibtx
anschließend "stecken" und gibt((x&^)^:_) x
je nach notiz nur das richtige argument während der iteration wieder?x u^:n y
wird das linke Argument mit der Dyade verbunden, um eine Monade zu bilden, die sich das ganzen
Mal ineinander verschachtelty
.x u^:n y -> (x&u)^:n y -> (x&u) ... n times ... (x&u) y
C # (.NET Core) ,
79 bis78 ByteProbieren Sie es online!
Ich habe mich für eine Iteration bis
i
= 999 entschieden, da einige Beispiele bei einer Iteration bis 99 nicht die erforderliche Genauigkeit erreichten. Beispiel:Wie Sie sehen, ist der Imaginärteil nach 99 Iterationen auf der 5. Dezimalstelle ausgefallen.
In diesem Fall erhalten wir nach 99 Iterationen die erwartete Genauigkeit. Tatsächlich könnte ich bis
i
= 1e9 mit der gleichen Byteanzahl iterieren , aber das würde den Code erheblich langsamer machenquelle
Gelee , 5 Bytes
Probieren Sie es online!
quelle
Ruby,
21 bis20 BytesHaftungsausschluss : Es scheint, dass Ruby einige seltsame Werte zurückgibt, wenn eine komplexe Zahl zu einer Potenz erhoben wird. Ich gehe davon aus, dass es für diese Herausforderung nicht sinnvoll ist, Rubys gesamtes Mathematikmodul zu reparieren, aber ansonsten sollten die Ergebnisse dieser Funktion korrekt sein.Edit : Habe die letzten Änderungen aus meiner Python 3-Antwort übernommen und plötzlich gibt es irgendwie die gleichen, erwarteten Ergebnisse :)Probieren Sie es online!
quelle
eval
."0+1i**0+1i**0+1i**..."
, die in der falschen Weise analysiert wird, da sie**
eine höhere Priorität als hat+
.#inspect
und#to_s
unterschiedliche Werte zurückgeben. Bevor ich die erste Antwort abschickte, habe ich einige Tests in irb durchgeführt und festgestellt, dass z. B. die EingabeComplex(1,2)
der REPL(1+2i)
einschließlich der Klammern hilfreich ist. Wenn Sie den Wert einschränken, werden die Klammern jedoch nicht eingeschlossen, sodass der Vorrang, wie Sie darauf hinweisen, ihn durcheinander gebracht hat.eval
Verwendung sei verboten.TI-BASIC, 16 Bytes
Die Eingabe und Ausgabe werden in gespeichert
Ans
.quelle
R ,
3633 Bytes- 3 Bytes dank Jarko Dubbeldam
Liest von stdin.
Reduce
s von rechts, um die Exponenten in der richtigen Reihenfolge anzuwenden.Probieren Sie es aus (Funktion)
Probieren Sie es aus (stdin)
quelle
scan(,1i)
funktioniert. Ähnlich wie esscan(,'')
funktioniert.Javascript, 33 Bytes
quelle
MATL ,
2010 BytesDank @LuisMendo auf die Hälfte reduziert
Probieren Sie es online!
Dies ist mein erstes Code-Golf und mein erstes Mal, dass ich MATL benutze, also bin ich mir sicher, dass es leicht zu übertreffen ist.
quelle
XII
entsprichtt
. Sie können auch die automatische Zwischenablage entfernenXH
undH
verwendenM
, dttt^`yw^t5M-]bb-x
. H. Und im letzten Teil können Sie die unerwünschten Werte löschen&
, wodurch die implizite Anzeigefunktion angewiesen wird, nur den oberen Bereich anzuzeigen. Sie können alsottt^`yw^t5M-]&
einige Bytes verwenden und speichern.t
ist nicht erforderlich, und unter VerwendungG
anstelle eines anderent
können Sie vermeiden ,&
und somit lassen]
implizit:t^`Gw^t5M-
. Hey, wir haben die Anzahl der Bytes um die Hälfte reduziert!Perl 6 , 17 Bytes
Probieren Sie es online!
R**
ist der Reverse-Exponentiation-Operator;x R** y
ist gleichy ** x
.[R**]
Reduziert eine Liste von 999 Kopien des Eingabearguments mit umgekehrter Exponentiation.quelle