O serii
Po pierwsze, możesz potraktować to jak każde inne wyzwanie związane z golfem i odpowiedzieć na nie, nie martwiąc się w ogóle serią. Istnieje jednak tabela wyników dla wszystkich wyzwań. Możesz znaleźć tabelę liderów wraz z kilkoma więcej informacji o serii w pierwszym poście .
Chociaż mam szereg pomysłów w szeregu, przyszłe wyzwania nie są jeszcze ustalone. Jeśli masz jakieś sugestie, daj mi znać w odpowiednim poście z piaskownicą .
Otwór 2: Liczby z rozkładu normalnego
Nie mogę uwierzyć, że jeszcze tego nie zrobiono! Masz generować liczby losowe, czerpiąc z normalnego rozkładu . Niektóre reguły (większość z nich jest prawdopodobnie automatycznie objęta większością zgłoszeń, ale niektóre z nich istnieją, aby zapewnić spójność wyników w bardzo różnych językach):
Powinieneś wziąć dwie nieujemne liczby całkowite jako dane wejściowe : ziarno
S
i liczbęN
liczb do zwrócenia. Wyjściem powinna być listaN
liczb zmiennoprzecinkowych, sporządzona z rozkładu normalnego ze średnią 0 i wariancją 1 . Ilekroć twoje zgłoszenie otrzyma to samo ziarnoS
, powinno ono dać ten sam numer. W szczególności, jeśli zostanie wywołany raz z i raz z , pierwsze wpisy dwóch wyjść powinny być identyczne. Ponadto co najmniej 2 16 różnych wartości powinno dawać różne sekwencje.(S, N1)
(S, N2)
min(N1, N2)
S
Możesz użyć dowolnego wbudowanego generatora liczb losowych, który jest udokumentowany, aby rysować liczby z (w przybliżeniu) równomiernego rozkładu, pod warunkiem, że możesz to przekazać
S
i obsługuje on co najmniej 2 16 różnych nasion. Jeśli to zrobisz, RNG powinien mieć możliwość zwrócenia co najmniej 2 20 różnych wartości dla dowolnej liczby, o którą prosisz.- Jeśli dostępny jednolity RNG ma mniejszy zasięg, nie nadaje się do wysiewu lub obsługuje zbyt mało nasion, musisz albo najpierw zbudować jednolity RNG o wystarczająco dużym zasięgu na wbudowanym, albo musisz zaimplementować własny odpowiedni RNG za pomocą nasiono. Ta strona może być do tego pomocna.
- Jeśli nie wdrożysz ustalonego algorytmu generowania normalnych rozkładów, dołącz dowód poprawności. W obu przypadkach wybrany algorytm musi dawać teoretycznie dokładny rozkład normalny (ograniczenia blokujące leżące u podstaw PRNG lub typy danych o ograniczonej precyzji).
- Twoja implementacja powinna używać i zwracać albo liczby zmiennoprzecinkowe (o szerokości co najmniej 32 bity), albo liczby o stałym punkcie (o szerokości co najmniej 24 bity), a wszystkie operacje arytmetyczne powinny wykorzystywać pełną szerokość wybranego typu.
- Nie wolno używać żadnych wbudowanych funkcji bezpośrednio związanych z rozkładem normalnym lub całkami Gaussa, takich jak funkcja Błąd lub jej odwrotność.
Możesz napisać pełny program lub funkcję i pobrać dane wejściowe za pomocą STDIN, argumentu wiersza poleceń, argumentu funkcji lub pytania i wygenerować dane wyjściowe za pomocą wartości zwracanej lub drukując do STDOUT (lub najbliższej alternatywy).
S
i N
będą liczbami całkowitymi nieujemnymi, każda mniejsza niż 2 20 . Dane wyjściowe mogą być w dowolnym wygodnym, jednoznacznym formacie listy lub ciągu.
To jest kod golfowy, więc wygrywa najkrótsze przesłanie (w bajtach). I oczywiście najkrótsze zgłoszenie na użytkownika wejdzie również do ogólnej tabeli liderów serii.
Tabela liderów
Pierwszy post z serii generuje tabelę wyników.
Aby mieć pewność, że Twoje odpowiedzi się pojawią, zacznij każdą odpowiedź od nagłówka, używając następującego szablonu Markdown:
# Language Name, N bytes
gdzie N
jest rozmiar twojego zgłoszenia. Jeśli poprawić swój wynik, to może zachować stare porachunki w nagłówku, uderzając je przez. Na przykład:
# Ruby, <s>104</s> <s>101</s> 96 bytes
(Język nie jest obecnie wyświetlany, ale fragment go wymaga i analizuje, a w przyszłości mogę dodać tabelę wyników według języków).