Mathematica 63 43バイト
Martin Enderの提案のおかげで20バイト節約されました!
EdgeCount[8~KnightTourGraph~8,#+1+8#2/<->_]&
上記は、完全な騎士ツアーグラフ上の特定のセルから1ホップ離れた正方形の数を見つけます。
g=KnightTourGraph[8,8,VertexLabels->"Name",Axes->True]
頂点名と座標を含む完全な騎士のツアーグラフを表示します。Mathematicaはデフォルトで座標に1ベースのインデックスを付けることに注意してください。
#+1+8#2&[r,f]
Convertsは、ゼロベースの値を入力として使用して、ランク(行)r
、およびファイル(列)の正方形に対応する頂点を返しますf
。
たとえば、#+1+8#2&[2,1]
11を返します。
EdgeCount
近傍グラフのエッジの数を与えます。
ランク2、ファイル1(正方形11)のエッジ:
IncidenceList[8~KnightTourGraph~8, 8 #2 + # + 1] &[2, 1]
(*{1 <-> 11, 5 <-> 11, 11 <-> 17, 11 <-> 21, 11 <-> 26, 11 <-> 28}*)
ハイライトされたエッジ:
HighlightGraph[g, {1, 5, 11, 17, 21, 26, 28, Style[1 <-> 11, Thick, Blue], Style[5 <-> 11, Thick, Blue], Style[11 <-> 17, Thick, Blue], Style[11 <-> 21, Thick, Blue], Style[11 <-> 26, Thick, Blue], Style[11 <-> 28, Thick, Blue]},GraphHighlightStyle -> "DehighlightFade", PlotRangePadding -> .5]
方法2:ユークリッド距離
70バイト
この方法はより長くなりますが、興味がある場合があります。アプローチは、チェス盤の中心と対象のセルの間のユークリッド距離をチェックすることです。
Which[(x=Sqrt@Tr[({3.5, 3.5}-#)^2])<2.2,8,x<3,6,x<4,4,x<4.6,3,x>4.6,2]&
例示する
Which[(x=Sqrt@Tr[({3.5, 3.5}-#)^2])<2.2,8,x<3,6,x<4,4,x<4.6,3,x>4.6,2]&@{0, 0}
Which[(x=Sqrt@Tr[({3.5, 3.5}-#)^2])<2.2,8,x<3,6,x<4,4,x<4.6,3,x>4.6,2]&@{3, 3}
2
8
チェス盤の中心からの距離が値を割り当てるのに十分であることを視覚化するため。
values={{2,3,4,4,4,4,3,2},{3,4,6,6,6,6,4,3},{4,6,8,8,8,8,6,4},{4,6,8,8,8,8,6,4},{4,6,8,8,8,8,6,4},{4,6,8,8,8,8,6,4},{3,4,6,6,6,6,4,3},{2,3,4,4,4,4,3,2}};
f[x_]:=Text[x,#]&/@Position[values,x]r_~w~p_:=RegionMember[{3.5`,3.5`}~Disk~r,p]
h@y_:=Which[2.2~w~y,8,3~w~y,6,4~w~y,4,4.6~w~y,3,2<3,2]
Graphics[{Circle[{4.5, 4.5}, 2.3], Circle[{4.5, 4.5}, 3],
円[{4.5、4.5}、4]、
Circle [{4.5、4.5}、4.6]、Flatten [f / @ {2、3、4、6、8}、1]}、Axes-> True、AxesOrigin-> {-1、-1}]
数字2.2、3、4、および4.6は、円の半径です。