%I #14 Jun 05 2017 17:36:44
%S 0,1,2,3,7,6,5,4,8,9,10,11,15,14,13,12,25,24,27,26,30,31,28,29,17,16,
%T 19,18,22,23,20,21,42,43,40,41,45,44,47,46,34,35,32,33,37,36,39,38,51,
%U 50,49,48,52,53,54,55,59,58,57,56,60,61,62,63,127,126,125
%N Self-inverse permutation of nonnegative integers, "blue-gray" code: a(n) = A003188(A193231(n)).
%H Antti Karttunen, <a href="/A234612/b234612.txt">Table of n, a(n) for n = 0..8191</a>
%H Joerg Arndt, <a href="http://www.jjj.de/fxt/#fxtbook">Matters Computational (The Fxtbook)</a>, section 1.19 "Invertible transforms on words", pp. 49--55 [Cf. especially the identity 1.19-9d: gB = Bg^{-1} given on page 53].
%H <a href="/index/Per#IntegerPermutation">Index entries for sequences that are permutations of the natural numbers</a>
%F a(n) = A003188(A193231(n)).
%F a(n) = A193231(A006068(n)).
%F a(n) = A193231(A234613(A193231(n))).
%o (Scheme)
%o (define (A234612 n) (A003188 (A193231 n)))
%o (define (A234612v2 n) (A193231 (A006068 n))) ;; Alternative 2.
%o (Python)
%o def a065621(n): return n^(2*(n - (n&-n)))
%o def a048724(n): return n^(2*n)
%o def a003188(n): return n^(n>>1)
%o def a193231(n):
%o if n<2: return n
%o if n%2==0: return a048724(a193231(n/2))
%o else: return a065621(1 + a193231((n - 1)/2))
%o def a(n): return n if n<2 else a003188(a193231(n)) # _Indranil Ghosh_, Jun 05 2017
%Y Cf. A003188, A006068, A193231, A234613, A234024-A234027.
%K nonn
%O 0,3
%A _Antti Karttunen_, Dec 28 2013