Zaprojektuj generator liczb losowych, w którym i-ta liczba ma szansę wystąpienia i% dla wszystkich 0 <i <14. 0 powinno mieć dokładnie 9% prawdopodobieństwa wystąpienia. Ziarno generatora powinno być czasem systemowym. Nie można użyć wstępnie zdefiniowanej funkcji do generowania liczb losowych.
Zasadniczo 1 ma 1% szansy na wystąpienie, 2 ma 2% szansy i tak dalej aż do 13 z 13% szansą na wystąpienie. To jest golf golfowy, więc wygrywa najkrótszy kod.
code-golf
math
random
probability-theory
ghosts_in_the_code
źródło
źródło
<
nierówności i>
od bloku cytatu tworzyli znacznik HTML.Odpowiedzi:
CJam, 14 bajtów
Sprawdź to tutaj.
Wyjaśnienie
źródło
mR
?Python 2, 54
Wyrażenie
f(t) = ((8*t+1)**.5+1)//2
przekształca rozkład równomierny w rozkład liczb całkowitych trójkątnych poprzez odwzorowanie przedziałówW ten sposób konwertujemy milisekundowe cyfry czasu do jednolitej liczby zmiennoprzecinkowej od 0 do 100
time.time()*1e4%100
. W rzeczywistości%800
w kroku konwersji robimy zamianę mnożenia przez 8. Na koniec 14 jest konwertowane na 0 przez wykonanie%14
.źródło
Pyth - 14 bajtów
Generuje tablicę o określonym rozkładzie, a następnie wybierz losową.
Wypróbuj online tutaj .
źródło
Dyalog APL , 20 bajtów
⍳13
liczby całkowite 1 choć 13(/⍨
…)
powielają się same, np./⍨3
jest3 3 3
i/⍨2 3
jest2 2 3 3 3
n
↓
… upuść n elementów (pozostawia pustą listę, jeśli n > długość listy)⎕TS
znacznik czasu systemowego np. 2015 11 1 13 28 56 834⊃⌽
ostatni element, tj. bieżąca milisekunda 0–999⌊.1×
pomnożyć z 0,1 i zaokrąglenie⊃
pierwszego elementu, daje 0, jeśli dane są pusteźródło
Przetwarzanie 3, 65
5574bajtówUzyskaj losową liczbę od 0 do 99 (włącznie). Jeśli liczba to 0-8, wydrukuj 0, jeśli jest to 9 wydruk 1, jeśli 10-11 wydruk 2, jeśli 12-14 wydruk 3, itd ...
Nikt tego nie zauważył, ale problem ze starym kodem polega na tym, że millis () zwraca czas działania aplikacji, co dałoby bardzo podobne liczby przy kolejnych uruchomieniach programu. Przynajmniej teraz mamy nano precyzję!
źródło
PHP, 50 bajtów
microtime
zwraca czas jako ciąg znaków taki jak „0.04993000 1446409253”, kiedy pomnożę to przez 100, PHP wymusza ciąg do 0.04993000, wynik 4.993000. Więc$t
jest inicjowany z „random” numer w[0,100)
$t
aż osiągnie 0źródło
;echo
zamiast tego?><?=
, dla tej samej liczby bajtów. Ale ładnie zrobione!Python3, 86 bajtów
bezpośredni:
źródło
J - 28 znaków
Ten był głupi.
6!:0''
to aktualnyY M D h m s
czas w postaci 6-elementowej listy, w której milisekundy są przedstawiane jako ułamki sekund - aby się do nich dostać, nie mamy innego wyboru, jak pomnożyć sekundy ({:
) przez1e3
. Tymczasem#~i.14
jest lista zer 0, jeden 1, dwa 2 itd. Aż do trzynastu 13, a my uzupełniamy to do 100 pozycji za pomocą100{.
.J nie ma cyklicznego indeksowania, więc może być kuszące, aby wziąć milisekundy modulo 100 przed zindeksowaniem dużej listy. Możemy jednak zapisać dwa znaki, korzystając
$
z cyklicznego rozszerzania listy 100 elementów do dowolnej liczby milisekund, którą otrzymujemy (od 0 do 60999 ), a następnie weźmy ostatni wpis.Nie chodzi o to, że lista 60000 elementów zajmuje dużo pamięci lub coś w tym rodzaju, po prostu wydaje się, że to przesada: P
źródło
JavaScript (ES6) 116
Jest to adaptacja prostego rozstawionego RNG, którego użyłem zamiast standardowego RNG javascript, którego nie można rozstawić (a więc nie można go powtórzyć)
źródło
TI-BASIC, 18 bajtów
100fPart(sub(getTime
otrzymuje losową resztę od 0 do 99. (n-1) th liczba trójkątna jest równa(N^2+N)/2
, więc odwrotność jest równa√(2y+1)-.5
. Piętro to po zmniejszeniu o 9, a my mamy wynikJedynym problemem jest to, że dla reszt mniejszych niż 8 otrzymujemy wyimaginowany pierwiastek kwadratowy. Więc bierzemy prawdziwą rolę, aby zamiast tego program miał wyjście 0.
źródło
Perl 5, 51 bajtów
50 bajtów + 1 dla
-E
zamiast-e
:źródło