Descrição binária recursiva
Recentemente, fiz minha primeira contribuição ao OEIS estendendo e adicionando um arquivo b à sequência A049064 . A sequência começa com 0
e, em seguida, os próximos valores são derivados de fornecer uma "descrição binária" do último item.
Por exemplo, o segundo termo seria 10
, porque havia um 0
no primeiro elemento. O terceiro termo seria 1110
, porque havia um 1
e um 0
. O quarto seria 11110
. porque existem três ( 11
em binário!) se 1
um 0
. Abaixo está um detalhamento do quinto mandato para tornar esse processo claro:
> 11110
> 1111 0 (split into groups of each number)
> 4*1 1*0 (get count of each number in each group)
> 100*1 1*0 (convert counts to binary)
> 100110 (join each group back together)
E aqui está um exemplo para ir do 6º ao 7º termo:
> 1110010110
> 111 00 1 0 11 0
> 3*1 2*0 1*1 1*0 2*1 1*0
> 11*1 10*0 1*1 1*0 10*1 1*0
> 111100111010110
Você pode conferir um programa de referência φ eu fiz para calcular os termos.
Seu emprego
Você precisa criar um programa ou função que receba um número n
via argumentos de entrada ou função padrão e imprima a sequência do 1st
termo para o (n+1)th
termo, separada por uma nova linha. Se você quiser ver os números mais baixos, consulte o arquivo b na página OEIS. No entanto, seu programa / função deve suportar 0 <= n <= 30
, ou seja, até o 31º termo. Isso não é pouca coisa, pois A049064(30)
tem mais de 140.000 dígitos δ . Se você gostaria de ver qual deve ser o 31º termo, eu o coloquei em Pastebin .
Exemplo de E / S
func(10)
0
10
1110
11110
100110
1110010110
111100111010110
100110011110111010110
1110010110010011011110111010110
1111001110101100111001011010011011110111010110
1001100111101110101100111100111010110111001011010011011110111010110
func(0)
0
func(3)
0
10
1110
11110
Há apenas uma regra: sem brechas padrão!
Isso é código-golfe , então a menor contagem de bytes vence.
φ - A essência pode ser encontrada aqui , e uma demonstração de ideone está aqui .
δ - Para o caso de você estar se perguntando, minhas estimativas, no comprimento do 100º termo, o colocam em aproximadamente 3,28 x 250 caracteres, o que seria bastante para qualquer um calcular.
[0]\n[1, 0]\n[1, 1, 1, 0]\n...
Respostas:
CJam,
1817 bytesObrigado a @ MartinBüttner por jogar um byte!
Experimente on-line no intérprete CJam .
Como funciona
fonte
Pitão,
1817 bytesExperimente online: Demonstração
Agradecemos a @isaacg por salvar um byte.
Explicação:
Isso usa o fato de que 0 e 1 em binário também são 0 e 1.
fonte
V
em vez de.u
:J]0VQjk~JsjR2srJ8
Python 2,
125116110 bytesEconomizou 1 byte graças a @ Sp3000 e 5 bytes removendo uma
int
chamada redundante .Versão antiga:
Salvei muitos, muitos bytes graças a @ Vioz-!
Versão original:
fonte
Ruby,
807269 bytesComo uma função:
Chame por exemplo com:
f[6]
fonte
->m{l=?0;0.upto(m){puts l;l.gsub!(/1+|0+/){$&.size.to_s(2)+$&[0]}}}
upto
e!
- Obrigado :) #Python 2, 102 bytes
De alguma forma, a combinação de
itertools
ser maior quere
egroupby
retornargrouper
objetos significa que usar regex é um pouco mais curto ...fonte
Cobra - 128
fonte
Haskell,
136130 Bytesfonte