Uma representação de precisão dupla de um decimal só pode garantir uma precisão de 15 casas decimais, portanto, pi é aproximado como:
3.141592653589793
Você pode ver que o dígito 3
está nas posições 1, 10, 16
, o dígito 1
está nas posições, 2, 4
etc.
Desafio
Sua tarefa é criar um programa ou função que crie um número duplo aleatório entre 0 e 1 e mapeie os valores desse número no valor de pi. Você faz isso colocando os diferentes dígitos nos números aleatórios na posição que o dígito possui em pi. Se o dígito não for encontrado em pi, você o ignorará e todos os dígitos em pi que não estejam no número aleatório serão representados por um x
. Cada valor pode ser usado apenas uma vez, começando pela esquerda.
Alguns exemplos provavelmente tornarão isso mais claro. Nos exemplos a seguir, o primeiro número é pi, o segundo é o número aleatório e o último é a saída desejada.
3.141592653589793
0.111111111111111
x.1x1xxxxxxxxxxxx
3.141592653589793
0.531000000000000
3.1xx5xxxxxxxxxxx
3.141592653589793
0.123456789123456
3.141592653x8x7xx
3.141592653589793
0.967552381459391
3.14159265358979x
Regras:
- A função não deve receber nenhuma entrada (uma possível exceção é explicada no ponto 3 do marcador)
- A saída deve consistir apenas na sequência de saída, com uma nova linha opcional (um único espaço à direita também é aceito)
- Se o seu programa não possui um valor Pi incorporado, e / ou um RNG, você pode codificar Pi e pegar o número aleatório como entrada. Você não pode codificar o número aleatório ou usar o Pi como entrada.
- Tanto o valor codificado para Pi quanto os 15 dígitos aleatórios (você pode pular,
0.
pois sabe que ficará entre 0 e 1), serão incluídos na contagem de bytes. - Se o seu idioma não tiver a precisão necessária, você poderá usar menos precisão nas seguintes restrições
- Os dígitos do Pi devem ser precisos até a precisão que você possui
- Você não pode produzir mais valores do que os que estão garantidos, ou seja, não pode produzir 15 dígitos se a precisão permitir apenas 8 casas decimais precisas.
- O valor codificado do Pi contará como 16 bytes (você não precisa do ponto decimal), mesmo se o seu programa suportar apenas 8 dígitos.
- O valor de entrada para o número aleatório contará como 15 bytes (você não precisa
0.
. Isso ocorre porque idiomas com baixa precisão não devem ter uma vantagem injusta. - O programa deve suportar precisão de 5 casas decimais (pelo menos).
- Editar: para validar a resposta: O número aleatório deve ser impresso de alguma forma, mas esta operação não precisa ser incluída na contagem de bytes. Por exemplo, se for possível inserir um
print r
no final do script, essa parte não aumentará a pontuação. - Você não pode subtrair os bytes se fizer parte de outra operação necessária. Ou seja, se o código for
print pi, r
, você poderá subtrair apenas, r
. - Se você precisar inserir partes em vários lugares do código, inclua as duas versões (aquela que imprime o número aleatório e a que não imprime com um comentário como:
_p
e_oNo
é necessária para imprimir o número aleatório._p
Faz xxx e_oNo
faz yyy._p
e_oNo
não será incluído na contagem de bytes.
O código mais curto em bytes vence.
Entre os melhores
O snippet de pilha na parte inferior desta postagem gera o catálogo a partir das respostas a) como uma lista da solução mais curta por idioma eb) como uma tabela geral de líderes.
Para garantir que sua resposta seja exibida, inicie-a 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
Se você quiser incluir vários números no cabeçalho (por exemplo, porque sua pontuação é a soma de dois arquivos ou você deseja listar as penalidades do sinalizador de intérpretes separadamente), verifique se a pontuação real é o último número no cabeçalho:
## Perl, 43 + 2 (-p flag) = 45 bytes
Você também pode transformar o nome do idioma em um link que será exibido no snippet:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
0 < random < 1
ou0 <= random <= 1
?Respostas:
Pitão, 25 bytes
Experimente on-line: demonstração ou teste mostrando o número aleatório
Explicação:
fonte
LabVIEW, 53 Primitivas do LabVIEW
Combino Strings e coloco o número em uma string x.xxx "vazia" e removo o número de pi para que não apareça novamente.
o número aleatório e os caracteres únicos aqui são meio visíveis, está tudo bem ou eu tenho que refazer a gravação?
fonte
Mathematica, 105 ou 147 caracteres
Se um número aleatório " entre 0 e 1" significa
0 <= random <= 1
, ou seja, inclui 0 e 1.(105 caracteres)
Caso contrário, pegue o número aleatório " entre 0 e 1" para significar
0 < random < 1
.Faça um loop para obter 15 números inteiros aleatórios, nem todos zero. Selecione o complemento de 0 a 9, ou seja, os números de 0 a 9 que não estão na lista aleatória. Converta esses números inteiros em cadeias e substitua os caracteres correspondentes em uma cadeia pi.
(147 caracteres)
Dígitos aleatórios: -
fonte
True
é1>0
,RandomInteger
pode usar notação infix{0,9}~RandomInteger~15
. Provavelmente, você pode salvar alguns bytes, fornecendor
algum valor e, na verdade, usando a condição de, emWhile
vez de usarBreak.
Then,For
pode salvar outro byteWhile
. Embora eu não entenda por que você precisa do loop, se assume o número aleatório no intervalo[0,1)
.1>0
:-) #JavaScript (ES6),
8987 bytesExplicação
Edit: String aleatória agora não é truncada conforme esclarecido pelo pôster.
Faz um loop em cada dígito de pi e remove o dígito do número aleatório, se for encontrado, caso contrário, substitui o dígito em pi por
x
.Teste
Teste gera também o número aleatório.
Mostrar snippet de código
fonte
Math.random()
produz um número da faixa[0,1)
para que pudesse,0
mas nunca1
. O OP não especificou especificamente se o intervalo era inclusivo ou exclusivo, por isso presumi que tudo o que fosse razoável fosse bom. Esse também é o intervalo que as outras respostas usam. No entanto, você me informou que, se for exatamente0
, falhará porque o.
in pi não será correspondido e se tornaráx
. Isso tem uma chance de 1 em 2 ^ 53, mas eu decidi corrigi-lo de qualquer maneira.[0,1]
é bom (o que é(0,1)
).CJam,
4846423836 bytesTeste aqui.
E aqui está a versão que imprime π e o número aleatório:
Teste aqui.
Não trunfo o número aleatório para 15 casas decimais, conforme esclarecido pelo OP em um comentário.
Explicação
A idéia é transformar cada caractere na representação em cadeia de π em um par desse caractere e
x
. Para cada caractere no número aleatório, trocamos o primeiro par que começa com esse caractere. No final, produzimos o segundo caractere de cada par.fonte
Lua,
231230 bytesExplicações
Infelizmente, lua não me ajuda em nada aqui. math.pi em volta do último dígito de pi, ele retorna:
Eu tenho que truncar este número:
O segundo grande padrão para fazer esse desafio foi a falta de string.replace (). Como eu estou fazendo essa ação duas vezes
s:sub(1,l-1)..c..s:sub(l+1)
, eu queria fazer uma função anônima, pensando que seria mais curta. Não é, então eu o escrevi duas vezes.A razão pela qual tenho que ter cuidado com o ponto é como a lua retorna à sua posição. Nas expressões regulares, um ponto significa "qualquer caractere"; portanto, quando estou avaliando o caractere
.
no meu loop, ele corresponde ao primeiro caractere:Você pode testar a lua online . Como não estou propagando o PRNG, aqui está um código que permite executar vários testes enquanto ainda observa valores.
fonte
Python 2.7,
117110 bytesTestado no aplicativo Android QPython mais recente, mas deve funcionar em qualquer lugar.
Edit 1: alterado
str(pi)
para backticks.Para teste:
fonte
Python, 147 bytes
Bastante auto-explicativo: a função lambda converte float em lista; em seguida, percorreremos a lista pi tentando remover cada dígito da lista aleatória. Se pudermos, acrescente-o à resposta; caso contrário, adicione um 'x'.
fonte
str(t)
fornece apenas 11 dígitos de precisãot
,repr(t)
fornece todost
os 15 dígitos.Perl, 70 bytes
Com comentários:
Esta versão imprimirá pi, o número aleatório e o resultado:
Exemplo de saída:
Espero que isso esteja bem:
9
) é preciso.fonte