W teorii prawdopodobieństwa rozkład normalny (lub Gaussa) jest bardzo powszechnym ciągłym rozkładem prawdopodobieństwa. Rozkłady normalne są ważne w statystyce i są często stosowane w naukach przyrodniczych i społecznych do reprezentowania zmiennych losowych o wartościach rzeczywistych, których rozkłady nie są znane.
Wyzwanie
Twoim zadaniem jest wykreślenie gęstości prawdopodobieństwa rozkładu Gaussa na płaszczyźnie trójwymiarowej . Ta funkcja jest zdefiniowana jako:
Gdzie:
A = 1, σ x = σ y = σ
Zasady
- Twój program musi mieć jedno wejście σ , odchylenie standardowe.
- Twój program musi wydrukować wykres 3D rozkładu Gaussa w najwyższej jakości, na jaką pozwala Twój język / system.
- Twój program nie może korzystać z wbudowanej bezpośredniej dystrybucji Gaussa lub gęstości prawdopodobieństwa.
- Twój program nie musi się kończyć.
- Twoja fabuła może być czarno-biała lub kolorowa.
- Twoja działka musi mieć linie siatki na dole. Linie siatki po bokach (jak pokazano w przykładach) są niepotrzebne.
- Działka nie musi mieć numerów linii obok linii siatki.
Punktacja
Jak zwykle w golfie kodowym wygrywa zgłoszenie z najmniejszą liczbą bajtów! Nigdy nie mogę „zaakceptować” odpowiedzi za pomocą przycisku, chyba że ktoś jest niewiarygodnie mały i intuicyjny.
Przykładowe dane wyjściowe
Twój wynik może wyglądać mniej więcej tak:
Lub może wyglądać tak:
Odpowiedzi:
Gnuplot 4,
6462616047 bajtów(Związany z Mathematica ! WooHoo!)
Zapisz powyższy kod w pliku o nazwie
A.gp
i wywołaj go w następujący sposób:gnuplot -e 'call "A.gp" $1'>GnuPlot3D.png
gdzie
$1
należy zastąpić wartościąσ
. Spowoduje to zapisanie.png
pliku o nazwieGnuPlot3D.png
zawierającego pożądane dane wyjściowe w bieżącym katalogu roboczym.Zauważ, że działa to tylko z dystrybucjami Gnuplot 4, ponieważ w Gnuplot 5
$n
odniesienia do argumentów były przestarzałe i zastąpione niestety bardziej szczegółowymiARGn
.Przykładowe dane wyjściowe z
σ = 3
:To wyjście jest w porządku zgodnie z OP .
Gnuplot 4, Alternate Solution, 60 bajtów
Oto alternatywne rozwiązanie, które jest znacznie dłuższe niż poprzednie, ale moim zdaniem wyjście wygląda znacznie lepiej.
To wciąż wymaga Gnuplot 4 z tego samego powodu, co poprzednie rozwiązanie.
Przykładowe dane wyjściowe z
σ = 3
:źródło
I am not sure if it molds to the specifications required
jak myślisz, jakie specyfikacje nie spełniają?Gnuplot
wykreślenia gęstości prawdopodobieństwa rozkładu Gaussa z Sigmą2
bez żadnych modyfikacji środowiska.C ++,
34773344 bajtówLiczba bajtów nie obejmuje niepotrzebnych nowych linii.
MD XF zjechał z 133 bajtów.
C ++ nie może konkurować o to, ale pomyślałem, że fajnie byłoby napisać program renderujący dla tego wyzwania. Wyszedłem i grałem w golfa kilka kawałków GLM do matematyki 3D i użyłem algorytmu linii Xiaolin Wu do rasteryzacji. Program wypisuje wynik do pliku PGM o nazwie
g
.l
jest długością jednej strony siatki w przestrzeni świata.c
to liczba wierzchołków wzdłuż każdej krawędzi siatki.x
iz
(+ y idzie w górę) współrzędne przestrzeni światowej wierzchołka i zwraca pozycję przestrzeni światowej wierzchołka.w
to szerokość pgmh
to wysokość pgmm
jest matrycą widoku / projekcji. Argumenty użyte do utworzeniam
to ...Renderowanie może mieć więcej funkcji, lepszą wydajność i lepszą grę w golfa, ale dobrze się bawiłem!
źródło
Mathematica, 47 bajtów
przyjmuje jako dane wejściowe σ
Wejście
wynik
-2 bajty dzięki LLlAMnYP
źródło
E^(-(x^2+y^2)/2/#^2)
R,
1051028786 bajtówBierze Sigmę ze STDIN. Tworzy wektor od
-6
się6
w etapach.1
zarównox
iy
,następnie tworzy się121x121
matrycę poprzez zewnętrzny iloczynx
iy
. Jest to krótsze niż wywołaniematrix
i określenie wymiarów. Matryca jest już wypełniona, ale to w porządku, ponieważ ją zastępujemy.Wfor
-loop iteruje się wartościamix
, korzystając z vectorized operacjiR
, tworząc macierz gęstości jednego rzędu w danym czasie.(s)apply
znowu jest krótszą metodą operacji wektoryzowanych. Podobnie jak bohater, sam zajmuje się tworzeniem matrycy, oszczędzając sporo bajtów.128125110109 bajtów, ale o wiele bardziej fantazyjne:Ta fabuła jest tworzona przez
plotly
pakiet. Niestety specyfikacja jest nieco myląca, więc kosztuje to dużo bajtów. Rezultat jest naprawdę naprawdę fantazyjny. Gorąco polecam wypróbowanie go samemu.źródło
plotly
fabuła jest wystarczająco fantazyjna, aby zagwarantować, że nadal zostanie tutaj uwzględniona.s
raz, czy możesz to zrobić2*scan()^2
i usunąćs=scan();
na początku? Oszczędziłoby to 3 bajty.Applesoft BASIC,
930783782727719702695637 bajtów-72 bajty i działający program dzięki pułapkowi cat wykrywając mój błąd i skrócony algorytm
Wersja bez golfa tutaj.
Po podaniu danych wejściowych
1
:Po podaniu danych wejściowych
2
:źródło
EXP(X)/(2*3.14159*S1*S1)
EXP(X)*M