Untuk sekali, saya melakukan beberapa kerja nyata, memperbarui kode lama, dan menabrak sebuah ekspresi yang setara dengan apa yang akan ditulis sebagai πx + e x dalam matematika kuno yang baik. Saya pikir mungkin untuk menulisnya lebih pendek daripada yang ditulis dalam bahasa tempat saya bekerja (APL), dan karenanya menyajikan tantangan yang sangat sederhana ini:
Tulis fungsi atau program yang (dengan cara apa pun) menerima angka nol atau lebih, dan mengembalikan (dengan cara apa pun) hasil dari ekspresi di atas untuk x = masing-masing angka yang diberikan dengan setidaknya 3 digit signifikan untuk setiap hasil.
Jika bahasa Anda tidak memiliki π dan / atau e , gunakan nilai 3.142 dan 2.718.
Skor adalah jumlah byte, jadi kata pengantar jawaban Anda dengan # LanguageName, 00 bytes
.
Lubang loop standar tidak diperbolehkan.
Sunting: Sekarang solusi yang saya temukan○+*
,, telah ditemukan . Kode aslinya adalah (○x)+*x
.
Jawaban:
Dyalog APL, 3 karakter
Sebagai frasa diam-diam.
Monadic
○
mengalikan argumennya dengan π, monadik*
adalah fungsi eksponensialexp
.○+*
adalah kereta yang(○+*)ω
sama dengan(○ω)+(*ω)
. Karena ini adalah APL, frasa ini berfungsi untuk argumen yang bentuknya sewenang-wenang, e. g. Anda dapat melewati vektor dengan panjang sewenang-wenang.Solusi yang sama dimungkinkan dalam J seperti
o.+^
dengano.
makhluk○
dan^
makhluk*
.sumber
Emotinomicon, 48 byte / 13 karakter
Saya melakukannya, bukan karena itu pendek, tetapi karena itu menyenangkan. Coba di sini. Anda harus menyalin + menempelkannya ke kotak teks.
Penjelasan:
Berikut adalah program di lingkungan asalnya, ponsel:
sumber
cat
?R,
2524 byteApakah ini? Ia mendapat input dari pengguna, menetapkannya
x
, menghitung eksponensialnya, mengalikannyapi
, dan akhirnyacat()
mencetak hasilnya.sunting: 1 byte disimpan berkat Alex A.
sumber
cat(exp(x<-scan())+pi*x)
<-
seperti yang saya lakukan dalam saran saya daripada=
karena kalau tidak itu menetapkanx
argumen untukexp
tetapi tidak menetapkan variabelx
. Dalam sesi baru, kode saat ini akan gagal.JavaScript (ES6),
3934 byteDisimpan 5 byte berkat @ edc65
Mengambil input sebagai array angka, dan output dalam format yang sama.
Berkat pengurangan ini, sekarang ada tiga program 45 byte yang setara, semua sesuai dengan ES5:
Input harus dimasukkan satu per satu. Tekan OK tanpa memasukkan apa pun untuk berhenti.
Yang ketiga menyoroti fitur menarik di JS:
with
pernyataan. Meskipun kadang-kadang tidak aman untuk digunakan (sehingga dinonaktifkan dalam mode ketat), masih dapat digunakan untuk menyimpan mengetikkan nama objek dan titik setiap kali Anda perlu mengaksesnya. Misalnya, Anda dapat melakukan ini:push
danlength
kemudian digunakan sebagai properti darix
, yang akan menghasilkanx
makhluk[0,1,2,3,4]
.Ini berfungsi pada objek apa pun , bahkan non-variabel, jadi misalnya, Anda bisa melakukan ini:
charAt
danlength
disebut sebagai properti dari string."0x"+x-0
mengkonversix
dari nilai hex ke angka, jadi inialert
adalah angka 0 hingga 15.sumber
M.pow(M.E,x)
adalahM.exp(x)
menurut definisiMath
;) Terima kasih!with
sudah ditinggalkan.<canvas>
rendering and (of course) golfing.Mathematica,
1110 bytesWith 1 byte saved thanks to LegionMammal978.
sumber
1.Pi#+E^#&
#
andPi
. This is solved by usingPi#
in place of#Pi
. Also,N
only needs to be applied toPi#
, not the whole expression.Pyth,
1113Now takes
x
as a list, e.g.[1.25, 2.38, 25]
Previous (11 bytes):
+*Q.n0^.n1Q
sumber
Seriously, 10 bytes
Hex Dump:
Try It Online
Takes inputs as a list (see link for example).
Explanation:
sumber
MATLAB, 15 bytes
sumber
TI-BASIC, 5 bytes
TI-BASIC doesn't use ASCII bytes, so each of these is stored as one byte in the calculator:
π
,Ans
,+
,e^(
, andAns
. It assumes the previous expression is the input (like{1,2,3}
).sumber
Python 2, 38 bytes (
5249 bytes w. math)If I have to use the math module:
Input should be a list of numbers
sumber
If your language does not have π and/or e, use the values 3.142 and 2.718.
... Python haspi
ande
in themath
module.math
solution by usingfrom math import*
for x in l:lambda l:pi*x+e**x
instead of the comprehension in both answersMATL, 9 bytes
This answer uses the current version of the language (3.1.0), which is earlier than the challenge.
Input is a vector containing all numbers (list enclosed by square brackets and separated by spaces, commas of semicolons), such as
[5.3 -7 3+2j]
. Complex values are allowed. Output has 15 significant digits.Example
Explanation
Straightforward operations:
sumber
MATLAB: 70 bytes
Test:
Explanation: There were several issues with number formatting.
Firstly, the question requires 3 sig-figs. Matlab has no built-in function for rounding by sig-figs (only by decimal places), so the following workaround was required:
floor(log10(pi*x+exp(x))))
computes the largest significant digit.@(x)(round(pi*x+exp(x),2-floor(log10(pi*x+exp(x))))),x))
takes inputx
and rounds to 3 significant digits.Another requirement was to handle multiple inputs. The above code can work only with single number. To mitigate this, we use
arrayfun
to evaluate the function for each vector element.The last problem, Matlab displays the result of arrayfun with its own rounding that leads to outputs like
1.0e+04 * 0.0006
which violates the 3 sig-fig requirement. So,num2str
was used to turn array intochar
format.Matlab is good for numerical analysis, but, frankly, it sucks when it comes to fine number formatting
UPD: well, that's embarrassing that I confused
with
Anyway, I'll leave my answer in this form because the 15 bytes Matlab solution is already given by @costrom
sumber
format longg
was required before running the code, you'd drop 3/4 the length hereJulia, 12 bytes
This is an anonymous function that accepts an array and returns an array of floats. To call it, give it a name, e.g.
f=x->...
.Julia has built-in constants
π
ande
for—you guessed it—π and e, respectively. The.^
operator is vectorized exponentiation.sumber
Japt, 12 bytes
Takes input as space-separated numbers. Try it online!
How it works
sumber
J, 4 bytes
Same as APL
○+*
, but J'spi times
function is calledo.
, which is one byte longer.sumber
Haskell,
2219 bytesTry it online!
Edit: -3 bytes thanks to @H.PWiz
sumber
Par, 8 bytes
Accepts input as
(1 2 3)
Explanation
sumber
Racket, 27 bytes
when put in the function position of an expression:
sumber
CJam, 13 bytes
Takes input as an array separated by spaces (e.g.
[1 2 3]
). Try it online.Explanation
sumber
Reng v.3.3, 53 bytes
Noncompeting because it postdates the challenge, but hey, not winning any awards for brevity. :P Try it here!
Line 0
Here is a view of the stack in line 0:
ø
then goes to the next Nth line. When0
is input, this goes straight to line 2. Otherwise, we go to line 1.Line 1
This multiples E
i
times, which ise^i
. We decrement the counter (initiallyI
), multiply the STOS (our runninge
power) by E, go back to the counter, and do this (i'
is the current counter):ø
then does one of two things. If the counter is not 0, then we go to the "next" 0th line, i.e., the beginning of the current line. If it is zero, then0e
yields 1, and goes to the next line.Line 2
$
drops the counter (ON THE FLOOR!).+
adds the top two results,n
outputs that number, and~
quits the program.Case 1: input is 0. The TOS is 1 ("e^0") and the STOS is 0 (pi*0). Adding them yields the correct result.
Case 2: input is not 0. The result is as you might expect.
sumber