Sobre a série
Primeiro, você pode tratar isso como qualquer outro desafio de código de golfe e respondê-lo sem se preocupar com a série. No entanto, existe uma tabela de classificação em todos os desafios. Você pode encontrar o placar junto com mais informações sobre a série no primeiro post .
Embora eu tenha várias idéias alinhadas para a série, os desafios futuros ainda não estão definidos. Se você tiver alguma sugestão, informe-me na postagem da sandbox relevante .
Buraco 4: O Paradoxo de Bertrand
O paradoxo de Bertrand é um problema interessante, que mostra como diferentes métodos para escolher acordes aleatórios em um círculo podem produzir distribuições diferentes de acordes, seus pontos médios e seus comprimentos.
Neste desafio, você deve gerar acordes aleatórios do círculo unitário, usando o método "correto", isto é, um que produz uma distribuição de acordes invariável em escala e conversão. No artigo vinculado da Wikipedia, "Método 2" é esse método.
Aqui estão as regras exatas:
- Você deve pegar um número inteiro positivo
N
que especifique quantos acordes devem ser retornados. A saída deve ser uma lista deN
acordes, cada um especificado como dois pontos no círculo unitário, dados pelo ângulo polar em radianos. - Seu código deve poder retornar pelo menos 2 20 valores diferentes para cada um dos dois ângulos . Se o seu RNG disponível tiver um intervalo menor, você deve primeiro criar um RNG com um intervalo suficientemente grande em cima do incorporado ou implementar o seu próprio RNG adequado . Esta página pode ser útil para isso.
- A distribuição dos acordes deve ser indistinguível da produzida pelo "Método 2" no artigo vinculado da Wikipedia. Se você implementar um algoritmo diferente para escolher acordes, inclua uma prova de correção. Qualquer que seja o algoritmo que você escolha implementar, teoricamente deve ser capaz de gerar qualquer acorde válido no círculo de unidades (limitações de restrição do PRNG subjacente ou tipos de dados de precisão limitada).
- Sua implementação deve usar e retornar números de ponto flutuante (pelo menos 32 bits de largura) ou números de ponto fixo (pelo menos 24 bits de largura) e todas as operações aritméticas devem ser precisas em no máximo 16 ulp .
Você pode escrever um programa completo ou uma função e obter entrada via STDIN (ou alternativa mais próxima), argumento da linha de comando ou argumento da função e produzir saída via STDOUT (ou alternativa mais próxima), valor de retorno da função ou parâmetro da função (saída).
A saída pode estar em qualquer formato conveniente de lista ou string, desde que os números individuais sejam claramente distinguíveis e seu número total seja sempre par.
Isso é código de golfe, então a submissão mais curta (em bytes) vence. E, é claro, o menor envio por usuário também entrará na tabela geral de líderes da série.
Visualização
Você pode usar o seguinte snippet para renderizar as linhas geradas e inspecionar sua distribuição. Basta colar uma lista de pares de ângulos na área de texto. O trecho deve ser capaz de lidar com quase qualquer formato de lista, desde que os números sejam simples números decimais (sem notação científica). Eu recomendo que você use pelo menos 1000 linhas para ter uma boa idéia da distribuição. Também forneci alguns dados de exemplo para os diferentes métodos apresentados no artigo abaixo.
Dados de exemplo gerados com o método 1.
Dados de exemplo gerados com o método 2.
Dados de exemplo gerados com o método 3.
Entre os melhores
O primeiro post da série gera uma tabela de classificação.
Para garantir que suas respostas sejam exibidas, inicie todas as respostas com um título, usando o seguinte modelo de remarcação:
# Language Name, N bytes
onde N
está o tamanho do seu envio. Se você melhorar sua pontuação, poderá manter as pontuações antigas no título, identificando-as. Por exemplo:
# Ruby, <s>104</s> <s>101</s> 96 bytes
(O idioma não é exibido no momento, mas o snippet exige e o analisa, e posso adicionar um cabeçalho por idioma no futuro.)