simshadows

Knight Dialer

Possible positions:

1 2 3
4   6
7 8 9
  0

Adjacency list:

04,616,827,934,840,3,960,1,772,681,392,4\begin{align*} 0 &\to 4, 6 \\ 1 &\to 6, 8 \\ 2 &\to 7, 9 \\ 3 &\to 4, 8 \\ 4 &\to 0, 3, 9 \\ 6 &\to 0, 1, 7 \\ 7 &\to 2, 6 \\ 8 &\to 1, 3 \\ 9 &\to 2, 4 \end{align*}

Let’s change to letters to make things easier.

a b c
d   e
f g h
  z
zd+eae+gbf+hcd+gdz+c+hez+a+ffb+ega+chb+d\begin{align*} z &\to d + e \\ a &\to e + g \\ b &\to f + h \\ c &\to d + g \\ d &\to z + c + h \\ e &\to z + a + f \\ f &\to b + e \\ g &\to a + c \\ h &\to b + d \end{align*}

As recursive equations:

zi=di1+ei1ai=ei1+gi1bi=fi1+hi1ci=di1+gi1di=zi1+ci1+hi1ei=zi1+ai1+fi1fi=bi1+ei1gi=ai1+ci1hi=bi1+di1\begin{align*} z_i &= d_{i-1} + e_{i-1} \\ a_i &= e_{i-1} + g_{i-1} \\ b_i &= f_{i-1} + h_{i-1} \\ c_i &= d_{i-1} + g_{i-1} \\ d_i &= z_{i-1} + c_{i-1} + h_{i-1} \\ e_i &= z_{i-1} + a_{i-1} + f_{i-1} \\ f_i &= b_{i-1} + e_{i-1} \\ g_i &= a_{i-1} + c_{i-1} \\ h_i &= b_{i-1} + d_{i-1} \end{align*} z1=a1=b1=c1=d1=e1=f1=g1=h1=1z_1 = a_1 = b_1 = c_1 = d_1 = e_1 = f_1 = g_1 = h_1 = 1

For reference, the Fibonnaci numbers are:

F0=0,F1=1,Fi=Fi1+Fi2F_0 = 0, \qquad F_1 = 1, \qquad F_i = F_{i-1} + F_{i-2}

The solution should be:

Ki=zi+ai+bi+ci+di+ei+fi+gi+hiK_i = z_i + a_i + b_i + c_i + d_i + e_i + f_i + g_i + h_i

What happens if we just substitute the previous term…

Ki=(di1+ei1)+(ei1+gi1)+(fi1+hi1)+(di1+gi1)+(zi1+ci1+hi1)+(zi1+ai1+fi1)+(bi1+ei1)+(ai1+ci1)+(bi1+di1)=2ai1+2bi1+2ci1+3di1+3ei1+2fi1+2gi1+2hi1+2zi1=2Ki1+di1+ei1\begin{align*} K_i &= \parens{d_{i-1} + e_{i-1}} + \parens{e_{i-1} + g_{i-1}} + \parens{f_{i-1} + h_{i-1}} + \parens{d_{i-1} + g_{i-1}} \\ &\qquad + \parens{z_{i-1} + c_{i-1} + h_{i-1}} + \parens{z_{i-1} + a_{i-1} + f_{i-1}} + \parens{b_{i-1} + e_{i-1}} + \parens{a_{i-1} + c_{i-1}} + \parens{b_{i-1} + d_{i-1}} \\ &= 2 a_{i-1} + 2 b_{i-1} + 2 c_{i-1} + {\color{red}\boldsymbol{3 d_{i-1}}} + {\color{red}\boldsymbol{3 e_{i-1}}} + 2 f_{i-1} + 2 g_{i-1} + 2 h_{i-1} + 2 z_{i-1} \\ &= 2 K_{i-1} + d_{i-1} + e_{i-1} \end{align*}

What happens if we compress the coding?

IMPORTANT: The previous symbols are being redefined here.

1 2                [3]
4                  [6]
7 8                [9]
  0
