A sequência de van der Corput é um dos exemplos mais simples de sequência de baixa discrepância . Seu n
-ésimo termo é justo 0.(n written in base 10 and mirrored)
, portanto, seus primeiros termos são:
0.1
, 0.2
, 0.3
, 0.4
, 0.5
, 0.6
, 0.7
, 0.8
, 0.9
,
0.01
, 0.11
, 0.21
, 0.31
, 0.41
, 0.51
, 0.61
, 0.71
, 0.81
, 0.91
,
0.02
, 0.12
, 0.22
, 0.32
, 0.42
, 0.52
, 0.62
, 0.72
, 0.82
, 0.92
, ...
O desafio
Escreva um programa ou uma função em qualquer linguagem de programação que tome como entrada um número inteiro positivo n
menor que 10^6
e retorne ou imprima os primeiros n
termos da sequência de van der Corput. O formato de saída pode ser uma lista de números de ponto flutuante, uma lista de cadeias de caracteres do formulário 0.digits
ou uma cadeia exclusiva em que os termos são separados por vírgulas e / ou espaços em branco, novas linhas.
As brechas padrão são proibidas. O menor código fonte vence.
Oracle SQL 11.2,
646258 bytesVersão antiga
Concatenar '' para um número o converte em uma sequência. É 2 bytes menor que o uso de TRIM (), menor que TO_CHAR ().
Como concatenar uma string para um NUMBER resulta em uma string, é possível usá-la para gerenciar o '0'. parte do resultado.
fonte
CJam,
1411 bytesAgradecimentos ao Sp3000 por salvar 3 bytes.
Teste aqui.
Explicação
fonte
Perl 6,
242220 bytesObrigado Aleks-Daniel Jakimenko-A. por mais dois bytes
versão antiga
EDIT: Obrigado raiph por 2 bytes extras
uso
fonte
{("0."~.flip for ^$_)}
salva 2 bytesMathematica, 40 bytes
Caso de teste
fonte
Pitão, 8 bytes
Experimente online.
Esta é realmente apenas uma combinação disso e desta resposta. Portanto, estou transformando-o em um wiki da comunidade.
fonte
Pitão, 11 bytes
Experimente aqui!
Explicação
fonte
Pitão - 10 bytes
Experimente online aqui .
fonte
VSQ...
JavaScript (ES6), 58
Uma função anônima que retorna uma sequência com valores separados por vírgula
TESTE
fonte
MATL , 10 bytes
Experimente online!
fonte
Haskell,
36, 27 bytesDois bytes salvos por nimi e outros 7 por Lynn.
fonte
f n=reverse.show<$>[1.0..n]
Braquilog , 23 bytes
Isso recebe um número como entrada e gera o resultado para STDOUT, separado por espaços.
Bastante direto. Infelizmente, precisamos concatenar o número com uma string vazia para converter esse número em string (
:""rc
), porque ainda não há predicado de conversão interno.A conversão para string é necessária, porque se invertermos os dígitos do número, os zeros à esquerda (por exemplo,
10
torna-se01
) serão perdidos.fonte
PowerShell, 52 bytes
Um pouco mais do que eu gostaria, mas usa alguns truques legais.
O
while
loop é óbvio, mas o condicional é um pouco complicado - nós temos$a
(que começa como$null
quando foi mencionado pela primeira vez) e subtraímos nosso número de entrada$args[0]
. No PowerShell, as operações matemáticas$null
tratam como zero, portanto, para entrada,20
por exemplo, isso resultará em-20
. Como qualquer número diferente de zero é$true
, a condicional do loop será$true
até$a
igual ao nosso número de entrada (nesse ponto a subtração será igual0
ou$false
). O truque vem do pós-incremento++
, que não é executado até depois que a subtração é calculada; portanto, manipular a entrada de1
será gerado corretamente0.1
e, em seguida, interromperá o loop na próxima iteração.Cada vez que criamos um loop, criamos apenas um literal de string que é deixado no pipeline e produzido de acordo. Construímos isso de
"0."
concatenado com o resultado do-join
operador unário que atuou no array de char criado ao retirar a string de"$a"
trás para frente (indexando através do intervalo"$a".length..0
).Execuções de teste
fonte
Bash, 36 bytes
Pega um número como argumento da linha de comando e gera cada termo em uma linha separada. Por exemplo:
fonte
seq -f%g.0 $1|rev
.seq
poderia fazer saída formatada.Japonês, 12 bytes
Teste online!
Como funciona
fonte
cera de abelha ,
5753 bytesTrabalhando no problema de saída de dígitos binários do código de barras, notei que podia usar o mesmo algoritmo de divisão curta para a sequência de van der Corput, apenas usando divisão e módulo por 10 em vez de 2. A saída é revertida nos dois casos.
Golpeou por 4 bytes, espelhando o código:
Prettyprint hexagonal, para uma orientação mais fácil:
Explicação de um ciclo no programa, usando o código original:
Exemplo:
fonte
R, 59 bytes
explicação
example(strsplit)
cria a funçãostrReverse
(então deve ser óbvio)Usando
IRanges::reverse
, isso pode ter um golfe de 47 bytesfonte
Python 3, 47 bytes
uma solução mais curta com Python 2
Caso de teste
fonte
f=
não é necessário, por isso tem 47 bytes de comprimento.n-1
termos.lambda n:['0.'+`i+1`[::-1]for i in range(n)]
é mais curto se você usa o Python 2. Além disso, você não deve dizer "Python 3.5" a menos que exija 3.5, o que não é necessário. Esta versão requer Python 2., 12 caracteres / 15 bytes
Try it here (Firefox only).
Está bem.
Explicação
⩤⁽1ï⒨
cria um intervalo[1,ï]
para mapear,ß)
converte mapitem (número) em sequência,Ė⍞.0
concata.0
até o final eᴙ
reverte toda a sequência.fonte
Python 2, 54 bytes
Explicação:
Iterar através do conjunto
[1,input)
e anexa o invertidoi
para.
.Ainda pode ser jogado mais.
fonte
`i`
vez destr(i)
. Além disso, acho que você precisa imprimir o zero inicial.PHP,
4541 bytesPega o argumento de entrada da CLI. Execute assim:
fonte
Retina, 39 bytes
Recebe entrada em unário.
Experimente online aqui.
fonte
Gema, 45 caracteres
Exemplo de execução:
fonte
Julia ,
50.38.3331 bytesEu optei por um formato de saída diferente para reduzir o código em 12 bytes. A função retorna uma matriz de seqüências de caracteres agora. Encurtado por mais 5 bytes. Agradeço a Alex A. por me lembrar da interpolação de cadeias e usar uma função anônima (eliminando mais 2 bytes).
ou alternativamente
Teste
fonte
n->["0."reverse("$i")for i=1:n]
map(n->["0."reverse("$i")for i=1:n],3)
(para n = 3) não seria necessária para produzir qualquer saída? Isso tornaria (pelo menos) o tempo que minha solução.Python 2, 40 bytes
Exemplo:
Resolução algébrica:
fonte
jq 1.5,
4035 caracteres(Código de 34 caracteres + opção de linha de comando de 1 caractere.)
Exemplo de execução:
Teste on-line (a passagem do
-r
URL não é suportada - verifique você mesmo Raw Output.)O mesmo com os links para a documentação:
Como uma alternativa mais legível, o acima também poderia ser escrito assim ( on-line ):
fonte
"\(.+1).0"/""
funciona?\(…)
e uma divisão/
que, no caso de cordas, é dividida.BBC BASIC,
898887 bytesAbreviações usadas para reduzir o máximo possível as coisas. Compatível com o Brandy Basic e o BASIC 2 na máquina original.
Para os modernos BASIC da BBC, você também pode deixar de fora os números de linha para economizar mais dois bytes.
fonte
Dyalog APL , 12 bytes
Experimente online!
Direto: a
{
sequência de funções'0.'
antes,
da⌽
representação⍕
de sequência invertida do argumento⍵
para a função}
para cada um¨
dos números de 1 a n⍳
.fonte
JS, 66
Saída é a matriz chamada "o"
fonte
Groovy, 36 caracteres
Exemplo de execução:
fonte