Raz wykonałem prawdziwą pracę, zaktualizowałem stary kod i wpadłem na wyrażenie, które jest równoważne temu, co byłoby napisane jako πx + e x w dobrej staromodnej matematyce. Pomyślałem, że będzie możliwe napisanie go krócej niż w języku, w którym pracuję (APL), i dlatego przedstawię to bardzo proste wyzwanie:
Napisz funkcję lub program, który (w jakikolwiek sposób) akceptuje zero lub więcej liczb i zwraca (w jakikolwiek sposób) wynik powyższego wyrażenia dla x = każdej z podanych liczb z co najmniej 3 cyframi znaczącymi dla każdego wyniku.
Jeśli twój język nie ma π i / lub e , użyj wartości 3.142 i 2.718.
Punktacja to liczba bajtów, więc poprzedzaj swoją odpowiedź # LanguageName, 00 bytes
.
Standardowe otwory na pętle nie są dozwolone.
Edit: Teraz rozwiązanie wymyśliłem, ○+*
, stwierdzono . Oryginalny kod był (○x)+*x
.
Odpowiedzi:
Dyalog APL, 3 znaki
Jako milczące zdanie.
Monadic
○
mnoży swój argument przez π, monadic*
jest funkcją wykładnicząexp
.○+*
jest takim pociągiem(○+*)ω
jest równy(○ω)+(*ω)
. Ponieważ jest to APL, wyrażenie to działa na argumenty o dowolnym kształcie, np. sol. możesz podać wektor o dowolnej długości.To samo rozwiązanie jest możliwe w J jak
o.+^
zo.
bytem○
i^
bytem*
.źródło
Emotinomicon, 48 bajtów / 13 znaków
Robię to nie dlatego, że jest krótki, ale dlatego, że jest fajny. Wypróbuj tutaj. Musisz skopiować i wkleić go do pola tekstowego.
Wyjaśnienie:
Oto program w jego natywnym środowisku, telefon komórkowy:
źródło
cat
?R,
2524 bajtówCzy to jest to? Uzyskuje dane wejściowe od użytkownika, przypisuje je
x
, oblicza wykładnicze pomnożenie gopi
i ostateczniecat()
drukuje wynik.edycja: 1 bajt zapisany dzięki Alexowi A.
źródło
cat(exp(x<-scan())+pi*x)
<-
co ja w mojej sugestii, a nie=
dlatego, że inaczej ustawiax
argument za,exp
ale nie przypisuje zmiennejx
. W nowej sesji bieżący kod zawiedzie.JavaScript (ES6),
3934 bajtówZaoszczędzono 5 bajtów dzięki @ edc65
Pobiera dane wejściowe jako tablicę liczb i dane wyjściowe w tym samym formacie.
Dzięki redukcji istnieją teraz trzy równoważne 45-bajtowe programy, wszystkie zgodne z ES5:
Wejścia należy wprowadzać pojedynczo. Naciśnij OK bez wprowadzania niczego, aby wyjść.
Trzeci podkreśla ciekawą funkcję JS:
with
oświadczenie. Chociaż czasem jest niebezpieczny w użyciu (wyłączony w trybie ścisłym), można go nadal używać do zapisywania nazwy obiektu i okresu za każdym razem, gdy trzeba uzyskać do niego dostęp. Na przykład możesz to zrobić:push
ilength
są następnie używane jako właściwościx
, które będą skutkiemx
istnienia[0,1,2,3,4]
.Działa to na każdym obiekcie, nawet nie-zmiennym, więc na przykład możesz to zrobić:
charAt
ilength
są wywoływane jako właściwości ciągu."0x"+x-0
konwertujex
wartość szesnastkową na liczbę, więc są toalert
liczby od 0 do 15.źródło
M.pow(M.E,x)
jestM.exp(x)
z definicjiMath
;) Dzięki!with
jest przestarzały.<canvas>
renderowania i (oczywiście) gry w golfa.Mathematica,
1110 bajtówZ 1 bajtem zapisanym dzięki LegionMammal978.
źródło
1.Pi#+E^#&
#
aPi
. Rozwiązuje się to, używającPi#
zamiast#Pi
. TrzebaN
tylko zastosowaćPi#
, a nie całe wyrażenie.Pyth,
1113Teraz trwa
x
jako listę, np[1.25, 2.38, 25]
Poprzednie (11 bajtów):
+*Q.n0^.n1Q
źródło
Poważnie, 10 bajtów
Hex Dump:
Wypróbuj online
Pobiera dane wejściowe jako listę (patrz link na przykład).
Wyjaśnienie:
źródło
MATLAB, 15 bajtów
źródło
TI-BASIC, 5 bajtów
TI-BASIC nie używa bajtów ASCII, więc każdy z nich jest przechowywana jako jeden bajt w kalkulatorze:
π
,Ans
,+
,e^(
, iAns
. Zakłada, że poprzednie wyrażenie jest wejściem (jak{1,2,3}
).źródło
Python 2, 38 bajtów (
5249 bajtów z matematyki)Jeśli muszę użyć modułu matematycznego:
Dane wejściowe powinny być listą liczb
źródło
If your language does not have π and/or e, use the values 3.142 and 2.718.
... Python mapi
ie
wmath
module.math
rozwiązanie, używającfrom math import*
for x in l:lambda l:pi*x+e**x
zamiast zrozumienia w obu odpowiedziachMATL , 9 bajtów
Ta odpowiedź korzysta z bieżącej wersji języka ( 3.1.0 ), która jest wcześniejsza niż wyzwanie.
Dane wejściowe to wektor zawierający wszystkie liczby (lista ujęta w nawiasy kwadratowe i oddzielone spacjami, przecinki średników), takie jak
[5.3 -7 3+2j]
. Złożone wartości są dozwolone. Wyjście ma 15 cyfr znaczących.Przykład
Wyjaśnienie
Proste operacje:
źródło
MATLAB: 70 bajtów
Test:
Objaśnienie: Było kilka problemów z formatowaniem liczb.
Po pierwsze, pytanie wymaga 3 sig-fig. Matlab nie ma wbudowanej funkcji do zaokrąglania za pomocą sig-fig (tylko o miejsca dziesiętne), więc wymagane było następujące obejście:
floor(log10(pi*x+exp(x))))
oblicza największą cyfrę znaczącą.@(x)(round(pi*x+exp(x),2-floor(log10(pi*x+exp(x))))),x))
pobiera dane wejściowex
i zaokrągla do 3 cyfr znaczących.Kolejnym wymaganiem była obsługa wielu danych wejściowych. Powyższy kod może działać tylko z jednym numerem. Aby temu zaradzić, używamy
arrayfun
do oceny funkcji dla każdego elementu wektora.Ostatni problem, Matlab wyświetla wynik działania arrayfun z własnym zaokrągleniem, które prowadzi do wyników takich,
1.0e+04 * 0.0006
które naruszają wymaganie 3 sig-fig. Tak więcnum2str
został użyty do przekształcenia tablicychar
format.Matlab jest dobry do analizy numerycznej, ale szczerze mówiąc, jest do bani, jeśli chodzi o precyzyjne formatowanie liczb
UPD: cóż, to wstyd, że się pomyliłem
z
W każdym razie zostawię moją odpowiedź w tym formularzu, ponieważ 15 bajtowe rozwiązanie Matlab jest już podane przez @costrom
źródło
format longg
było wymagane przed uruchomieniem kod, by upuścić 3/4 długości tutajJulia, 12 bajtów
Jest to anonimowa funkcja, która przyjmuje tablicę i zwraca tablicę liczb zmiennoprzecinkowych. Aby to nazwać, nadaj mu nazwę, np
f=x->...
.Julia ma wbudowane stałe
π
i odpowiednioe
- zgadłeś - π i e..^
Operator wektorowy potęgowanie.źródło
Japt, 12 bajtów
Pobiera dane wejściowe jako liczby oddzielone spacjami. Wypróbuj online!
Jak to działa
źródło
J, 4 bajty
To samo co APL
○+*
, alepi times
wywoływana jest funkcja Jo.
, która jest dłuższa o jeden bajt.źródło
Haskell,
2219 bajtówWypróbuj online!
Edycja: -3 bajty dzięki @ H.PWiz
źródło
Par , 8 bajtów
Akceptuje dane wejściowe jako
(1 2 3)
Wyjaśnienie
źródło
Rakieta , 27 bajtów
po umieszczeniu w pozycji funkcji wyrażenia:
źródło
CJam, 13 bajtów
Pobiera dane wejściowe jako tablicę oddzieloną spacjami (np
[1 2 3]
.). Wypróbuj online.Wyjaśnienie
źródło
Reng v.3.3, 53 bajty
Niekonkurencyjny, ponieważ opóźnia to wyzwanie, ale hej, nie wygrywając żadnych nagród za zwięzłość. : P Wypróbuj tutaj!
Wiersz 0
Oto widok stosu w linii 0:
ø
następnie przechodzi do następnej N-tej linii. Gdy0
wprowadzeniu przechodzi bezpośrednio do linii 2. W przeciwnym razie przechodzimy do linii 1.Linia 1
To mnoży E
i
razy, co oznaczae^i
.I
Zmniejszamy licznik (początkowo ), mnożymy STOS (nasząe
moc bieżącą ) przez E, wracamy do licznika i robimy to (i'
jest to bieżący licznik):ø
wtedy robi jedną z dwóch rzeczy. Jeśli licznik nie jest równy 0, to przechodzimy do „następnej” linii zerowej, tj. Do początku bieżącej linii. Jeśli wynosi zero, to0e
daje 1 i przechodzi do następnego wiersza.Linia 2
$
upuszcza licznik (NA PODŁOGĘ!).+
dodaje dwa najlepsze wyniki,n
wypisuje tę liczbę i~
wychodzi z programu.Przypadek 1: wejście wynosi 0. TOS wynosi 1 („e ^ 0”), a STOS wynosi 0 (pi * 0). Dodanie ich daje poprawny wynik.
Przypadek 2: dane wejściowe nie są równe 0. Wynik jest taki, jak można się spodziewać.
źródło