Isenção de responsabilidade: a codificação de Levenshtein não tem nenhuma relação com a métrica de distância de edição de Levenshtein .
<Insira uma longa história sobre por que os códigos de Levenshtein precisam ser calculados aqui.>
O código
A codificação de Levenshtein é um sistema de atribuição de códigos binários a números inteiros não negativos que retém alguma propriedade estranha em probabilidade que não é relevante para esse desafio. Denotaremos esse código como L ( n ). A Wikipedia descreve isso como um processo de cinco etapas:
- Inicialize a variável de contagem de etapas C para 1.
- Escreva a representação binária do número sem
1
o início do código. - Seja M o número de bits escritos na etapa 2.
- Se M não for 0, incremente C , repita da etapa 2 com M como o novo número.
- Escreva C
1
bits e0
a no início do código.
No entanto, o código também pode ser descrito recursivamente:
- Se o número for 0, seu código será
0
. - Escreva a representação binária do número sem
1
o início do código. - Seja M o número de bits escritos na etapa 2.
- Escreva L ( M ) no início do código.
- Escreva um
1
pouco para o início do código.
Para quem prefere exemplos, eis o processo recursivo para L (87654321), com denotando concatenação:
O desafio
Escreva um programa ou função que, dado um número n , produza a sequência de bits L ( n ) em qualquer formato razoável (isso inclui retornar um número com os referidos bits). As brechas padrão são, como sempre, proibidas.
Exemplos
Entrada: 5
Resultado: 1110001
Entrada: 30
Resultado: 111100001110
Entrada: 87654321
Resultado: 111110000101001001110010111111110110001
Entrada: 0
Resultado: 0
±
vez de uma funçãof
.JavaScript (ES6),
5452 bytesEditar: salvou 2 bytes graças a @Arnauld.
fonte
replace(1,...
em vez dereplace(/1/,...
=> 52 bytesPitão, 12 bytes
Demonstração
(No
y
final, é executar a função resultante na entrada)Explicação:
fonte
SQF, 110
Função recursiva:
Ligue como:
[NUMBER] call f
Observe que, na verdade, isso não funciona para 87654321 ou outros números grandes devido a um bug no mecanismo ArmA. Embora provavelmente seja corrigido em breve, e deve funcionar de acordo com as especificações.
( Este ingresso aqui )
fonte
PHP,
116114 bytesForneça o número como o primeiro argumento.
Atualizar:
strlen($b)-1
por~~log10($b)
(finalmente entendido por que todo mundo estava usando logaritmo) e outro concatenando de forma diferente.fonte
Ruby, 38 bytes
Muito parecido com a resposta JavaScript de Neil .
Veja em repl.it: https://repl.it/CnhQ
fonte
Java 8 (Programa completo),
257249 bytesVersão legível com explicação (na maioria das vezes é apenas recursão):
EDIT 1 : 8 bytes salvos : o primeiro caractere da string binária é sempre 1; portanto, em vez de usar
s.charAt(0)
, uma opção melhor é simplesmente"1"
.fonte