Zadanie
Zadanie polega na napisaniu programu, który wypisze spójną, ale poza tym dowolną liczbę całkowitą dodatnią (tak ściśle większą niż 0). Oto haczyk: gdy źródło jest powtarzane razy (kod jest dołączany / łączony do siebie), program powinien mieć prawdopodobieństwo wyprowadzeniaa pozostałe prawdopodobieństwo wyjścianiezmienione.
Przykład
Załóżmy, że twoim początkowym źródłem jest XYZ
liczba całkowita 3
. Następnie:
Dla :
XYZXYZ
powinno wyprowadzać z prawdopodobieństwem (50% czasu) iz prawdopodobieństwem również (50% czasu).Dla :
XYZXYZXYZ
należy wyprowadzić z prawdopodobieństwem (66,666% czasu) iz prawdopodobieństwem (33,333% czasu)Dla :
XYZXYZXYZXYZ
należy wyprowadzić z prawdopodobieństwem (75% czasu) i z prawdopodobieństwem (25% czasu)
i tak dalej....
Zasady
Musisz zbudować pełny program . Wyjście musi zostać wydrukowane do STDOUT.
Twój program powinien teoretycznie wypisywać każdą możliwą wartość z podanymi wyżej prawdopodobieństwami, ale niewielkie odchylenie od tego z powodu realizacji losowej jest w porządku ( pod warunkiem, że implementacja nie ma innego rozkładu - nie możesz użyć rozkład normalny, aby zapisać bajty ) .
Program powinien (znowu teoretycznie) praca dla dowolnie dużej wartości , ale ograniczenia techniczne dzięki precyzyjnym są w porządku dla dużych .
Dane wyjściowe muszą znajdować się w bazie 10 (wysyłanie danych do jakiejkolwiek innej bazy lub z notacją naukową jest zabronione). Dozwolone są spacje końcowe / początkowe i zera wiodące.
Początkowe źródło musi (oczywiście) mieć co najmniej 1 bajt. Być może nie przyjąć nowej linii między kopiami źródle. Program nie powinien pobierać danych wejściowych (lub mieć nieużywane, puste dane wejściowe).
To jest golf golfowy , więc wynikiem odpowiedzi jest długość (oryginalnego) źródła w bajtach, przy czym niższy wynik jest lepszy.
Uwaga: To wyzwanie jest (znacznie) trudniejszą wersją tego wyzwania .
źródło
Odpowiedzi:
R ,
6635 bajtów-29 bajtów dzięki digEmAll .
-2 bajty dzięki Giuseppe .
Wypróbuj online!
Sprawdź rozkład dla N = 4.
Kluczem jest przypisanie w prawoN razy, pierwsze N−1 wywołań
->
. Kiedy kod zostanie pomnożonysample
zostanie przypisanychA
i wydrukowane zostanie tylko ostatnie połączenie.Oryginalne, bardziej skomplikowane rozwiązanie:
R , 66 bajtów
Wypróbuj online!
Wypróbuj online (powtórzone 3 razy)!
Wykorzystuje dwie sztuczki: 1) wywołuje główną funkcję
?
będącą przedmiotem zainteresowania , dzięki czemu możemy ją wywoływać bez kończenia programu za pomocą nawiasu, oraz 2) używać zmiennychT
iTT
, z kodem, który zaczyna sięT
i kończy na?T
.F
jest licznikiem iteracji.?
jest redefiniowane jako funkcja, która przyjmuje argument boolowski: jeśli wejście?
jestTRUE
(lubT
), wykonuje wymagane losowe próbkowanie; jeśli dane wejściowe toFALSE
(lub0
), to nic nie robi. Wartość parametruTT
jest zdefiniowana jako0
, więc?T
pobiera próbki, ale?TT
nic nie robi.Gdy źródło jest powtarzane, wygląda to tak:
więc środkowe połączenie
?TT
generuje tylko?T
losowe połączenie.źródło
->
używany w golfie kodowym w sytuacji, w której<-
nie może być; To jest takie fajne!!Python 3 ,
8179 bajtówWypróbuj online!
-1 bajt dzięki @Nishioka
Jest to jedno rozwiązanie Python 3, które nie ma bezpośredniego dostępu do źródła programu. Wykonanie tego w Pythonie 3 jest trudniejsze niż w Pythonie 2, ponieważ normalne instrukcje drukowania kończą się nawiasami zamykającymi, więc nie ma wielu opcji zmiany ich zachowania w następnym bloku początkowego źródła. Ciekawie byłoby zobaczyć bardziej kreatywne rozwiązania w Pythonie 3.
źródło
+0 if[]else 1
Bash , 31 bajtów
Wypróbuj online!
trap ... 0
uruchomi kod zawarty przy wyjściu. Powtarzanetrap
s zastąpią stare. Cudzoziemiec$[arithmetic expansion]
jest uruchamiany za każdym razem, gdy ustawiana jest nowa pułapka.Zsh może zapisać jeden bajt dzięki
<<<
:źródło
Galaretka , 7 bajtów
Wypróbuj online!
źródło
05AB1E , 7 bajtów
Wypróbuj online!
źródło
Python 3 ,
787675 bajtówKorzystając z tej samej sztuczki, co w opublikowanym linku , tutaj jest Python (z x = 1).
Wypróbuj online!
-2 bajki dzięki panu Xcoderowi za jego
(n-1)
formułę,~-n
która ma wyższy priorytet niż*
-1 bajt dzięki Nishioce
źródło
import random;n=len(*open(__file__))//76;print(1+~-n*(random.random()<1/n))#
powinien działać dla -2 bajtówrandom()<1/n
;-)Dyalog APL,
2524232221 bajtówWypróbuj online!
źródło
Gaia ,
17151413 bajtówWypróbuj online!
Przypadkowo zauważyłem zachowanie
Øg
wczoraj, przeglądając dokumenty, co ogromnie pomogło.źródło
Perl 5,
2826 bajtów-2 bajty dzięki @Grimy
TIO
źródło
1 if!++$x;say 1<rand$x||$x
Rubinowy , 40 bajtów
Wypróbuj online!
Wypróbuj online (skopiowane 3 razy)!
Rubinowy port tej odpowiedzi w języku Python .
Rubinowy , 38 bajtów
2 bajty zapisane przez odczytanie pliku:
Wypróbuj online!
źródło
Runiczne Zaklęcia , 31 bajtów
Wypróbuj online!
Używa tej samej struktury co ta odpowiedź, aby policzyć, ile razy źródło zostało zduplikowane:
Po prostu zamiast wypisywania n-tej liczby z listy, używamy tej wartości do losowego generowania liczby, jeśli wynikiem nie jest 0, drukuj 1, w przeciwnym razie drukuj tę liczbę.
źródło
Japt ,
98 bajtówPrzetestuj | Podwojone | Potrójna
weryfikacja dystrybucji 10000 przebiegów po 10 powtórzeniach
Oryginał,
1311109 bajtówZwróć uwagę na spację końcową.
Przetestuj | Podwojone | Potrójna
weryfikacja dystrybucji 10000 przebiegów po 10 powtórzeniach
źródło
JavaScript ( powłoka JavaScript 71 ), 78 bajtów
Brak linku tio, spidermonkey na tio jest za stary ...
Firefox (Spidermonkey) uważa komentarz za część funkcji
f
. W rezultacie(''+f).length
będzieb+79n
gdzie b <78, a (n + 1) to czasy kodu źródłowego powtórzone.To buggy ( nie jestem pewien. Wolałbym, że to błąd specyfikacji JavaScript niż jakikolwiek interpreter ) zostało przesłane do BMO przez kogoś innego tuż po opublikowaniu tej odpowiedzi: https://bugzilla.mozilla.org/ show_bug.cgi? id = 1579792 . (Ani wątek Bmo, ani tweet nie są przeze mnie publikowane).
źródło
(async x=>x)()
? Dlaczego jest asynchroniczny?async
hroniczny. Tak więc wywołanie zwrotnex=>f(...)
zostanie wywołane pof
zdefiniowaniu funkcji .C # (interaktywny kompilator Visual C #) ,
133114112 bajtówJest to pierwszy (i mam nadzieję, że ostatni) raz, kiedy użyłem dyrektyw preprocesora C #.
Wypróbuj online!
źródło
Węgiel drzewny , 12 bajtów
Wypróbuj online! Na podstawie mojej odpowiedzi na powiązane pytanie. Wyjścia
n
z prawdopodobieństwem¹/ₙ
, w przeciwnym razie1
. Wyjaśnienie:źródło