z:04,4a:14,8b:27,7c:40,1,7d:72,4e:81,1\begin{align*} z: 0 &\to 4, 4 \\ a: 1 &\to 4, 8 \\ b: 2 &\to 7, 7 \\ c: 4 &\to 0, 1, 7 \\ d: 7 &\to 2, 4 \\ e: 8 &\to 1, 1 \end{align*} Ki=zi+2ai+bi+2ci+2di+eiK_i = z_i + 2 a_i + b_i + 2 c_i + 2 d_i + e_i z1=a1=b1=c1=d1=e1=1z_1 = a_1 = b_1 = c_1 = d_1 = e_1 = 1 zi=ci1+ci1=2ci1ai=ci1+ei1bi=di1+di1=2di1ci=zi1+ai1+di1di=bi1+ci1ei=ai1+ai1=2ai1\begin{align*} z_i &= c_{i-1} + c_{i-1} = 2 c_{i-1} \\ a_i &= c_{i-1} + e_{i-1} \\ b_i &= d_{i-1} + d_{i-1} = 2 d_{i-1} \\ c_i &= z_{i-1} + a_{i-1} + d_{i-1} \\ d_i &= b_{i-1} + c_{i-1} \\ e_i &= a_{i-1} + a_{i-1} = 2 a_{i-1} \end{align*}

If we try substituting our recursions into the solution formula again:

Ki=(2ci1)+2(ci1+ei1)+(2di1)+2(zi1+ai1+di1)+2(bi1+ci1)+(2ai1)=2ci1+2ci1+2ei1+2di1+2zi1+2ai1+2di1+2bi1+2ci1+2ai1=2zi1+4ai1+2bi1+6ci1+4di1+2ei1=(2zi1+4ai1+2bi1+4ci1+4di1+2ei1)+2ci1=2Ki1+2ci12ci1=Ki2Ki1ci=12Ki+1Ki\begin{align*} K_i &= \parens{2 c_{i-1}} + 2 \parens{c_{i-1} + e_{i-1}} + \parens{2 d_{i-1}} + 2 \parens{z_{i-1} + a_{i-1} + d_{i-1}} + 2 \parens{b_{i-1} + c_{i-1}} + \parens{2 a_{i-1}} \notag\\ {} &= 2 c_{i-1} + 2 c_{i-1} + 2 e_{i-1} + 2 d_{i-1} + 2 z_{i-1} + 2 a_{i-1} + 2 d_{i-1} + 2 b_{i-1} + 2 c_{i-1} + 2 a_{i-1} \notag\\ {} &= 2 z_{i-1} + 4 a_{i-1} + 2 b_{i-1} + 6 c_{i-1} + 4 d_{i-1} + 2 e_{i-1} \notag\\ {} &= \parens{ 2 z_{i-1} + 4 a_{i-1} + 2 b_{i-1} + 4 c_{i-1} + 4 d_{i-1} + 2 e_{i-1} } + 2 c_{i-1} \notag\\ {} &= 2 K_{i-1} + 2 c_{i-1} \notag\\[4mm] 2 c_{i-1} &= K_i - 2 K_{i-1} \notag\\ c_i &= \frac{1}{2} K_{i+1} - K_i \tag{eq:2023-04-15--1b} \end{align*}

Can we turn ci1c_{i-1} into terms of KiK_i?

