我是数独的粉丝,我想知道是否有可能在 LaTeX 中随机生成数独表及其答案。我发现表格中的数字生成存在一些问题,但说实话,我不知道从哪里开始。
答案1
一套,sudokubundle
由 peter wilson 在 ctan 上发布。这似乎可以满足您的要求。它需要random
包来生成拼图数据。
答案2
对于排版数独(LaTeX 主要用于排版,而计算可以用 Lua 或提供随机数生成器的 pgf 进行),Roberto Bonvallet 贡献了一个数独示例到TikZ 画廊。
\documentclass{article}
\usepackage[pdftex,active,tightpage]{preview}
\usepackage{tikz}
\usepackage{mathpazo}
\PreviewEnvironment{tikzpicture}
\newcounter{row}
\newcounter{col}
\newcommand\setrow[9]{
\setcounter{col}{1}
\foreach \n in {#1, #2, #3, #4, #5, #6, #7, #8, #9} {
\edef\x{\value{col} - 0.5}
\edef\y{9.5 - \value{row}}
\node[anchor=center] at (\x, \y) {\n};
\stepcounter{col}
}
\stepcounter{row}
}
\begin{document}
\begin{tikzpicture}[scale=.5]
\begin{scope}
\draw (0, 0) grid (9, 9);
\draw[very thick, scale=3] (0, 0) grid (3, 3);
\setcounter{row}{1}
\setrow { }{2}{ } {5}{ }{1} { }{9}{ }
\setrow {8}{ }{ } {2}{ }{3} { }{ }{6}
\setrow { }{3}{ } { }{6}{ } { }{7}{ }
\setrow { }{ }{1} { }{ }{ } {6}{ }{ }
\setrow {5}{4}{ } { }{ }{ } { }{1}{9}
\setrow { }{ }{2} { }{ }{ } {7}{ }{ }
\setrow { }{9}{ } { }{3}{ } { }{8}{ }
\setrow {2}{ }{ } {8}{ }{4} { }{ }{7}
\setrow { }{1}{ } {9}{ }{7} { }{6}{ }
\node[anchor=center] at (4.5, -0.5) {Unsolved Sudoku};
\end{scope}
\begin{scope}[xshift=12cm]
\draw (0, 0) grid (9, 9);
\draw[very thick, scale=3] (0, 0) grid (3, 3);
\setcounter{row}{1}
\setrow { }{2}{ } {5}{ }{1} { }{9}{ }
\setrow {8}{ }{ } {2}{ }{3} { }{ }{6}
\setrow { }{3}{ } { }{6}{ } { }{7}{ }
\setrow { }{ }{1} { }{ }{ } {6}{ }{ }
\setrow {5}{4}{ } { }{ }{ } { }{1}{9}
\setrow { }{ }{2} { }{ }{ } {7}{ }{ }
\setrow { }{9}{ } { }{3}{ } { }{8}{ }
\setrow {2}{ }{ } {8}{ }{4} { }{ }{7}
\setrow { }{1}{ } {9}{ }{7} { }{6}{ }
\node[anchor=center] at (4.5, -0.5) {Solved Sudoku};
\begin{scope}[blue, font=\sffamily\slshape]
\setcounter{row}{1}
\setrow {4}{ }{6} { }{7}{ } {3}{ }{8}
\setrow { }{5}{7} { }{9}{ } {1}{4}{ }
\setrow {1}{ }{9} {4}{ }{8} {2}{ }{5}
\setrow {9}{7}{ } {3}{8}{5} { }{2}{4}
\setrow { }{ }{3} {7}{2}{6} {8}{ }{ }
\setrow {6}{8}{ } {1}{4}{9} { }{5}{3}
\setrow {7}{ }{4} {6}{ }{2} {5}{ }{1}
\setrow { }{6}{5} { }{1}{ } {9}{3}{ }
\setrow {3}{ }{8} { }{5}{ } {4}{ }{2}
\end{scope}
\end{scope}
\end{tikzpicture}
\end{document}
答案3
对于排版数独,您还可以使用逻辑谜题包 [计算机辅助设计协会]。
\begin{center}
\begin{lpsudoku}
\setrow{9}{{},2,6,{},{},{},{},{},{}}
\setrow{8}{{},{},{},{},{},{},1,7,{}}
\setrow{7}{{},{},3,1,{},6,{},{},{}}
\setrow{6}{{},6,{},{},5,{},8,{},3}
\setrow{5}{{},{},9,2,6,1,7,{},{}}
\setrow{4}{5,{},4,{},8,{},{},6,{}}
\setrow{3}{{},{},{},8,{},4,3,{},{}}
\setrow{2}{{},4,8,{},{},{},{},{},{}}
\setrow{1}{{},{},{},{},{},{},9,4,{}}
\end{lpsudoku}
\hspace{1.5cm}
\begin{lpsudoku}
\setrow{9}{1,2,6,5,7,8,4,3,9}
\setrow{8}{4,8,5,9,3,2,1,7,6}
\setrow{7}{7,9,3,1,4,6,5,8,2}
\setrow{6}{2,6,1,4,5,7,8,9,3}
\setrow{5}{8,3,9,2,6,1,7,5,4}
\setrow{4}{5,7,4,3,8,9,2,6,1}
\setrow{3}{6,5,2,8,9,4,3,1,7}
\setrow{2}{9,4,8,7,1,3,6,2,5}
\setrow{1}{3,1,7,6,2,5,9,4,8}
\end{lpsudoku}
\end{center}
您可以使用创建数独bash 脚本用于将导出的数独从 HoDoKu 或 QQwing 等传输到lpsudoku
环境中。请参阅:如何创建数独杂志