Diesmal habe ich echte Arbeit geleistet, alten Code aktualisiert und bin auf einen Ausdruck gestoßen, der dem entspricht, was man in guter, altmodischer Mathematik als πx + e x schreiben würde . Ich dachte, es wäre möglich, es kürzer als in der Sprache zu schreiben, mit der ich arbeite (APL), und präsentiere daher diese sehr einfache Herausforderung:
Schreiben Sie eine Funktion oder ein Programm, das (auf irgendeine Weise) null oder mehr Zahlen akzeptiert und (auf irgendeine Weise) das Ergebnis des obigen Ausdrucks für x = jede der angegebenen Zahlen mit mindestens 3 signifikanten Stellen für jedes Ergebnis zurückgibt .
Wenn Ihre Sprache nicht π und / oder e hat , verwenden Sie die Werte 3.142 und 2.718.
Die Bewertung ist die Anzahl der Bytes. Stellen Sie Ihrer Antwort daher Folgendes voran # LanguageName, 00 bytes
.
Standard-Schlupflöcher sind nicht erlaubt.
Edit: Jetzt ist die Lösung kam ich mit, ○+*
, gefunden wurde . Der ursprüngliche Code war (○x)+*x
.
Antworten:
Dyalog APL, 3 Zeichen
Als stillschweigende Phrase.
Monadisch
○
multipliziert sein Argument mit π, monadisch*
ist die Exponentialfunktionexp
.○+*
ist so ein zug der(○+*)ω
gleich ist(○ω)+(*ω)
. Da dies APL ist, funktioniert der Ausdruck für Argumente beliebiger Form, z. G. Sie können einen Vektor beliebiger Länge übergeben.In J ist die gleiche Lösung möglich wie
o.+^
ino.
Sein○
und^
Sein*
.quelle
Emotinomicon, 48 Bytes / 13 Zeichen
Ich mache es nicht, weil es kurz ist, sondern weil es Spaß macht. Probieren Sie es hier aus. Sie müssen es kopieren und in das Textfeld einfügen.
Erläuterung:
Hier ist das Programm in seiner nativen Umgebung, dem Mobiltelefon:
quelle
cat
?R,
2524 BytesIst es das? Sie erhält Eingaben vom Benutzer, weist sie zu
x
, berechnet ihre exponentielle Multiplikation mitpi
und gibt schließlichcat()
das Ergebnis aus.edit: 1 Byte gespeichert dank Alex A.
quelle
cat(exp(x<-scan())+pi*x)
<-
wie in meinem Vorschlag vorgehen und nicht,=
weil sonst dasx
Argument festgelegt,exp
aber die Variable nicht zugewiesen wirdx
. In einer neuen Sitzung schlägt der aktuelle Code fehl.JavaScript (ES6),
3934 Bytes5 Bytes gespart dank @ edc65
Nimmt Eingaben als ein Array von Zahlen und gibt sie im gleichen Format aus.
Dank der Reduzierung gibt es jetzt drei gleichwertige 45-Byte-Programme, die alle ES5-kompatibel sind:
Die Eingaben sollten einzeln eingegeben werden. Drücken Sie OK, ohne etwas einzugeben, um den Vorgang zu beenden.
Die dritte hebt ein interessantes Merkmal in JS hervor: die
with
Aussage. Obwohl die Verwendung manchmal unsicher ist (daher im strengen Modus deaktiviert), kann sie dennoch verwendet werden, um das Eingeben eines Objektnamens und eines Zeitraums bei jedem Zugriff zu sparen. Zum Beispiel können Sie dies tun:push
undlength
werden dann als Eigenschaften von verwendetx
, was mitx
Sein resultieren wird[0,1,2,3,4]
.Dies funktioniert für jedes Objekt, auch für Nicht-Variablen. So können Sie beispielsweise Folgendes tun:
charAt
undlength
werden als Eigenschaften des Strings aufgerufen."0x"+x-0
Konvertiertx
von einem hexadezimalen Wert in eine Zahl. Dies sind alsoalert
die Zahlen 0 bis 15.quelle
M.pow(M.E,x)
isM.exp(x)
per definitionMath
;) Danke!with
es veraltet war.<canvas>
Rendern und (natürlich) Golfen.Mathematica,
11-10BytesMit 1 Byte dank LegionMammal978 gespeichert.
quelle
1.Pi#+E^#&
#
undPi
. Dies wird durch die VerwendungPi#
von anstelle von gelöst#Pi
. Außerdem mussN
nurPi#
der gesamte Ausdruck angewendet werden .Pyth,
1113Nimmt nun
x
als Liste z[1.25, 2.38, 25]
Vorherige (11 Bytes):
+*Q.n0^.n1Q
quelle
Im Ernst, 10 Bytes
Hex Dump:
Probieren Sie es online
Nimmt Eingaben als Liste (siehe Link zum Beispiel).
Erläuterung:
quelle
MATLAB, 15 Bytes
quelle
TI-BASIC, 5 Bytes
TI-BASIC nicht ASCII - Zeichen verwenden, so dass jeder von ihnen als ein Byte im Rechner gespeichert ist:
π
,Ans
,+
,e^(
, undAns
. Es wird davon ausgegangen, dass der vorherige Ausdruck die Eingabe ist (wie{1,2,3}
).quelle
Python 2, 38 Bytes (
5249 Bytes mit Mathe)Wenn ich das Mathe-Modul benutzen muss:
Die Eingabe sollte eine Liste von Zahlen sein
quelle
If your language does not have π and/or e, use the values 3.142 and 2.718.
... Python hatpi
unde
immath
Modul.math
Lösung einsparen, indem Siefrom math import*
for x in l:lambda l:pi*x+e**x
in beiden Antworten anstelle des VerstehensMATL , 9 Bytes
Diese Antwort verwendet die aktuelle Version der Sprache ( 3.1.0 ), die vor der Herausforderung liegt.
Die Eingabe ist ein Vektor, der alle Zahlen enthält (Liste in eckigen Klammern und durch Leerzeichen, Semikolon-Kommas getrennt), wie z
[5.3 -7 3+2j]
. Komplexe Werte sind zulässig. Die Ausgabe hat 15 signifikante Stellen.Beispiel
Erläuterung
Einfache Bedienung:
quelle
MATLAB: 70 Bytes
Prüfung:
Erläuterung: Bei der Zahlenformatierung sind mehrere Probleme aufgetreten.
Erstens erfordert die Frage 3 Sig-Feigen. Matlab hat keine eingebaute Funktion zum Runden von Sig-Feigen (nur durch Dezimalstellen), so dass die folgende Problemumgehung erforderlich war:
floor(log10(pi*x+exp(x))))
berechnet die größte signifikante Ziffer.@(x)(round(pi*x+exp(x),2-floor(log10(pi*x+exp(x))))),x))
Nimmt Eingabenx
und rundet auf 3 signifikante Stellen.Eine weitere Anforderung bestand darin, mehrere Eingaben zu verarbeiten. Der obige Code kann nur mit einer einzelnen Nummer funktionieren. Um dies abzuschwächen, wird
arrayfun
die Funktion für jedes Vektorelement ausgewertet.Als letztes Problem zeigt Matlab das Ergebnis von Arrayfun mit einer eigenen Rundung an, die zu Ausgaben führt,
1.0e+04 * 0.0006
die gegen die 3-Sig-Fig-Anforderung verstoßen. Wurde alsonum2str
verwendet, um das Array in einchar
Format zu verwandeln .Matlab ist gut für die numerische Analyse geeignet, aber ehrlich gesagt ist es schlecht, wenn es um die Feinformatierung von Zahlen geht
UPD: Nun, das ist peinlich, dass ich verwirrt bin
mit
Wie auch immer, ich werde meine Antwort in dieser Form hinterlassen, da die 15-Byte-Matlab-Lösung bereits von @costrom bereitgestellt wird
quelle
format longg
erforderlich ist, bevor Sie den Code ausführen, würden Sie 3/4 der Länge hierJulia, 12 Bytes
Dies ist eine anonyme Funktion, die ein Array akzeptiert und ein Array von Floats zurückgibt. Um es zu nennen, geben Sie ihm einen Namen, z
f=x->...
.Julia hat eingebaute Konstanten
π
unde
- Sie haben es erraten - π und e. Der.^
Operator ist eine vektorisierte Potenzierung.quelle
Japt, 12 Bytes
Nimmt die Eingabe als durch Leerzeichen getrennte Zahlen. Probieren Sie es online!
Wie es funktioniert
quelle
J, 4 Bytes
Wie APL
○+*
, aber diepi times
Funktion von J wird aufgerufeno.
, was ein Byte länger ist.quelle
Haskell,
2219 BytesProbieren Sie es online!
Edit: -3 Bytes dank @ H.PWiz
quelle
Par , 8 Bytes
Akzeptiert Eingaben als
(1 2 3)
Erläuterung
quelle
Schläger , 27 Bytes
wenn in die Funktionsposition eines Ausdrucks gesetzt:
quelle
CJam, 13 Bytes
Nimmt Eingaben als Array, das durch Leerzeichen (z
[1 2 3]
. B. ) getrennt ist. Probieren Sie es online aus.Erläuterung
quelle
Reng v.3.3, 53 Bytes
Nicht konkurrierend, weil es die Herausforderung nachholt, aber hey, keine Preise für die Kürze zu gewinnen. : P Probieren Sie es hier!
Zeile 0
Hier ist eine Ansicht des Stapels in Zeile 0:
ø
dann geht es in die nächste n-te Zeile. Wenn0
eingegeben wird, geht dies direkt zu Zeile 2. Andernfalls gehen wir zu Zeile 1.Linie 1
Dies multipliziert E-
i
mal, was iste^i
. Wir dekrementieren den Zähler (anfangsI
), multiplizieren den STOS (unsere Laufleistunge
) mit E, kehren zum Zähler zurück und tun dies (i'
ist der aktuelle Zähler):ø
dann macht man eines von zwei dingen. Wenn der Zähler nicht 0 ist, gehen wir zur "nächsten" 0. Zeile, dh zum Anfang der aktuellen Zeile. Wenn es Null ist, dann0e
ergibt es 1 und geht zur nächsten Zeile.Zeile 2
$
Lässt die Theke fallen (AUF DEM BODEN!).+
addiert die ersten beiden Ergebnisse,n
gibt diese Zahl aus und~
beendet das Programm.Fall 1: Eingang ist 0. Der TOS ist 1 ("e ^ 0") und der STOS ist 0 (pi * 0). Wenn Sie sie hinzufügen, erhalten Sie das richtige Ergebnis.
Fall 2: Eingabe ist nicht 0. Das Ergebnis ist wie erwartet.
quelle