Biorąc pod uwagę sekwencje zdarzeń o prawdopodobieństwach od 0,0 do 1,0, generuj i wyprowadzaj prawdopodobieństwo wystąpienia każdej kombinacji. Możesz założyć, że podana jest ciąg liczb w dowolnej konstrukcji wybranego przez ciebie języka.
Oto przykład; możesz założyć, że długość kombinacji sekwencji pasuje do pamięci:
{ 0.55, 0.67, 0.13 }
Program wydrukuje każdą kombinację i związane z nią prawdopodobieństwo wystąpienia tej sekwencji. 1 oznacza, że zdarzenie w tym indeksie sekwencji wejściowej miało miejsce, a 0 oznacza, że to zdarzenie nie miało miejsca. Pożądane dane wyjściowe są poniżej (nie dbam o drukowanie pracy, to tylko w celach informacyjnych algorytmu):
[0,0,0] = (1 - 0.55) * (1-0.67) * (1-0.13) = 0.129195
[0,0,1] = (1 - 0.55) * (1-0.67) * (0.13) = 0.019305
[0,1,0] = (1 - 0.55) * (0.67) * (1-0.13) = 0.262305
[0,1,1] = (1 - 0.55) * (0.67) * (0.13) = 0.039195
[1,0,0] = (0.55) * (1-0.67) * (1-0.13) = 0.157905
[1,0,1] = (0.55) * (1-0.67) * (0.13) = 0.023595
[1,1,0] = (0.55) * (0.67) * (1-0.13) = 0.320595
[1,1,1] = (0.55) * (0.67) * (0.13) = 0.047905
Problem ten jest stycznie związany z obliczaniem „produktu kartezjańskiego”.
Pamiętaj, to jest kodowanie w golfa, więc wygrywa kod z najmniejszą liczbą bajtów.
źródło
[0.129195, 0.019305, 0.262305, ..., 0.047905]
wystarczyłoby jako wyjście, czy jest[0,0,0], [0,0,1], ...
konieczne?Odpowiedzi:
Haskell, 86 bajtów
Przykład użycia:
Większość bajtów jest przeznaczona na formatowanie wyjściowe. Jeśli interesuje Cię tylko wektor prawdopodobieństwa, to tylko 29 bajtów:
Jak to działa:
źródło
Mathematica,
4645 bajtówPobiera listę. Działa nawet dla pustej listy
{}
, dla której jest wyjście{1}
.Przypadek testowy:
Wyjaśnienie
Biorąc pod uwagę listę prawdopodobieństw
s
oraz listę bitówb
z0
oznaczający „nie występuje” i1
oznaczające „doszło”, listę prawdopodobieństw być mnożona jest przez danądo podpisania. Jeśli zamiast tego
0
oznacza „wystąpił” i1
„nie wystąpił”, upraszcza towięc my:
źródło
Perl,
4240 bajtówObejmuje +1 dla
-a
Podaj liczby na STDIN:
wyjścia
combi.pl
:źródło
MATL ,
1211 bajtówDane wejściowe to wektor kolumny o formacie
[0.55; 0.67; 0.13]
Wypróbuj online!
źródło
Perl, 116 bajtów
Czytelny:
Tworzy listę wszystkich możliwych kombinacji zer i 1 długości równych liczbie parametrów wejściowych (np. Dla powyższego przykładu będzie to długość 3), a następnie oblicza każde prawdopodobieństwo.
Dzięki @Dada za pokazanie mi, co potrafi ta
glob
funkcja , mimo że nie jestem w 100% pewien, że rozumiem, jak to robi.Przykładowe dane wyjściowe:
źródło
-a
zamiast(@a=split/ /,<>)
...R,
7269 bajtówPobiera dane wejściowe ze standardowego wejścia i zwraca wektor R prawdopodobieństw.
Edycja: Usunięto jedną niepotrzebną transpozycję, macierz permutacji jest teraz transponowaną wersją poniższej, a prawdopodobieństwa są obliczane jako iloczyn kolumnowy, a nie wierszowy. Przykładowe dane wyjściowe:
Zauważ, że prawdopodobieństwa są w innej kolejności ze względu na fakt, że macierz permutacji generowana przez
expand.grid
powoduje: (generowanie tej macierzy można prawdopodobnie zagrać w golfa za pomocą zewnętrznych pakietów):Pierwsze prawdopodobieństwo odpowiada odwróconemu wynikowi pierwszego wiersza w powyższej macierzy, a drugie odwróconemu drugiemu wierszowi itp. Formatowanie wyniku, aby zobaczyć to jeszcze wyraźniej, powoduje, że program jest dłuższy (164 bajty):
który zamiast tego wytwarza:
źródło
expand.grid
! Myślę, że toapply
może działać zarówno na ramkach danych, jak i macierzach, więc twój kod powinien działać bezt(t(...))
, co pozwoli ci zaoszczędzić 6 bajtów.t
nie jest powiązana z żadną ramką danych, ale umożliwia odjęcie wektora prawdopodobieństwa od macierzy permutacji (o różnych wymiarach). Co najmniej jedna z nich jest potrzebna ze względu na sposób, w jaki R obsługuje te wektoryzowane operacje, ale prawdopodobnie mógłbym usunąć zewnętrzną transpozycję i zastosować produkt zamiast kolumn. Zaktualizuje jutroGalaretka , 9 bajtów
Wypróbuj online!
źródło
J, 14 bajtów
Stosowanie
Wyjaśnienie
źródło
|*//0.55 0.67 0.13-/0 1
do pociągu?Pyth, 10 bajtów
Wypróbuj online: Demonstracja
Wyjaśnienie:
źródło
C, 110 bajtów
Nie golfowany:
Działa do 32 elementów, + 5 + 1 bajtów dla 64 elementów (zadeklaruj
long k;
i dodajL
w pierwszej pętli, abyk<1L<<N
).źródło
*1*<<n
czy jest to po prostu C ++?05AB1E , 8 bajtów
Wypróbuj online!
źródło
JavaScript (Firefox 30-57), 57 bajtów
Zwraca tablicę wszystkich prawdopodobieństw. Jeśli chcesz także tablicę zdarzeń, to dla 86 bajtów:
Jeśli dozwolone są zdarzenia jako ciąg, to tylko 80 bajtów:
Odejmij dwa bajty dla
1/
każdego rozwiązania, jeśli prawdopodobieństwo nigdy nie będzie wynosić zero.źródło
<script></script>
bloku? Mam problemy z pierwszym niespodziewanym „za”?Perl 6,
2419 bajtów Latin-1Starszy kod:
To jest funkcja. Użyj tego w ten sposób:
uzyskać:
Objaśnienie starszego kodu:
Nowszy kod jest w zasadzie taki sam, używając tylko składni terser:
Mapa generuje tablicę pełną
any
konstrukcji, które mnożą się w większeany
konstrukcje, starannie rozwiązując problem, nawet nie potrzebując pętli.Nie jest to najkrótszy język programu, ale jest to bardzo bezpośrednie tłumaczenie problemu.
źródło
Dyalog APL , 10 bajtów
Nowe rozwiązanie
Niezależne pochodzenie indeksu. Funkcja anonimowa. Jako argument przyjmuje listę prawdopodobieństw.
∘.×/
Zmniejszenie produktu kartezjańskiego⊢
wartości argumentów,¨
każdy w połączeniu z1-⊢
uzupełniające wartości argumentów (lit. jeden minus wartości argumentów)Wypróbuj APL online!
Stare rozwiązanie
Wymaga
⎕IO←0
ustawienia domyślnego w wielu systemach. Monity o listę prawdopodobieństw.Wyjaśnienie
|
wartość bezwzględna⎕
wejście, ɑ = [ ɑ ₁ ɑ ₂ ɑ ₃]∘.×.-
zmodyfikowany tensor wewnętrzny pomnożony, ( ɑ ₁ - b ₁) ⊗ ( ɑ ₂ - b ₂) ⊗ ( ɑ ₃ - b ₃), z⊂⍳2
załączona lista b = [[0 1]]Definicja matematyczna
Jak ₃ ⎤ ⎡ ɑ ₁ b jest ujęte, jest skalarne, a zatem rozszerzone do długości ɑ , a mianowicie 3, więc całe wyrażenie to
A = │ ( ɑ ₁ - b ) ⊗ ( ɑ ₂ - b ) ⊗ ( ɑ ₃ - b ) │ =
│ ( ɑ ₁ - [0,1]) ⊗ ( ɑ ₂ - [0,1]) ⊗ ( ɑ ₃ - [0,1]) │ =
│ [ ɑ ₁, ɑ ₁ - 1] ⊗ [ ɑ ₂ , ɑ ₂ - 1] ⊗ [ ɑ ₃, ɑ ₃ - 1] │ =
⎢ ⎡ ⎡ ɑ ₁ ɑ ₂ ɑ ɑ ₂ ( ɑ ₃-1) ⎤ ⎤ ⎥
⎢ ⎢ ⎣ ɑ ₁ ( ɑ ₂-1) ɑ ₃ ⎦ ⎣ ɑ ₁ ( ɑ ₂-1) ( ɑ ₃-1) ⎦ ⎥ ⎥
⎢ ⎢ ⎡ ( ɑ ₁-1) ɑ ₂ ɑ ₃ ⎤ ⎡ ( ɑ ₁-1) ɑ ₂ ( ɑ ₃-1) ⎤ ⎥ ⎥
⎢ ⎣ ⎣ ( ɑ ₁-1) ( ɑ ₂-1) ɑ ₃⎦ ⎣ ( ɑ ₁-1) ( ɑ ₂-1) ( ɑ ₃-1) ⎦ ⎦ ⎥
Wypróbuj APL online!
Uwagi (dotyczy zarówno starego, jak i nowego rozwiązania)
Program i formuła działają dla dowolnej liczby ( n ) zmiennych i zwracają n- wymiarową tablicę o długości 2 w każdym wymiarze. Przy trzech zmiennych prawdopodobieństwo określonego wyniku
P ( p , q , r ) = A p , q , r,
które można wygodnie wybrać z tablicy za pomocą
(⊃A)[p;q;r]
wyodrębnionego za pomocąp q r⌷⊃A
Np.
1 1 0⌷⊃|0.55 0.67 0.13∘.×.-⊂⍳2
Daje P (55%, 67%, ¬13%) = 1,9305%źródło
PHP,
1059794 9387 bajtówUruchom tak:
Zauważ, że wyjście to mały endian:
Wyjaśnienie
Poprawki
$p
do 1 z obliczeniem$c
$i
zamiast zwiększania$c
zamiast$$i
źródło
C ++ 17,
137131129 bajtówOszczędność 6 bajtów poprzez oświadczenie
#define A auto
, że tak krótkie makro po raz pierwszy zapisuje wszystko. -2 bajty do używania#import
i usuwania spacji wcześniej<
Odradza wszystkie możliwe kombinacje.
Nie golfowany:
Stosowanie:
źródło