Dada uma sequência de eventos com probabilidades entre 0,0 e 1,0, gere e calcule a probabilidade de cada combinação ocorrer. Você pode presumir que uma sequência de números seja fornecida em qualquer construção que o idioma escolhido forneça.
Aqui está um exemplo; você pode presumir que o comprimento das combinações da sequência cabe na memória:
{ 0.55, 0.67, 0.13 }
O programa deve imprimir cada combinação e a probabilidade associada dessa sequência. Um 1 indica que o evento nesse índice da sequência de entrada ocorreu e um 0 indica que esse evento não ocorreu. A saída desejada está abaixo (não me importo com a impressão do trabalho, isso é apenas para fins informativos do algoritmo):
[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
Esse problema está tangencialmente relacionado ao cálculo de um "produto cartesiano".
Lembre-se, isso é código-golfe, portanto o código com o menor número de bytes vence.
[0.129195, 0.019305, 0.262305, ..., 0.047905]
suficiente como saída ou é [0,0,0], [0,0,1], ...
necessário?