次の問題を考えてみましょう。3x3 のフィールドから 3 つのマス目を選択することを想像してください。上向きまたは下向きの線、下向きの 2 つのマス目、右向きの 1 つのマス目などがある可能性があります。そこで、すべてのマス目に番号を付けましょう ( を参照MWE
)。これで、これは単なる数学的な問題になります$binom(9,3)$
。
(1,2,3)
しかし、正方形はすべて同じように見えるので、と(3,2,1)
などの間に違いはありません。こここれはかなり良い解決策ですが、重複の問題が発生しました。
私は、正しい順列をファイルに出力し.csv
、その後TikZ
、またはpgfplots
(おそらくそこでも実行できますが) ファイルを読み取って「平方問題」を解くことができる Python スクリプトを作成することを考えました。
MWE
そこで私の質問は、次のように何かを得るために重複部分を「消す」にはどうすればよいかということです。
\documentclass[border=5pt,tikz]{standalone}
\newcommand{\setcircle}[3]{
\pgfmathsetmacro\testnum{int(mod(#1,3))}
\ifnum\testnum=0
\pgfmathsetmacro\oxpos{3}
\pgfmathsetmacro\oypos{floor(#1/3)-1}
\else
\pgfmathsetmacro\oxpos{mod(#1,3)}
\pgfmathsetmacro\oypos{floor(#1/3)}
\fi
\pgfmathsetmacro\testnum{int(mod(#2,3))}
\ifnum\testnum=0
\pgfmathsetmacro\txpos{3}
\pgfmathsetmacro\typos{floor(#2/3)-1}
\else
\pgfmathsetmacro\txpos{mod(#2,3)}
\pgfmathsetmacro\typos{floor(#2/3)}
\fi
\pgfmathsetmacro\testnum{int(mod(#3,3))}
\ifnum\testnum=0
\pgfmathsetmacro\thxpos{3}
\pgfmathsetmacro\thypos{floor(#3/3)-1}
\else
\pgfmathsetmacro\thxpos{mod(#3,3)}
\pgfmathsetmacro\thypos{floor(#3/3)}
\fi
\draw (\oxpos,-\oypos) circle(.5) node {#1};
\draw (\txpos,-\typos) circle(.5) node {#2};
\draw (\thxpos,-\thypos) circle(.5) node {#3};
}
\begin{document}
\begin{tikzpicture}
\foreach \x in {1,...,9}
{
\pgfmathsetmacro\testnum{int(mod(\x,3))}
\ifnum\testnum=0
\pgfmathsetmacro\xpos{3}
\pgfmathsetmacro\ypos{floor(\x/3)-1}
\else
\pgfmathsetmacro\xpos{mod(\x,3)}
\pgfmathsetmacro\ypos{floor(\x/3)}
\fi
\draw (\xpos,-\ypos) circle(.5) node {\x};
}
\begin{scope}[xshift=-3cm,yshift=-4cm]
\setcircle{1}{2}{5}
\end{scope}
\begin{scope}[yshift=-4cm]
\setcircle{1}{2}{3}
\end{scope}
\begin{scope}[xshift=3cm,yshift=-4cm]
\setcircle{3}{6}{8}
\end{scope}
\end{tikzpicture}
\end{document}
出力:
答え1
これにより、同等でないすべての組み合わせが描画されます。
\documentclass[tikz,border=3.14mm]{standalone}
\newcounter{mystep}
\begin{document}
\begin{tikzpicture}[insert circle/.style={insert path={%
({mod(#1-1,3)*0.75},{int((#1-1)/3)*0.75}) node[circle,draw]{#1}}}]
\foreach \X [evaluate=\X as \Ymin using {int(\X+1)}] in {1,...,9}
{\foreach \Y [evaluate=\Y as \Zmin using {int(\X+1)}]in {\Ymin,...,9}
{\foreach \Z in {\Zmin,...,9}
{\ifnum\X<\Y
\ifnum\Y<\Z
\stepcounter{mystep}
\begin{scope}[xshift={mod(\number\value{mystep}-1,7)*3cm},
yshift={-int((\number\value{mystep}-1)/7)*3cm}]
\path[insert circle/.list={\X,\Y,\Z}];
\end{scope}
\fi
\fi
}}}
\typeout{\number\value{mystep}\space combinations}
\end{tikzpicture}
\end{document}