是否可以使用 LaTeX 生成数独游戏?

是否可以使用 LaTeX 生成数独游戏?

我是数独的粉丝,我想知道是否有可能在 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环境中。请参阅:如何创建数独杂志

随着lps杂志bash 脚本,你甚至可以编写自己的数独杂志有解决方案!只要运行脚本,您就会得到一本新杂志。

相关内容