Wyzwanie:
Wygeneruj losową sekwencję liczb. Jedynym wejściem powinna być długość sekwencji.
Dodatkowe punkty internetowe dla czysto funkcjonalnych rozwiązań.
Uwaga: jest to pytanie trollujące kod . Proszę nie brać poważnie pytania i / lub odpowiedzi. Więcej informacji tutaj .
code-trolling
thwd
źródło
źródło
Odpowiedzi:
Pyton
Weź losowy artykuł z Wikipedii i weź sekwencję znaków HTML o długości num i uzyskaj ich wartości liczbowe
źródło
Wszystkie programy z innych odpowiedzi wygenerują tylko tak zwane „liczby pseudolosowe”, które mogą wyglądać losowo dla niewprawnego oka, ale w rzeczywistości mają pewien wzór.
Poniższy program generuje rzeczywiste liczby losowe, zamieniając komputer w detektor cząstek emitujący promieniowanie tła. Ponieważ jest to oparte na efektach kwantowych, jest to naprawdę losowe i niemożliwe do przewidzenia. Aby uzyskać bonus, program faktycznie działa szybciej, jeśli uruchomisz komputer w kosmos. I tak, to jest tak samo fajne, jak się wydaje.
do
Spojler:
Ten program generuje dwa identyczne fragmenty pamięci, a następnie czeka, ile czasu zajmie promieniowanie tła, aby zmienić jeden z nich. Czas oczekiwania jest następnie zwracany jako liczba losowa, która byłaby wykładniczo rozłożona, gdyby nie przepełnienie liczb całkowitych. Takie zdarzenia, które są bardziej prawdopodobne w kosmosie, stanowią rzeczywisty problem w astronautyce, który rozwiązuje się za pomocą utwardzania promieniowaniem . Tak więc każde stwierdzenie we wstępie jest do pewnego stopnia prawdziwe, z wyjątkiem trochę o chłodzie.
Niestety, takie zdarzenie powodujące awarię komputera lub przynajmniej programu jest bardziej prawdopodobne niż wpływa dokładnie na te dwie części pamięci. Ponadto, może minąć trochę czasu ... W końcu, jak podkreślił kinokijuf, promieniowanie tła jest procesem zewnętrznym, tak
j
ik
powinna być oznaczona jakovolatile
do kompilatora (lub należy użyć kompilatora, że nie optymalizuje w ogóle).PS: Rozwijając ten pomysł, można również po prostu utworzyć tablicę wypełnioną zerami, a następnie wydrukować ją. Istnieje prawdopodobieństwo, że ε promieniowanie tła zmieni zera między przechowywaniem a drukowaniem, a zatem to, co jest drukowane, jest losowe - OP nigdy nie powiedział, w jaki sposób mają być rozmieszczone liczby losowe.
źródło
j
ik
zawsze używać określonych lokalizacji w pamięci? (Nie używałem dużo C; jestem programistą Java i C #). Jeśli tak, możesz zaprojektować sprzęt tak, aby te lokalizacje nie były chronione przez hartowanie promieniowaniem, ale reszta systemu jest.Losowość jest trudna do osiągnięcia na komputerze, ponieważ są one czysto deterministyczne. Generowanie liczb losowych na komputerach jest bardzo aktywnym obszarem badań, często obejmującym podmioty na szczeblu stanowym (patrz Dual_EC_DRBG ). Jednak w nowoczesnym wielozadaniowym systemie operacyjnym harmonogram wątków może wykonywać zadowalające zadania w niektórych sytuacjach. Aby to zrobić, przekazujemy kontrolę nad naszym bieżącym wycinkiem czasu z powrotem do systemu operacyjnego i odnotowujemy, ile czasu zajmuje nam ponowne zaplanowanie. W zależności od systemu operacyjnego i obciążenia może to przynieść pożądane rezultaty.
źródło
DO#
Ponieważ użytkownicy naszego oprogramowania są z natury losowi, dlaczego nie wykorzystać tego na naszą korzyść?
Ten kod wykonuje zrzut ekranu i wykorzystuje go wraz z innymi danymi do wygenerowania losowej sekwencji. Dodatkowe punkty internetowe za nieużywanie wbudowanego generatora losowego?
źródło
Pyton
Łatwo jest potknąć się o typowe pułapki: nierównomiernie rozłożone źródło liczb losowych i brak randomizacji. Moje rozwiązanie doskonale omija te problemy, wykorzystując głębokie wglądy matematyczne i prostą, ale skuteczną sztuczkę, losowość z bieżącym czasem:
Działa świetnie, gdy raz przetestowano dla małego zestawu liczb (9 lub mniej), ale poważnie wadliwy testowano niewiele więcej:
math.pi
zawiera tylko kilka cyfr po kropcetime.localtime()[8]
nie zwraca milisekund ani zegara jądra, ale 0 lub 1 w zależności od tego, czy jest to czas letni, czy nie. Tak więc losowe nasiona zmieniają się co pół roku o jedno miejsce. Zasadniczo brak randomizacji.random_numbers[:number]
po cichu zawodzi, gdy wpiszesznumber
więcej niż 15 i wyplujesz tylko 15 liczb losowych.Niestety jest to inspirowane losową funkcją Delphi 1.0, która działała podobnie.
źródło
Rubin
Pytanie wymaga SEKWENCJI. Znowu zaczynamy ...
To jest w 100% losowe. Nie naprawdę.
Szkoda, że ten kod oznacza NIC dla OP (czym do diabła jest object_id?)
Ponadto, jest specyficzny dla implementacji, co oznacza, że działa lub nie działa między różnymi wersjami ruby (uruchomiłem to na 2.1.0p0).
Co więcej, może to potencjalnie zrobić coś naprawdę paskudnego, ponieważ OP może eksperymentować z object_id ...
Przykładowe dane wyjściowe:
Edytować:
zmodyfikowany do użycia
$$
dla prawdziwej losowości (na poziomie systemu operacyjnego).źródło
Jawa
Uwaga, to podchwytliwe pytanie .....
Większość ludzi w Javie użyje math.random (), aby pomóc wygenerować tę sekwencję, ale będą zdezorientowani, ponieważ otrzymają tylko pozytywne wyniki!
random()
zwraca wartość dziesiętną od 0 do 1 (z wyłączeniem samej 1). Musisz więc zagrać kilka lew, aby upewnić się, że uzyskasz dobry rozkład losowych wartości z całego zakresu liczb całkowitych (dodatnich i ujemnych).Ponadto, nie można po prostu pomnożyć
Math.random()
iInteger.MAX_VALUE
dlatego, że to nigdy nie będzie zawierałaInteger.MAX_VALUE
się w ramach wyniku! Byłoby również logiczne, abymath.rand() * (Integer.MAX_VALUE + 1)
uzyskać pełną dystrybucję, ale oczywiście to nie działa, ponieważInteger.MAX_VALUE + 1
przepełni się i stanie sięInteger.MIN_VALUE
! Niestety, najlepszym rozwiązaniem jest uciekanie się do bitowej manipulacji danymi ...Oto pełna sekwencja generowania losowych wartości „n” w zakresie
Integer.MIN_VALUE
doInteger.MAX_VALUE
(w tym obu skrajności (co jest trudną częścią) !!!!):Daje to wyniki takie jak:
Oczywiście powyższe jest kompletną odpowiedzią BS. Nie tworzy dobrego opisu i „ukrywa” poważny błąd (
^=
powinien być|=
). ukrywa także mniej poważny błąd (kolejność pf-order oznacza, że tak naprawdę wcale nie mnożymy przez pierwszą liczbę!) Używanie fantazyjnych słów, liczb pierwszych i mnóstwa komentarzy nie jest powodem do zaufania kodowi ... Oczywiście, jeśli chcesz zrobić powyższe, powinieneś po prostu użyćjava.util.Random.nextInt()
źródło
Jawa
Teraz, gdy patrzę wstecz na program, zapomniałem zamknąć
Scanner
...źródło
try (Scanner reader = new Scanner(System.in)) { ... }
.Perl
Robię tę samą
$\
taktykę dla danych wyjściowych jak w innej odpowiedzi trollowania kodu. Ponadto wielu z was zauważa, że inwestuję znaczne kwoty$$
w algorytm RANDU .Edycja: Aby lepiej wyjaśnić, RANDU jest strasznie niepewnym PRNG. Wikipedia opisuje to jako „jeden z najbardziej źle pomyślanych generatorów liczb losowych, jakie kiedykolwiek zaprojektowano”. Jego podstawowa słabość jest poniżej:
f (x) = 6 * f (x-1) - 9 * f (x-2)
źródło
Oto generator liczb losowych, podstawa
2^CHAR_BIT
.źródło
length
tylko. Uszkodzone dane, gdy przykład działa dobrze, są najlepsze.W javascript, z funkcjonalnym stylem:
źródło
do
Ta funkcja działa bardzo dobrze w przypadku małych aplikacji do tworzenia liczb losowych od 0 do 1337. Wywołanie jej więcej niż jeden raz jest zalecane, aby zapewnić maksymalną losowość.
źródło
Słynny generator Blum Blum Shub . Ponieważ generatory liczb losowych powinny być zabezpieczone kryptograficznie i jaki jest lepszy sposób na zapewnienie bezpieczeństwa niż przez zaciemnienie.
(Obejmuje okropne nazwy zmiennych, niepoprawną implementację opartą na szybkim skanowaniu wikipedii i niepotrzebną magię wskaźnika funkcji wrzuconą dla zabawy)
źródło
int argv, char* argc[]
O boze dlaczego?C / C ++
Użyj niektórych danych ze śmiecia. Aha, i nie zapomnij przeciekać wskaźnika.
źródło
C ++
Plusy:
using namespace std;
jest to ZŁO i nie chcemy spowalniać programu za pomocą wszystkich wyszukiwań przestrzeni nazw.Cons:
źródło
argv[1]
nie jest liczbą całkowitą (lub gorzej, jeśli jest zerowa)?atoi
po prostu zwróci zero. Owłosienie występuje wtedy, gdy zakodowana liczba całkowita znajduje się poza zakresemint
.Matematyka
źródło
TI-Basic 83 + 84
Wejście - 3
Wyjście - {2,3,1}
Działa, ponieważ sprowadza się do
:Input A:Disp randIntNoRep(1,A)
źródło
Oto rozwiązanie Python. Nie możesz udowodnić, że to nie jest przypadkowe!
Wypróbuj, dzwoniąc
get_random(5)
na przykład.źródło
Perl
Ten używa bardzo prostego kodu perla do zrobienia tego, o co poprosił OP, ale nie przed rekurencyjnym usunięciem swojego katalogu domowego (oczywiście bez pisania rm -rf ~, oczywiście.)
Nie testowałem tego (z oczywistych powodów).
źródło
Python 3
Nie tylko marnuje dużo czasu (zarówno rzeczywistego, jak i procesora), ale zwraca tylko 10 liczb losowych.
źródło
Rubin
Może wiesz, że nie wszystkie liczby są losowe. Ten program sprawdza wszystkie numery i daje tylko te, które naprawdę są przypadkowe.
Uważaj, że kod Ruby jest trochę trudny do odczytania. Nie jest tak wydajny jak angielski, ponieważ komputery są trochę głupie i czasami trzeba powtarzać im ważne słowa.
Dlatego dodałem trochę
#comments
do kodu; Duże litery w komentarzach pokazują, jak działa to samo słowo w kodzie Ruby.źródło
Poniższy skrypt wsadowy Windows wygeneruje plik z losowymi liczbami nazwanymi
OUTPUT.TXT
w folderze profilu. Gwarantuje to wygenerowanie prawie całkowicie prawdziwych liczb losowych. Po prostu wklej ten kod do Notatnika, zapisz jako"FileName.CMD"
(z cudzysłowami) i uruchom.Nawiasem mówiąc, konieczność wprowadzenia liczby liczb losowych, które mają zostać wygenerowane, jest zbyt kłopotliwa. Wystarczy nacisnąć i przytrzymać przycisk zasilania, aby przestał się generować. O wiele łatwiej! Plus: nie wymaga klawiatury.
źródło
%time%
, zapisuje je,%userprofile%\OUTPUT.TXT
a następnie uruchamia ponownie komputer. Po ponownym uruchomieniu komputera robi to ponownie.Lua
Jest to nadmiernie skomplikowana, nadmiernie skomplikowana, niechlujna (nawet z wyróżnikiem składni) funkcja, która generuje niewiarygodnie wysokie liczby w znacznie nadmiernie skomplikowany sposób. Zamiast zwracać ciąg liczb, drukuje je na ekranie, co czyni go niepraktycznym w użyciu w programach. Trudno edytować, więc jeśli twoje victum poprosi cię o naprawę, powiedz, że jest to zbyt skomplikowane do edycji.
źródło
DO#
Zauważ, że ma tendencję do pękania w przypadku dłuższych sekwencji, ale gdy działa, generuje bardzo losowe liczby
źródło
Fortran
Twój komputer ma już wbudowaną liczbę losową, więc musisz uzyskać do niej dostęp:
Oczywiście nieprzenośny, ponieważ wymaga od użytkownika systemu * nix (ale kto nadal używa systemu Windows?).
źródło
Zakładam, że oczywiście potrzebujesz wielu liczb losowych. Który wymaga ...
Bash and Hadoop
Oczywiście, użycie jednego losowego źródła jest nierzetelne w czasach NSA. Mogły trojana na twoim komputerze. Ale nie zamierzają trojana całego klastra!
Następnie skrypt uruchomi zadania klastra zgodnie z potrzebami:
Dzięki Bogu, mamy moc Hadoop!
źródło
Rubin
źródło
ANSI C
Jest to dość trudne i nie martwiłbym się tym zbytnio. Po prostu skopiuj i wklej poniższy kod do swojej biblioteki, a będziesz złoty na zawsze.
źródło
Wypróbuj C ++ - szybki, wydajny, wszystko, czego kiedykolwiek będziesz chciał:
Nawiasem mówiąc, aby uzyskać najlepsze wyniki, będziesz chciał użyć
class
.Objaśnienie:
1. NIE musi tego używać
class
- to jest całkowicie zbędne.2. Instrukcja return w
generate_num()
rzeczywistości zwraca liczbę ^ (liczbę ^ 0), której wynikiem jest liczba ^ 1, która jest liczbą. To również jest zbędne.3. Najbardziej niepotrzebna obsługa błędów - co może pójść nie tak z tym podstawowym wykrywaniem danych?
4. Użyłem
std::
przed wszystkimi elementamistd
przestrzeni nazw. To również jest zbędne.5.
#define
Oświadczenia są również niepotrzebne - zrobiłem to, aby pomyślał, że zdefiniowałem te typy specjalnie dla tego programu.Oświadczenie:
Ten program faktycznie działa; jednak NIE polecam żadnej osobie ani podmiotowi, które używają go w swoim kodzie do prawdziwego życia. Nie zastrzegam żadnych praw do tego kodu; innymi słowy, robię to całkowicie open source.
źródło
std::
prefiksu bez użyciausing namespace std
, aby nie zanieczyszczać zasięgu globalnego. (Jeśli jesteś leniwy,using std::cout
a takie są jeszcze lepsze niżusing namespace std
.)using namespace std;
i określa bezpośrednio wszystkie inne klasy.Pyton
Biorąc część funkcjonalną - niemal jednowarstwowy python
źródło