Znajomy ma w komputerze dodatkową kartę, która generuje całkowicie losową liczbę od 1 do 5 włącznie. Niestety rozlali na nią colę i teraz generuje tylko 2 dla wszystkich liczb od 1 do 4. Na szczęście losowość zostaje zachowana, ale prawdopodobieństwo 2 wynosi 80%, a prawdopodobieństwo 5 wynosi 20% i nie ma Wygenerowano 1, 3 lub 4. Korzystając z tego losowego źródła (nazwij to BrokenRand()
lub coś podobnego), napisz działający generator liczb losowych, który produkuje liczby od 1 do 5, z prawdopodobieństwem równym 20% z tą samą idealną losowością jak oryginalne źródło.
Najkrótszy program wygrywa. Punkty premiowe przyznawane za minimalną liczbę połączeń BrokenRand
bezstronnie przez wybraną demograficznie firmę doradczą skoncentrowaną na obsłudze klienta, w podziale na wiek i płeć - tj. Mnie.
źródło
Scala 79 znaków:
Teraz dla prawdziwego golfa zmieniono alias defektRNG na brokenRand na b.
Jak to działa: Najczęściej b zwraca ciąg 2. Ale jeśli wykonasz 5 połączeń do b, bardzo często zakończysz wynikiem 4x2 i 1x5, jest to drugie najbardziej prawdopodobne zdarzenie i może być 5-2-2-2-2, 2-5-2-2 -2, 2-2-5-2-2, 2-2-2-5-2 i 2-2-2-2-5.
Łączy je to, że suma wynosi 4 * 2 + 5 = 13. Indeks pierwszych pięciu można użyć do zdefiniowania prawidłowej liczby losowej. Jeśli jest więcej lub mniej niż jedna 5, suma większa lub mniejsza 13, powtórz.
Licznik w „rnd” aka „r” może pokazywać, ile połączeń potrzeba średnio do wyprodukowania numerów. Istnieje 121 200 połączeń z r dla 50 000 losowych numerów, co nie robi wrażenia. :)
źródło
> <> (Ryba) - 55 bajtów
Zaktualizowano, aby używał tego samego algorytmu, co @user nieznany w swojej odpowiedzi Scala
Oczekuje, że uszkodzony generator zostanie podłączony do standardowego wejścia; oto skrypt Pythona, którego użyłem . Kod odpowiada bieżącej specyfikacji Fisha, ale użyłem zmodyfikowanej wersji starego interpretera.
Zrobiłbym większą próbkę, ale jest wolny.
źródło
GolfScript, 23 bajty
Późna odpowiedź, ale odkąd to się właśnie pojawiło na pierwszej stronie ...
Używa tego samego algorytmu, co rozwiązanie Scala dla nieznanego użytkownika . Zakłada, że tendencyjny generator liczb losowych jest podany jako podprogram Golfs o nazwie
r
; możesz sam zdefiniować odpowiedni stronniczy RNG, np. jako:Oto szybki test wykazujący brak uprzedzeń. Niestety, internetowy serwer GolfScript działa dość wolno, więc musiałem ograniczyć demonstrację do zaledwie 100 próbek, aby ukończyć ją na czas. Jeśli uruchamiasz test lokalnie za pomocą interpretera GolfScript , spróbuj zwiększyć wartość
100*
do1000*
lub nawet10000*
.(Serwer GolfScript czasami czasami zawiesza się i limit czasu. Jeśli tak się stanie, ponowna próba zwykle go rozwiązuje. Dzieje się tak również z innym kodem i dzieje się to tylko na serwerze, a nie na moim komputerze, więc jestem pewien że jest to problem z serwerem, a nie z moim kodem).
źródło
javascript, 160 znaków bez zmniejszania czytelności czyli optymalizacji
źródło
BrockenBand()
jest?BrockenRand
function giveRandom(){return Math.ceil(Math.random()*5)}