Wprowadzenie
Otrzymujesz losowy generator liczb całkowitych z następującą implementacją
- Pierwsze wywołanie zawsze zwraca 1.
- Drugie wywołanie zwraca losową liczbę całkowitą od 1 do 2.
- Trzecie wywołanie zwraca losową liczbę całkowitą od 1 do 3.
- N-te wywołanie zwraca losową liczbę całkowitą od 1 do n włącznie.
Opierając się na powyższej funkcji, napisz losowy generator kości, który jest całkowicie losowy, zwracając wartość od 1 do 6 (włącznie) z jednakowym prawdopodobieństwem.
Zasady
- Twój program / funkcja powinna dać losową liczbę całkowitą od 1 do 6 włącznie, w pewnej użytecznej formie, tj. Do standardowego wyjścia lub jako wartość zwracaną przez funkcję.
- Generator rosnących liczb losowych powyżej można zdefiniować jako „darmową” funkcję w twoim programie (tj. Nie liczy się do liczby znaków) lub jako osobny skrypt / program, który jest wykonywany w razie potrzeby, zakładając, że stan (
n
) jest trwały między połączeniami. - Załóżmy, że w jednym przypadku użycia twojego programu nigdy nie będzie wymagane więcej niż 1000 rzutów kości, a początkowy generator liczb losowych można zresetować
1
na końcu 1000 rzutów kości, aby uniknąć przepełnienian
. - Twój program nie może używać żadnego innego źródła liczb losowych, z wyjątkiem rosnącego generatora losowego zdefiniowanego powyżej. Możesz oczywiście poprosić o wiele losowych liczb z generatora liczb losowych dla każdego wyniku rzutu pojedynczymi kostkami.
- To jest golf golfowy, więc zwycięzca jest najkrótszą odpowiedzią lub większością głosów w przypadku remisu. Jeśli możesz wygenerować 1000 rzutów kostką przy użyciu mniej niż 1000 losowych liczb, daj sobie 10-punktowy bonus wydajności .
Przykład
./asc-rand
1 # random integer between 1 and 1
./asc-rand
1 # random integer between 1 and 2
./asc-rand
3 # random integer between 1 and 3
./asc-rand
4 # random integer between 1 and 4
# dice-gen generates random dice based on output of asc-rand program.
./dice-gen
3
./dice-gen
6
./dice-gen
5
./dice-gen
1
iterate(6):b=asc-rand(); print b
nielegalny czy nie działa? Mogę nie rozumieć trzeciej zasady.