ci=zi1+ai1+di1=(zi1+2ai1+bi1+2ci1+2di1+ei1)ai1bi12ci1di1ei1=Ki1ai1bi12ci1di1ei1=2ci2+ci2+ei2+bi2+ci2=4ci2+ei2+bi2=4(zi3+ai3+di3)+2ai3+2di3=4zi3+4ai3+4di3+2ai3+2di3=4zi3+6ai3+6di3=4(2ci4)+6(ci4+ei4)+6(bi4+ci4)=8ci4+6ci4+6ei4+6bi4+6ci4=20ci4+6ei4+6bi4=2(10ci4+3ei4+3bi4)\begin{align*} c_i &= z_{i-1} + a_{i-1} + d_{i-1} % \\ %{} % &= 2 c_{i-2} % + c_{i-2} + e_{i-2} % + b_{i-2} + c_{i-2} % \\ %{} % &= b_{i-2} % + 4 c_{i-2} % + e_{i-2} % \\ %{} % &= \parens{ % z_{i-2} % + 2 a_{i-2} % + b_{i-2} % + 2 c_{i-2} % + 2 d_{i-2} % + e_{i-2} % } % - z_{i-2} % - 2 a_{i-2} % + 2 c_{i-2} % - 2 d_{i-2} \notag\\ {} &= \parens{ z_{i-1} + 2 a_{i-1} + b_{i-1} + 2 c_{i-1} + 2 d_{i-1} + e_{i-1} } - a_{i-1} - b_{i-1} - 2 c_{i-1} - d_{i-1} - e_{i-1} \notag\\ {} &= K_{i-1} - a_{i-1} - b_{i-1} - 2 c_{i-1} - d_{i-1} - e_{i-1} \notag\\[3mm] {} &= 2 c_{i-2} + c_{i-2} + e_{i-2} + b_{i-2} + c_{i-2} \notag\\ {} &= 4 c_{i-2} + e_{i-2} + b_{i-2} \tag{eq:2023-04-15--2b}\\[3mm] {} &= 4 \parens{z_{i-3} + a_{i-3} + d_{i-3}} + 2 a_{i-3} + 2 d_{i-3} \notag\\ {} &= 4 z_{i-3} + 4 a_{i-3} + 4 d_{i-3} + 2 a_{i-3} + 2 d_{i-3} \notag\\ {} &= 4 z_{i-3} + 6 a_{i-3} + 6 d_{i-3} \notag\\[3mm] %{} % &= 4 \parens{2 c_{i-4}} % + 6 \parens{c_{i-4} + e_{i-4}} % + 6 \parens{b_{i-4} + c_{i-4}} % \\ %{} % &= {\color{red} \boldsymbol{4 c_{i-2}}} + 2 a_{i-3} + 2 d_{i-3} {} &= 4 \parens{2 c_{i-4}} + 6 \parens{c_{i-4} + e_{i-4}} + 6 \parens{b_{i-4} + c_{i-4}} \notag\\ {} &= 8 c_{i-4} + 6 c_{i-4} + 6 e_{i-4} + 6 b_{i-4} + 6 c_{i-4} \notag\\ {} &= 20 c_{i-4} + 6 e_{i-4} + 6 b_{i-4} \notag\\ {} &= 2 \, \parens{10 c_{i-4} + 3 e_{i-4} + 3 b_{i-4}} \tag{eq:2023-04-15--2d} \end{align*}

Here, we notice we can rearrange (eq:2023-04-15—2d) and use (eq:2023-04-15—2b):

ci=2(12ci4+3ei4+3bi42ci4)=2(3(4ci4+ei4+bi4)2ci4)=2(3ci22ci4)\begin{align*} c_i &= 2 \, \parens{12 c_{i-4} + 3 e_{i-4} + 3 b_{i-4} - 2 c_{i-4}} \\ {} &= 2 \, \parens{3 \, \parens{4 c_{i-4} + e_{i-4} + b_{i-4}} - 2 c_{i-4}} \\ {} &= 2 \, \parens{3 c_{i-2} - 2 c_{i-4}} \end{align*}

Using (eq:2023-04-15—1b):

12Ki+1Ki=2(3(12Ki1Ki2)2(12Ki3Ki4))=3(Ki12Ki2)2(Ki32Ki4)12KiKi1=3(Ki22Ki3)2(Ki42Ki5)12Ki=Ki1+3(Ki22Ki3)2(Ki42Ki5)Ki=2Ki1+6(Ki22Ki3)4(Ki42Ki5)\begin{align*} \frac{1}{2} K_{i+1} - K_i &= 2 \, \parens{ 3 \parens{\frac{1}{2} K_{i-1} - K_{i-2}} - 2 \parens{\frac{1}{2} K_{i-3} - K_{i-4}} } \\ {} &= 3 \parens{K_{i-1} - 2 K_{i-2}} - 2 \parens{K_{i-3} - 2 K_{i-4}} \\ \frac{1}{2} K_i - K_{i-1} &= 3 \parens{K_{i-2} - 2 K_{i-3}} - 2 \parens{K_{i-4} - 2 K_{i-5}} \\ \frac{1}{2} K_i &= K_{i-1} + 3 \parens{K_{i-2} - 2 K_{i-3}} - 2 \parens{K_{i-4} - 2 K_{i-5}} \\ K_i &= 2 K_{i-1} + 6 \parens{K_{i-2} - 2 K_{i-3}} - 4 \parens{K_{i-4} - 2 K_{i-5}} \end{align*}

If we need the value as KimodmK_i \bmod m:

TODO: do the math!