%I #24 Dec 12 2023 08:30:24
%S 0,0,1,0,0,1,0,0,1,0,1,0,0,1,0,0,1,0,0,1,0,1,0,0,1,0,0,1,0,0,1,0,1,0,
%T 0,1,0,0,1,0,0,1,0,1,0,0,1,0,0,1,0,0,1,0,1,0,0,1,0,0,1,0,0,1,0,1,0,0,
%U 1,0,0,1,0,0,1,0,1,0,0,1,0,0,1,0,0,1,0,1,0,0,1,0,0,1,0,0,1,0,1,0,0,1,0,0,1
%N Christoffel word of slope 4/7.
%C The Christoffel word (or path) of slope s is defined as follows.
%C Start at (0,0) in the 2-dimensional integer lattice and move up if possible, otherwise right, always keeping below or on the line y = s*x. Write down 0 with a horizontal move, 1 for a vertical move. The first move is necessarily horizontal, so the sequence always begins with 0.
%C If s is irrational this is called a Sturmian word.
%C If the first 9 terms are deleted we get the "Upper Christoffel word of slope 4/7" (see Berstal et al., p. 6, Fig. 2).
%C The length of a Christoffel word of fraction a/b > 0 is a + b, with a ones. - _David A. Corneth_, Sep 19 2016
%D J. Berstel et al., Combinatorics on Words: Christoffel Words and Repetitions in Words, Amer. Math. Soc., 2008.
%H J. Berstel et al., <a href="http://www-igm.univ-mlv.fr/~berstel/LivreCombinatoireDesMots/2008wordsbookMtlUltimate.pdf">Combinatorics on Words: Christoffel Words and Repetitions in Words</a>
%F Period 11: 0,0,1,0,0,1,0,0,1,0,1.
%F a(n) = a(n-11).
%F G.f. -x^2*(1+x^3+x^6+x^8) / ( (x-1)*(1+x^10+x^9+x^8+x^7+x^6+x^5+x^4+x^3+x^2+x) ). - _R. J. Mathar_, Jul 09 2013
%p christoffel:=proc(s,M) local n,x,y,ans;
%p ans:=[0]; x:=1; y:=0;
%p for n from 1 to M do
%p if y+1 <= s*x then ans:=[op(ans),1]; y:=y+1; else ans:=[op(ans),0]; x:=x+1; fi;
%p od: ans; end; christoffel(4/7,120);
%t christoffel[s_, M_] := Module[{n, x=1, y=0, ans={0}}, Do[If[y+1 <= s*x, AppendTo[ans, 1]; y++, AppendTo[ans, 0]; x++], {n, 1, M}]; ans]; christoffel[4/7, 120] (* _Jean-François Alcover_, Sep 19 2016, adapted from Maple *)
%o (PARI) \\ Christoffel word for nonnegative rational f.
%o Cword(f) = {my(n = numerator(f), d = denominator(f), v = vector(n + d), c, s, t = 1, i = 1); v[#v] = 1; while(t<=#v-4, i++; c=(i*f>=s+1); if(c, i-=2; s++, t++); v[t+2]=c); v}
%o a(n) = my(c = Cword(4/7)); c[(n-1)%#c+1] \\ _David A. Corneth_, Sep 19 2016
%Y Cf. A144596-A144608.
%K nonn,easy
%O 0,1
%A _N. J. A. Sloane_, Jan 13 2009
|