Escreva um programa que, dado um pequeno número positivo positivo da entrada padrão, calcule a probabilidade de que o lançamento de muitas moedas resulte na metade do número de cabeças.
Por exemplo, dadas 2 moedas, os possíveis resultados são:
HH HT TH TT
onde H e T são cara e coroa. Existem 2 resultados ( HT
e TH
) com metade da quantidade de cabeças que o número de moedas. Há um total de 4 resultados, então a probabilidade é 2/4 = 0,5.
Isso é mais simples do que parece.
Casos de teste:
2 -> 0.5
4 -> 0.375
6 -> 0.3125
8 -> 0.2734375
code-golf
math
probability-theory
david4dev
fonte
fonte
Respostas:
J, 22
19(abordagem matadora)Aprendi isso enquanto jogava minha resposta Haskell.
(mesma E / S da minha outra resposta J )
fonte
0 1|domain error: script | %/ >:i.&.(".@stdin)_
Pari / GP -
323034 caracteresfonte
print(binomial(n=input,n\2)/2^n)
.Python 53 caracteres
fonte
Excel, 25
Não exatamente de acordo com as especificações, no entanto :)
Nomeie uma célula
n
e digite o seguinte em outra célula:fonte
Haskell, 39
4346Demonstração:
fonte
Undefined variable "readln"
readLn
é maiúsculo.main=do x<-readLn;print$foldr1(/)[1..x]
faz a mesma coisa e economiza 3 bytes?J, 25 (abordagem natural)
Uso da amostra:
É tudo auto-explicativo, mas para uma divisão aproximada de responsabilidades:
!~ -:
pode ser considerado binomial (x, x / 2)% 2&^
é "dividido por 2 ^ x "&. (". @ stdin) _
para E / Sfonte
Oitava GNU - 36 caracteres
fonte
Ruby, 39 caracteres
fonte
Golfscript - 30 caracteres
Limitação - funciona apenas para entradas menores que 63
casos de teste
Análise
'0.'
O GS não faz ponto flutuante; portanto, fingimos escrevendo um número inteiro depois disso.\~
Puxe a entrada para o topo da pilha e converta-a em um número inteiro...
Faça 2 cópias da entrada.),1>
Crie uma lista de 1..n\2//
Divida o liste em 1..n / 2 e n / 2 + 1..n{{*}*}%
Multiplique os elementos das duas sublistas dando (n / 2)! e n! / (n / 2)!~
Extraia esses dois números na pilha\
Troque os dois números em/
Divide5@?*
Multiply por 5 ** n. Esta é a causa da limitação dada acimafonte
0.
é a parte decimal da resposta, mas esse método deixa de fora o 0 necessário quando a chance aumenta menos de 10%.TI-BASIC, 10
Isso levará mais de dez bytes de memória da calculadora porque existe um cabeçalho de programa, mas existem apenas dez bytes de código.
Isso requer entrada no formulário
[number]:[program name]
; adicionar um comando de entrada usa mais três bytes.~
é o símbolo menos unário.fonte
Ruby -
505754 caracteresfonte
J, 20
exemplos:
fonte
APL
2115 caracteresPara onde ele não dá certo
Onde tudo em {} são símbolos específicos da APL, como aqui .
fonte
�[token]: � undefined
Windows PowerShell, 45
Meh.
fonte
MATLAB, 29
fonte
PostScript, 77
fonte
Mathematica, 19
fonte
Javascript, 86 bytes
fonte
Python 3, 99
Essa é uma abordagem ingênua, suponho, e a solução da fR0DDY é muito mais interessante, mas pelo menos eu sou capaz de resolvê-la.
Experimente aqui
Python 2, 103
fonte
Objetivo-C:
152148 bytes apenas para a função.Métodos de classe, cabeçalhos e interface do usuário não estão incluídos no código.
Entrada: um
int
valor que determina o número de moedas.Saída: um
float
valor que determina a probabilidade.Ungolfed:
Isso se baseia na resposta do Microsoft Excel . Em C e Objective-C, o desafio está em codificar os algoritmos.
fonte