Ponieważ nie ma wystarczającej liczby prostych wyzwań związanych z golfem :
Utwórz opcjonalnie nienazwany program lub funkcję, która, podając (w jakikolwiek sposób) liczbę całkowitą 1 ≤ N ≤ 10000, generuje wartość True Twojego języka z pseudolosowym prawdopodobieństwem 1 / N, w przeciwnym razie False.
Pamiętaj, że wymóg nazewnictwa został usunięty. Możesz odpowiednio edytować odpowiedzi i wyniki.
Niektóre języki używają 1 (lub -1) i 0 dla Prawda i Fałsz, to też jest w porządku.
Przykład:
Przykładowe testy wejściowe:
4 -> True
4 -> False
4 -> False
4 -> False
4 -> False
4 -> True
4 -> False
4 -> False
Tj. Podano 4; zwraca True z 25% szansą i False z 75% szansą.
N
musimy zaakceptować?Odpowiedzi:
Szablony MediaWiki z ParserFunctions , 48 bajtów
źródło
#time
, prawdopodobnie w celu aktualizacji wieku żywych ludzi itp.Pyth, 3 bajty
Wypróbuj online
Prosta inwersja losowego wyboru z 0 na wejście
Zabawnie w Pyth nie można stworzyć funkcji, która to robi,
$
ponieważ funkcje Pyth są automatycznie zapamiętywane.źródło
Q
wypełnienie na końcu, bo inaczej bym odpowiedział!O
;)CJam, 5 bajtów
Muszę być szybki z tymi ...
Sprawdź to tutaj.
Wyjaśnienie
źródło
TI-BASIC, 4 bajty przy użyciu tokena jednobajtowego
Określa, czy całkowita liczba wejściowa razy liczba losowa w [0,1) wynosi zero.
Ansrand<1
działa również.źródło
MATL, 5 bajtów
Trzy różne wersje tego jednego, wszystkie o długości 5.
który pobiera dane wejściowe (
i
), generuje losową liczbę całkowitą między 1 a tą liczbą (Yr
) i sprawdza, czy jest ona równa 1 (1=
). Alternatywnie,wykonaj 1 (
l
obejście, ponieważ1i
w tej chwili występuje błąd ), weź dane wejściowe (i
), podziel, aby uzyskać 1 / N (/
), zrób losową liczbę od 0 do 1 (r
) i sprawdź, czy losowa liczba jest mniejsza niż 1 / N. Lub,weź i wprowadź (
i
) i pomnóż przez losową liczbę od 0 do 1 (r*
) i sprawdź, czy wynik jest mniejszy niż 1 (1<
).W Matlab, a nie MATL, możesz wykonywać tę anonimową funkcję
dla 12 bajtów, które są używane
ans(5)
np. przez wykonanie .źródło
JavaScript ES6, 15 bajtów
-5 bajtów dzięki Downgoat.
Na podstawie (zastosowań) techniki tej odpowiedzi.
źródło
new Date
może również działać i może zaoszczędzić kilka bajtówJulia,
171615 bajtówJest to funkcja, która generuje losową liczbę całkowitą od 1 do
n
i sprawdza, czy jest ona mniejsza niż 2. Będzie to miało 1 / n szansę na to, a zatem 1 / n szansę na powróttrue
.Oszczędność 1 bajtu dzięki Thomasowi Kwa!
źródło
Microscript II , 3 bajty
Odczytuje liczbę całkowitą
n
, generuje losową liczbę całkowitą pomiędzy0
in-1
(włącznie), a następnie stosuje do tej wartości negację logiczną.źródło
Cukierki , 2 bajty
H oznacza Heisen-double
n oznacza nie
„N” jest przekazywane z flagą -i jako wejście numeryczne. Wartości pozostawione na stosie są drukowane przy wyjściu.
"Długa forma:
źródło
-i
jako jeden bajt.lambda x: random.random()<1/x
(nie golfowym) jest również „określone za darmo”, że argument jest liczbą.Poważnie, 3 bajty
0
jest falsey i1
jest prawdą. Wypróbuj onlineWyjaśnienie:
źródło
R,
3022 bajtówkod
Generuje liczbę z równomiernego rozkładu (od 0 do 1) i powinna być obliczona do prawdziwej 1 / n razy.
źródło
Japt, 6 bajtów
Wypróbuj online!
Mr
jest odpowiednikiem JSMath.random
. Reszta jest dość oczywista. Prawdopodobnie mógłbym dodać funkcję liczbową, która generuje losowe liczby zmiennoprzecinkowe między 0 a liczbą. Kiedy tak się stanie, zostaną zapisane dwa bajty:Alternatywna wersja:
Ð
jest równoważnenew Date(
, a obiekt Date, gdy zostanie poproszony o konwersję na liczbę, staje się bieżącym znacznikiem czasu w milisekundach. Jest to więc całkowicie losowe, chyba że jest uruchamiane wiele razy na ms.źródło
Cudowny , 21 bajtów
Uznałem, że jestem
0
falseyem i1
prawdę, chociaż nie ma prawdziwego powodu, aby widzieć, że Marbelous tak naprawdę nie ma „if”. Więcej Marbelousy zostanie wydane na{0
rzecz prawdy i{>
fałszu. Wyglądałoby to tak:Ale nie jestem pewien, czy to ważne.
źródło
APL,
63 bajtyJest to ciąg funkcji, który przyjmuje liczbę całkowitą i zwraca 1 lub 0 (prawda / fałsz APL). Generujemy losową liczbę całkowitą od 1 do wejścia za pomocą
?
, a następnie sprawdzamy, czy wejście jest równe tej liczbie całkowitej. Daje to szansę na prawdziwość 1 / wejście.Zaoszczędź 3 bajty dzięki Thomasowi Kwa!
źródło
⊢
zamiast „+”, ponieważ+
oznacza Koniugat dla liczb zespolonych. Oczywiście nie ma to tutaj znaczenia i+
jest to tradycyjna funkcja tożsamości (no-op), ale teraz mamy⊢
(to samo). Inne brak operacji dla skalarów to:⌷
(materializacja),⊃
(pick),⊂
(załącz),↑
(split),↓
(mix),∪
(unikalny),∊
(enlist),,
(ravel),⍪
(table),⌽
(reverse),⊖
(reverse) najpierw) i⍉
(transponuj). Niektóre zmieniają skalar na wektor lub macierz.PlatyPar , 3 bajty
#?
pobiera losową liczbę, w[0,n)
którejn
jest wprowadzany.!
zwraca,true
jeśli poprzednia liczba0
, w przeciwnym razie zwracafalse
.Używając nowszych funkcji, które zostały zaimplementowane (ale niestety dla mnie nie popełniono), zanim zadano to pytanie, mogę obniżyć do 2 dzięki
~!
Wypróbuj online !źródło
Java, 43 bajty
źródło
a->a*Math.random()<1
jest krótszy.C, 24 bajty
źródło
return
bez”f(n)
nie ma żadnego sensu składniowego.rand()%n
jest standardowym sposobem uzyskiwania losowej liczby z zakresu0..n-1
. Masz rację, polega on nan
tym , że jest znacznie mniejszy niż,RAND_MAX
ale nie ma górnej granicy dlan
wymienionych w pytaniu. Alternatywnym podejściem byłoby odrzucić in
przerzucić wszystkie liczby od do RAND_MAX, ale byłoby to beznadziejnie nieefektywne przy małychn
.> <>, 27 + 3 dla -v = 30 bajtów
Oto niejednolite rozwiązanie, w którym modyfikuję N sumę 15876 losowych wyborów 0 lub 1:
N musi być wprowadzone na stos z flagą -v, wyjście to 0 dla falsey i 1 dla prawdy.
O wiele inteligentniejsze i jednolite rozwiązanie, które zamiast tego działa dla 1/2 N:
Dla wejścia 3 masz 1/8 szans na uzyskanie 1 i 7/8 na uzyskanie 0.
Objaśnienie:
Dołączam tyle,
x
ile potrzeba na czwartej linii ix
otaczam je kierunkami, więc są tylko dwa wyjścia : albo falsey, albo następnyx
. Jeśli wszystkox
pójdzie we właściwym kierunku, ostatni doprowadzi do prawdziwego wyniku.Na przykład dla N = 5 końcowa przestrzeń kodowa jest następująca:
źródło
(iterNum/2)%N
. Nie sądzę też, aby użycie mniejszej liczby było rozwiązaniem. Czy może nie do końca cię zrozumiałem, czy może masz jakiś pomysł na lepsze rozwiązanie?Mathematica,
1816 bajtówPodstawowe rozwiązanie. Bezimienna
Function
tworzy losową liczbę w [0, 1), mnoży ją przez argument i sprawdza, czy wciąż jest mniejsza niż 1.źródło
Python, 42 bajty
Edycja : Usunięto
time.time()
odpowiedź z powodu dystrybucji.źródło
random
wartofrom random import*
oszczędzaćrandom.
.time
Ale nie na pewno.n
efekt może być zauważalny. Myślę, że1>time.time()%1*n
może działać.rand
C itime.time
Pythonem ... Jedną oczywistą cechą tego ostatniego jest to, że zwraca on bieżący czas , który jest nieograniczony, dzięki czemutime.time()%n
ma jednolity rozkład (przez wystarczająco długi okres czasu) dla każdegon
.TeaScript , 3 bajty
Wypróbuj tutaj.
Wyjaśnienie
źródło
®
znak reprezentuje znak,'\xae'
więc jest to tylko jeden bajt. :)Rozmyte Octo Guacamole, 10 bajtów
Wyjaśnienie:
źródło
Perl 6 ,
108 bajtówTen kod tworzy zakres od 0 do zera, ale z wyłączeniem danych wejściowych
*
. Następniepick
jest losowy i!
zwraca True, gdy otrzyma0
.To pobiera dane wejściowe
*
i mnoży je przez losową wartość Num,0..^1
a następnie zwraca wartość True, jeśli była mniejsza niż1
.źródło
Prolog (SWI), 24 bajty
Kod:
może (+ P) jest funkcją, która kończy się prawdopodobieństwem P, a kończy się niepowodzeniem z prawdopodobieństwem 1-P
Przykład:
źródło
PowerShell, 25 bajtów
Get-Random
Funkcja gdy otrzymuje-Ma
parametr ximumn
zwraca wartość z zakresu[0,n)
. Wykorzystujemy to, odejmując 1 od naszych danych wejściowych$args[0]
, więc jesteśmy właściwie indeksowani do zera i otrzymujemy losową wartość. Dokładnie1/n
w tym czasie ta wartość będzie0
, więc kiedy my Boolean, nie razem z!
nią wróciTrue
. Inne czasy powrócąFalse
.źródło
J, 3 bajty
To monadyczny widelec, który bierze argument po prawej stronie. Podobnie jak APL? generuje losową liczbę całkowitą; jednak tablice J są zerowane. Porównujemy więc do 0 zamiast do wejścia.
źródło
Minkolang 0,14 , 7 bajtów
Wypróbuj tutaj.
Wyjaśnienie
źródło
PHP, 22 bajty
Czyta
n
z wiersza poleceń, na przykład:Dane wyjściowe
(
false
jest rzutowany na pusty ciąg w PHP) lub1
(w przypadkutrue
).źródło
C #,
5645 bajtówDzięki pinkfloydx33 jest teraz 45.
Stare 56 bajtów
Generuje losową liczbę całkowitą dodatnią większą lub równą 0 i mniejszą niż
n
i sprawdza, czy jest mniejsza1
i zwraca wynik porównania.źródło
Random.Next(k)
zwraca taką liczbę całkowitąk
, że0 <= k < n
. Zmiana warunku na<1
będzie poprawna. Ponadto użycie wyrażenia lambda może skrócić Twój kod.0 < k <= n
i powinno być tak, jak powiedziałeś. Zaraz to poprawię.var r
zapisuje trzy. Lub jeśli c # 6,bool a(int n) => new Random().Next(n)<1;
dla 41. Chociaż nie jesteś pewien, czy inicjowanie nowegoRandom
wywołania metody będzie działało poprawnie w zakresie dystrybucji?Scratch , 63 bajty
Wypróbuj online!
Zdjęcie: kod Scratchblocks :
źródło