%I #32 Oct 25 2024 09:31:34
%S 0,2,12,13,112,113,114,115,232,233,234,235,236,237,238,239,3840,3841,
%T 3842,3843,3844,3845,3846,3847,3848,3849,3850,3851,3852,3853,3854,
%U 3855,7712,7713,7714,7715
%N Prefix (or Levenshtein) codes for natural numbers.
%D D. E. Knuth, "Supernatural Numbers", in D. A. Klarner, editor, The Mathematical Gardner. Prindle, Weber and Schmidt, Boston, 1981, pp. 310-325.
%D D. E. Knuth, Selected Papers on Fun and Games, CSLI, 2011.
%D R. E. Krichevsky, Szhatie i poisk informatsii (Compressing and searching for information), Moscow, 1988, ISBN 5-256-00325-9.
%H Matthew House, <a href="/A010097/b010097.txt">Table of n, a(n) for n = 0..10000</a>
%H Robert Munafo, <a href="http://mrob.com/pub/math/altnum.html#lexi">Alternative Number Formats</a>, section on "Lexicographic Strings".
%H Wikipedia, <a href="https://en.wikipedia.org/wiki/Levenshtein_coding">Levenshtein coding</a>
%F The code for n is found as follows: from right to left, the truncated (without the leading 1) binary representations of n, floor(log_2(n)), floor(log_2(floor(log_2(n)))), etc., are written as long as they consist of at least one bit; then we write a 0 followed by log*(n) 1's.
%o (Python)
%o def encode(n):
%o if n == 0: return "0"
%o c, C = "", 1
%o while n > 0:
%o b = bin(n)[3:]
%o c = b + c
%o if (m := len(b)) > 0: C += 1
%o n = m
%o c = "1" * C + "0" + c
%o return c
%o a = lambda n: int(encode(n),2) # _DarĂo Clavijo_, Aug 23 2024
%o (PARI) apply( {A010097(n)=if(n, n+2^(n=exponent(n))*((n=A010097(n))+2<<exponent(n+!n)-1))}, [0..44]) \\ _M. F. Hasler_, Oct 24 2024
%Y Knuth articles also give A000918 and A171885.
%K nonn,changed
%O 0,2
%A _Leonid Broukhis_
%E Offset corrected by _Matthew House_, Aug 15 2016