From 5bdf51514141e1698e3ad64a72778cec9d47f3a2 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Fri, 10 May 2013 21:48:09 +0000 Subject: logicpuzzle (10may13) git-svn-id: svn://tug.org/texlive/trunk@30379 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/doc/latex/logicpuzzle/CHANGES | 12 + Master/texmf-dist/doc/latex/logicpuzzle/README | 17 +- .../doc/latex/logicpuzzle/logicpuzzle.pdf | Bin 0 -> 388698 bytes .../doc/latex/logicpuzzle/logicpuzzle.tex | 2521 ++++++++++++++++++++ .../latex/logicpuzzle/logicpuzzle/logicpuzzle.pdf | Bin 357337 -> 0 bytes .../latex/logicpuzzle/logicpuzzle/logicpuzzle.tex | 2284 ------------------ 6 files changed, 2543 insertions(+), 2291 deletions(-) create mode 100644 Master/texmf-dist/doc/latex/logicpuzzle/logicpuzzle.pdf create mode 100644 Master/texmf-dist/doc/latex/logicpuzzle/logicpuzzle.tex delete mode 100644 Master/texmf-dist/doc/latex/logicpuzzle/logicpuzzle/logicpuzzle.pdf delete mode 100644 Master/texmf-dist/doc/latex/logicpuzzle/logicpuzzle/logicpuzzle.tex (limited to 'Master/texmf-dist/doc') diff --git a/Master/texmf-dist/doc/latex/logicpuzzle/CHANGES b/Master/texmf-dist/doc/latex/logicpuzzle/CHANGES index e7f8c73ac65..f7d7db3a565 100644 --- a/Master/texmf-dist/doc/latex/logicpuzzle/CHANGES +++ b/Master/texmf-dist/doc/latex/logicpuzzle/CHANGES @@ -1,3 +1,15 @@ +== Logicpuzzle bundel (v2.1) == + +07/05/2013 reduced package counters -> LP@rows, LP@columns [jk] + +06/05/2013 updated lpsmag for v2.0+ [jk] + +06/05/2013 added schatzsuche environment and \kakurocolumn, \Diamond [jk] + +05/05/2013 added kakuro environment and \kakurorow, \KKR, \Black [jk] + +04/05/2013 added tentsandtrees environment and \Tree, \Tent [jk] + == Logicpuzzle bundel (v2.0) == 30/04/2013 moved package contents to logicpuzzle.sty [jk] diff --git a/Master/texmf-dist/doc/latex/logicpuzzle/README b/Master/texmf-dist/doc/latex/logicpuzzle/README index 93678e66b2f..3873439b30b 100644 --- a/Master/texmf-dist/doc/latex/logicpuzzle/README +++ b/Master/texmf-dist/doc/latex/logicpuzzle/README @@ -7,29 +7,32 @@ puzzles. At the moment the following puzzles are supported: * Chaos Sudoku * Hakyuu (aka Seismic, Ripple Effect, ...) * Hitori +* Kakuro * Kendoku (aka Mathdoku, Calcudoku, Basic, MiniPlu, Ken Ken, Square Wisdom, Sukendo, Caldoku, ...) * Killer Sudoku (aka Samunapure, Sum Number Place, Sumdoku, Gebietssummen, ...) * Laser Beam (aka Laserstrahl, ...) -* Minesweeper (aka Minensuche, ...) +* Minesweeper (aka Minensuche, ...) +* Schatzsuche * Skyline (aka Skycrapers, Wolkenkratzer, Hochhäuser, ...) incl. Skyline Sudoku and Skyline Sudoku (N*N) variants * Slitherlink (aka Fences, Number Line, Dotty Dilemma, Sli-Lin, Takegaki, Great Wall of China, Loop the Loop, Rundweg, Gartenzaun, ...) * Sudoku +* Tents and Trees (aka Zeltlager, Zeltplatz, Camping, ...) * Tunnel License: LPPL -Changes in v2.0: +Changes in v2.1: -- added support for Minesweeper puzzle +- added support for Kakuro puzzle https://bitbucket.org/kleberj/logicpuzzle/wiki/Minesweeper -- added support for Tunnel puzzle - https://bitbucket.org/kleberj/logicpuzzle/wiki/Tunnel +- added support for Schatzsuche puzzle + https://bitbucket.org/kleberj/logicpuzzle/wiki/Schatzsuche -- moved package contents to logicpuzzle.sty and lpenv.sty - merged docs into logicpuzzle.pdf \ No newline at end of file +- added support for Tents and Trees puzzle + https://bitbucket.org/kleberj/logicpuzzle/wiki/TentsAndTrees diff --git a/Master/texmf-dist/doc/latex/logicpuzzle/logicpuzzle.pdf b/Master/texmf-dist/doc/latex/logicpuzzle/logicpuzzle.pdf new file mode 100644 index 00000000000..8e8818ff848 Binary files /dev/null and b/Master/texmf-dist/doc/latex/logicpuzzle/logicpuzzle.pdf differ diff --git a/Master/texmf-dist/doc/latex/logicpuzzle/logicpuzzle.tex b/Master/texmf-dist/doc/latex/logicpuzzle/logicpuzzle.tex new file mode 100644 index 00000000000..2adf999008b --- /dev/null +++ b/Master/texmf-dist/doc/latex/logicpuzzle/logicpuzzle.tex @@ -0,0 +1,2521 @@ +% pdflatex --shell-escape logo.tex +% run twice: 1. download qrcode.png 2. include the pic +% or download http://i.imgur.com/KAunnuS.png and rename it to qrcode.png +% +\documentclass[a4paper]{ltxdoc}% +\usepackage[english]{babel}% +\usepackage[latin1]{inputenc}% +\usepackage[T1]{fontenc}% +\usepackage{textcomp}% +\usepackage{lmodern}% +\usepackage{bera}% +\usepackage{makeidx} +\usepackage{ccicons} +\usepackage{tabularx} +\usepackage{microtype}% +\usepackage{ltxdocext}% +\usepackage{listings} +\usepackage{nicefrac} +\usepackage{filecontents} +\usepackage{marginnote}% +\usepackage[svgnames,rgb]{xcolor}% +\usepackage[automark,nouppercase]{scrpage2} +\usepackage[tocgraduated]{tocstyle} +\usetocstyle{KOMAlike} +\usepackage{logicpuzzle} +\usepackage{hyperref} +% +\setlength{\headheight}{1.1\baselineskip}% +% +\let\PrintIndex\relax +\makeindex +\makeatletter +\renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}% + {-2.5ex\@plus -1ex \@minus -.25ex}% + {1.25ex \@plus .25ex}% + {\normalfont\normalsize\bfseries}} +\makeatother +\setcounter{secnumdepth}{5} +\setcounter{tocdepth}{5} +\makeatother +\AtBeginDocument{\IfFileExists{qrcode.png}{}{\write18{wget -O qrcode.png http://i.imgur.com/KAunnuS.png}}}% +\hypersetup{colorlinks=true,urlcolor=NavyBlue,linkcolor=NavyBlue,citecolor=CornflowerBlue,naturalnames=true,hypertexnames=false}% +\lstset{language=[LaTeX]TeX,numbers=left,numberstyle=\tiny, basicstyle=\ttfamily, aboveskip=\baselineskip, frame=single, backgroundcolor=\color{LightGoldenrodYellow}, keywordstyle=\color{Blue}, +emph={ddsudoku, battleship, bokkusu, chaossudoku, hakyuu, hitori, kakuro, kendoku, killersudoku, laserbeam, skyline, slitherlink, lpsudoku, minesweeper, schatzsuche, tentsandtrees, tunnel, +minipage, tikzpicture, puzzlebackground, puzzleforeground, center, pgfonlayer, left, +shape, fill, inner, sep, draw, rounded, corners, thick}, +emphstyle=\color{Tomato}, emph={[2]Wheat, HotPink, GreenYellow, LightBlue, LightSalmon, +LightYellow, green, sudoku, rows, columns, scale, layer, color, bgcolor, counterstyle, title, +titleindent, titlewidth, cvoffset, width}, +emphstyle={[2]\color{OliveDrab}}, morekeywords={LP@definecolor, LP@define@choicekey@fontsize, +ExecuteOptionsX, ProcessOptionsX, LP@init@counter, valueH, valueV, sumH, sumV, LP@bottomrow, +LP@toprow, LP@rightcolumn, bokkususetup, setkeys, LP@set@package, LP@set@env@prefix, +ifthenelse, equal, LP@drawbackground, LP@drawgrid, LP@drawcounter, ProvidesPackage, +RequirePackage, LP@BK@init@prefix, LP@BK@init@package, LP@leftcolumn, skylineL, +LP@define@key, framearea, framepuzzle, fillarea, filldiagonals, tikzpath, setrule, colorarea, +ddsudokucell, chaossudokucell, hakyuucell, setrow, LP@cvoffset, titleformat, definecounterstyle, +marginnote, tikz, node, placesegment, placeship, shipH, shipV, shipbox, puzzlecounter, color, +fillrow, setcolorrow, laserV, laserH, mirrorV, mirrorH, placearrow, placecross, placemirror, +laser, skylineT, skylineB, skylineR, skylineL, skylinecell, setbigcell, slitherlinkcell, +tunnelH, tunnelV, tube, portal, Mine, Diamond, ShipR, kakurosetup, kakurorow, KKR, Black, +Tent, Tree, definecolor, tentH, tentV, [, ]}} +\makeatletter +\renewcommand{\maketitle}% +{% + \thispagestyle{empty}% + \pagecolor{Ivory}% + \begin{titlepage}% + \begin{tikzpicture}[remember picture,overlay]% + \node[yshift=-2cm] at (current page.north west)% + {% + \begin{tikzpicture}[remember picture, overlay]% + \draw[fill=CornflowerBlue,color=CornflowerBlue] (0,0) rectangle% + (\paperwidth,2cm);% + \draw[anchor=west,yshift=-4cm,xshift=3cm,color=NavyBlue] (0,0) node% + {\parbox{15cm}{\RaggedRight\Huge\sffamily\textbf{\@title}}};% + \draw[anchor=west,yshift=-6cm,xshift=3cm,color=NavyBlue] (0,0) node% + {\parbox{15cm}{\huge\sffamily\textbf{\@fileversion}}};% + \draw[anchor=west,yshift=-9cm,xshift=3cm,color=NavyBlue] (0,0) node% + {\parbox{15cm}{\RaggedRight\huge\sffamily\textbf{\@subtitle}}};% + \draw[anchor=west,yshift=-13cm,xshift=3cm,color=NavyBlue] (0,0) node% + {\usebox\logo};% + \draw[anchor=west,yshift=-17cm,xshift=3cm,color=NavyBlue] (0,0) node% + {\parbox{15cm}{\huge\sffamily\textbf{\@date}}};% + \draw[anchor=west,yshift=-20cm,xshift=3cm,color=NavyBlue] (0,0) node% + {\parbox{15cm}{\Large\sffamily{\@authorline\\\textbf{\@author}}}};% + \end{tikzpicture}% + };% + \node[yshift=0cm] at (current page.south west)% + {% + \begin{tikzpicture}[remember picture, overlay]% + \draw[fill=NavyBlue,color=NavyBlue,yshift=6cm,xshift=2cm] (0,0) rectangle (0.2cm,19cm);% + \draw[fill=CornflowerBlue,color=CornflowerBlue] (0,0) rectangle (\paperwidth,2cm);% + \draw[anchor=west,yshift=1cm,xshift=3cm,color=NavyBlue] (0,0) node% + {\parbox{15cm}{\large\sffamily{\@refline}}};% + \end{tikzpicture}% + };% + \end{tikzpicture}% + \end{titlepage}% + \pagecolor{white}% +}% +% +\newcommand*{\@tikzhead}[1]% +{% + \begin{tikzpicture}[remember picture,overlay]% + \node[yshift=-2cm] at (current page.north west)% + {% + \begin{tikzpicture}[remember picture, overlay]% + \draw[fill=CornflowerBlue] (0,0) rectangle (\paperwidth,2cm);% + \draw[anchor=west,yshift=1cm,xshift=1.5cm,color=NavyBlue] (0,0) node% + {\parbox{15cm}{\LARGE\sffamily\textbf{\@title}}};% + \node[anchor=east,xshift=.9\paperwidth,rectangle,% + rounded corners=15pt,inner sep=11pt,fill=NavyBlue]% + {\color{white}\textsc{#1}};% + \end{tikzpicture}% + };% + \end{tikzpicture}% +}% +\clearscrheadings% +\ihead{\@tikzhead{\headmark}}% +\cfoot{\upshape\thepage}% +\pagestyle{scrheadings}% +% +\newcommand*{\Headline}[1]{\@mkboth{#1}{#1}}% +% +\renewcommand{\headfont}{\normalfont\mdseries\scshape} +% +\gdef\@subtitle{}% +\providecommand*{\Subtitle}[1]{\gdef\@subtitle{#1}}% +\gdef\@fileversion{}% +\providecommand*{\Fileversion}[1]{\gdef\@fileversion{#1}}% +\gdef\@author{}% +\providecommand*{\Author}[1]{\gdef\@author{#1}}% +\gdef\@authorline{Package author:}% +\providecommand*{\Authorline}[1]{\gdef\@authorline{#1}}% +\gdef\@refline{}% +\providecommand*{\Refline}[1]{\gdef\@refline{#1}}% +\gdef\and{\unskip{}, }% +\newcommand\doubledash{-\kern0.5pt-} +\def\enoteformat{\rightskip\z@ \leftskip\z@ \parindent=1em\leavevmode\llap{\makeenmark}} +\makeatother +% +\def\filename{logicpuzzle.sty}% +\def\XeLaTeX{Xe\LaTeX}% +% +\newenvironment{optionlist} +{\begin{trivlist}\setlength\leftskip{2em}} +{\end{trivlist}} +\newcommand\optitem[3]{\item [\texttt{\textbf{\textcolor{DodgerBlue}{#1}} \lbrack\textcolor{Crimson}{#2}\rbrack}] #3} +% +\makeatletter% +\renewcommand\tableofcontents% +{% + %\section*{\contentsname}% + \@mkboth{% + \MakeUppercase\contentsname}{\MakeUppercase\contentsname}% + \@starttoc{toc}% +}% +% +\newcommand\layer{\name@idx{PGF layer}} +\newcommand\styleoption{\name@idx{style option}}% +\newcommand\envoption{\name@idx{environment option}}% +\newcommand\stylename{\name@idx{document style}}% +\def\name@idx#1#2{% + {\ttfamily#2}% + \index{#2\space#1=\string\ttt{#2}\space#1}\index{#1>#2=\string\ttt{#2}}% +}% +\newcommand*\margcs[1]{\marginnote{\hbadness=10000\RaggedLeft\scriptsize #1}}% +\newcommand*\package[1]{\texttt{#1}\index{#1=\string\ttt{#1}}}% +\DeclareRobustCommand{\marg}[1]{% + \meta{#1}% + \index{#1=\string\meta{#1} mandatory argument}\index{mandatory argument>#1=\string\meta{#1}}% +}% +\DeclareRobustCommand{\oarg}[1]{% + \meta{#1}% + \index{#1=\string\meta{#1} optional argument}\index{optional argument>#1=\string\meta{#1}}% +}% +% +\renewenvironment{theindex} + {\if@twocolumn + \@restonecolfalse + \else + \@restonecoltrue + \fi + \columnseprule \z@ + \columnsep 35\p@ +\def\see##1##2{\textit{See} ##1}% +\def\seealso##1##2{\textit{See also} ##1}% +\long\def\cmd##1{\cs{\expandafter\cmd@to@cs\string##1}}% +\def\@url##1{\url@break\ttt{##1}\endgroup}% +\def\ttt{\begingroup\@sanitize\ttfamily\@ttt}% +\def\@ttt##1{##1\endgroup}% +\mathchardef\save@secnumdepth\c@secnumdepth +\c@secnumdepth\m@ne + \phantomsection% + \twocolumn%[\section{\indexname}]% + \addcontentsline{toc}{section}{Index}% +\c@secnumdepth\save@secnumdepth + %\thispagestyle{plain} + \parindent\z@ + \parskip\z@ \@plus .3\p@\relax + \let\item\@idxitem} + {\if@restonecol\onecolumn\else\clearpage\fi} +\makeatother +% +\setlength\parindent{0pt}% +\hypersetup{pdfauthor={Josef Kleber},pdftitle={A style file for typesetting logic puzzles},pdfsubject={Documentation for LaTeX style \filename}}% +% +\begin{document} +\begin{filecontents}{logicpuzzle.bib} +@misc{bib:webbb:logigpuzzle, + author = {Josef Kleber}, + note = {\href{https://bitbucket.org/kleberj/logicpuzzle/}(https://bitbucket.org/kleberj/logicpuzzle/)}, + title = {The logicpuzzle bundle}, + year = {2013}, + } + +@misc{bib:weblp:logigpuzzle, + author = {Josef Kleber}, + note = {\href{http://logicpuzzle.square7.de/}(http://logicpuzzle.square7.de/)}, + title = {{logicpuzzle -- A LaTeX style file for typesetting logic puzzles}}, + year = {2013}, + } + +@misc{bib:wiki:createlpsudoku, + author = {Josef Kleber}, + note = {\href{http://logicpuzzle.square7.de/createlpsudoku}(http://logicpuzzle.square7.de/createlpsudoku)}, + title = {createlpsudoku}, + year = {2013}, + } + +@misc{bib:wiki:lpsmag, + author = {Josef Kleber}, + note = {\href{http://logicpuzzle.square7.de/lpsmag}(http://logicpuzzle.square7.de/lpsmag)}, + title = {lpsmag}, + year = {2013}, + } + +@misc{bib:wiki:howtosudoku, + author = {Josef Kleber}, + note = {\href{http://logicpuzzle.square7.de/sudoku_magazine}(http://logicpuzzle.square7.de/sudoku\_magazine)}, + title = {{How to create a Sudoku magazine}}, + year = {2013}, + } + +@misc{bib:web:qqwing, + author = {Stephen Ostermiller}, + note = {\href{http://ostermiller.org/qqwing/}(http://ostermiller.org/qqwing/)}, + title = {{QQwing -- Sudoku Generator and Solver}}, + year = {2011}, + } + +@misc{bib:web:hodoku, + author = {Bernhard Hobiger}, + note = {\href{http://hodoku.sourceforge.net/en/index.php}(http://hodoku.sourceforge.net/en/index.php)}, + title = {{HoDoKu}}, + year = {2012}, + } + +@misc{bib:ex:ddsudoku, + author = {Josef Kleber}, + note = {\href{https://bitbucket.org/kleberj/logicpuzzle/downloads/example-ddsudoku.pdf}(https://bitbucket.org/kleberj/logicpuzzle/downloads/example-ddsudoku.pdf)}, + title = {{Examples \& Solutions (ddsudoku)}}, + year = {2013}, + } + +@misc{bib:ex:battleship, + author = {Josef Kleber}, + note = {\href{https://bitbucket.org/kleberj/logicpuzzle/downloads/example-battleship.pdf}(https://bitbucket.org/kleberj/logicpuzzle/downloads/example-battleship.pdf)}, + title = {{Examples \& Solutions (battleship)}}, + year = {2013}, + } + +@misc{bib:ex:bokkusu, + author = {Josef Kleber}, + note = {\href{https://bitbucket.org/kleberj/logicpuzzle/downloads/example-bokkusu.pdf}(https://bitbucket.org/kleberj/logicpuzzle/downloads/example-bokkusu.pdf)}, + title = {{Examples \& Solutions (bokkusu)}}, + year = {2013}, + } + +@misc{bib:ex:chaossudoku, + author = {Josef Kleber}, + note = {\href{https://bitbucket.org/kleberj/logicpuzzle/downloads/example-chaossudoku.pdf}(https://bitbucket.org/kleberj/logicpuzzle/downloads/example-chaossudoku.pdf)}, + title = {{Examples \& Solutions (chaossudoku)}}, + year = {2013}, + } + +@misc{bib:ex:hakyuu, + author = {Josef Kleber}, + note = {\href{https://bitbucket.org/kleberj/logicpuzzle/downloads/example-hakyuu.pdf}(https://bitbucket.org/kleberj/logicpuzzle/downloads/example-hakyuu.pdf)}, + title = {{Examples \& Solutions (hakyuu)}}, + year = {2013}, + } + +@misc{bib:ex:hitori, + author = {Josef Kleber}, + note = {\href{https://bitbucket.org/kleberj/logicpuzzle/downloads/example-hitor.pdf}(https://bitbucket.org/kleberj/logicpuzzle/downloads/example-hitori.pdf)}, + title = {{Examples \& Solutions (hitori)}}, + year = {2013}, + } + +@misc{bib:ex:kendoku, + author = {Josef Kleber}, + note = {\href{https://bitbucket.org/kleberj/logicpuzzle/downloads/example-kendoku.pdf}(https://bitbucket.org/kleberj/logicpuzzle/downloads/example-kendoku.pdf)}, + title = {{Examples \& Solutions (kendoku)}}, + year = {2013}, + } + +@misc{bib:ex:killersudoku, + author = {Josef Kleber}, + note = {\href{https://bitbucket.org/kleberj/logicpuzzle/downloads/example-killersudoku.pdf}(https://bitbucket.org/kleberj/logicpuzzle/downloads/example-killersudoku.pdf)}, + title = {{Examples \& Solutions (killersudoku)}}, + year = {2013}, + } + +@misc{bib:ex:laserbeam, + author = {Josef Kleber}, + note = {\href{https://bitbucket.org/kleberj/logicpuzzle/downloads/example-laserbeam.pdf}(https://bitbucket.org/kleberj/logicpuzzle/downloads/example-laserbeam.pdf)}, + title = {{Examples \& Solutions (laserbeam)}}, + year = {2013}, + } + +@misc{bib:ex:minesweeper, + author = {Josef Kleber}, + note = {\href{https://bitbucket.org/kleberj/logicpuzzle/downloads/example-minesweeper.pdf}(https://bitbucket.org/kleberj/logicpuzzle/downloads/example-minesweeper.pdf)}, + title = {{Examples \& Solutions (minesweeper)}}, + year = {2013}, + } + +@misc{bib:ex:skyline, + author = {Josef Kleber}, + note = {\href{https://bitbucket.org/kleberj/logicpuzzle/downloads/example-skyline.pdf}(https://bitbucket.org/kleberj/logicpuzzle/downloads/example-skyline.pdf)}, + title = {{Examples \& Solutions (skyline)}}, + year = {2013}, + } + +@misc{bib:ex:slitherlink, + author = {Josef Kleber}, + note = {\href{https://bitbucket.org/kleberj/logicpuzzle/downloads/example-slitherlink.pdf}(https://bitbucket.org/kleberj/logicpuzzle/downloads/example-slitherlink.pdf)}, + title = {{Examples \& Solutions (slitherlink)}}, + year = {2013}, + } + +@misc{bib:ex:lpsudoku, + author = {Josef Kleber}, + note = {\href{https://bitbucket.org/kleberj/logicpuzzle/downloads/example-lpsudoku.pdf}(https://bitbucket.org/kleberj/logicpuzzle/downloads/example-lpsudoku.pdf)}, + title = {{Examples \& Solutions (lpsudoku)}}, + year = {2013}, + } + +@misc{bib:ex:tunnel, + author = {Josef Kleber}, + note = {\href{https://bitbucket.org/kleberj/logicpuzzle/downloads/example-tunnel.pdf}(https://bitbucket.org/kleberj/logicpuzzle/downloads/example-tunnel.pdf)}, + title = {{Examples \& Solutions (tunnel)}}, + year = {2013}, + } + +@misc{bib:ex:schatzsuche, + author = {Josef Kleber}, + note = {\href{https://bitbucket.org/kleberj/logicpuzzle/downloads/example-schatzsuche.pdf}(https://bitbucket.org/kleberj/logicpuzzle/downloads/example-schatzsuche.pdf)}, + title = {{Examples \& Solutions (schatzsuche)}}, + year = {2013}, + } + +@misc{bib:ex:kakuro, + author = {Josef Kleber}, + note = {\href{https://bitbucket.org/kleberj/logicpuzzle/downloads/example-kakuro.pdf}(https://bitbucket.org/kleberj/logicpuzzle/downloads/example-kakuro.pdf)}, + title = {{Examples \& Solutions (kakuro)}}, + year = {2013}, + } + +@misc{bib:ex:tentsandtrees, + author = {Josef Kleber}, + note = {\href{https://bitbucket.org/kleberj/logicpuzzle/downloads/example-tentsandtrees.pdf}(https://bitbucket.org/kleberj/logicpuzzle/downloads/example-tentsandtrees.pdf)}, + title = {{Examples \& Solutions (tentsandtrees)}}, + year = {2013}, + } + + +\end{filecontents} +\bibliographystyle{plain} +\ddsudokusetup{width=4.5cm,scale=0.85} +\battleshipsetup{width=4.5cm,scale=0.77,sbindent=0.65cm,sbwidth=3.6cm} +\bokkususetup{width=4.5cm,scale=0.64,fontsize=normalsize} +\chaossudokusetup{width=4.5cm,scale=0.89} +\hakyuusetup{width=4.5cm,scale=0.89} +\hitorisetup{width=4.5cm,scale=0.85} +\kakurosetup{width=4.5cm,scale=0.85} +\kendokusetup{width=4.5cm,scale=0.89} +\killersudokusetup{width=4.5cm,scale=0.89} +\laserbeamsetup{width=4.5cm,scale=0.66,fontsize=normalsize} +\minesweepersetup{width=4.5cm,scale=0.85} +\schatzsuchesetup{width=4.5cm,scale=0.85} +\skylinesetup{width=4.5cm,scale=0.66,fontsize=normalsize} +\slitherlinksetup{width=4.5cm,scale=0.85} +\lpsudokusetup{width=4.5cm,scale=0.49,fontsize=small} +\tentsandtreessetup{width=4.5cm,scale=0.75} +\tunnelsetup{width=4.5cm,scale=0.75} +\title{\filename}% +\Subtitle{A style file for typesetting logic puzzles}% +\author{Josef Kleber} +\Fileversion{v2.1} +\Refline{\href{mailto:josef.kleber@gmx.de}{\texttt{josef.kleber@gmx.de}}\\\href{https://bitbucket.org/kleberj/logicpuzzle/}{\texttt{https://bitbucket.org/kleberj/logicpuzzle/}}} +\newsavebox\logo +\savebox\logo{% + \begin{laserbeam} + \laserV{1} + \laserH{{}} + \mirrorH{{},2} + \mirrorV{{},{},{},{},{},2} + \framepuzzle[LP@c@mirror] + \placearrow{3}{1}{LeftUp} + \placearrow{6}{4}{RightUp} + \placecross{3}{3} + \end{laserbeam} + \hspace{1.5cm} + \begin{laserbeam} + \laserV{1} + \laserH{{}} + \mirrorH{{},2} + \mirrorV{{},{},{},{},{},2} + \framepuzzle[LP@c@mirror] + \placearrow{3}{1}{LeftUp} + \placearrow{6}{4}{RightUp} + \placecross{3}{3} + \placemirror{2}{2}{V} + \placemirror{4}{2}{H} + \placemirror{5}{5}{V} + \placemirror{3}{5}{H} + \begin{puzzlebackground} + \laser{\tikzpath{3}{1}{7,9,9,9,7,1,7,1,3,3,3,9,9}} + \end{puzzlebackground} + \end{laserbeam} +} +\maketitle +\stepcounter{page} +\tableofcontents +\clearpage +\setlength\parskip{6pt}% + +\section{Supported puzzles} +\label{sec:supppuzzle} +\subsection{2D-Sudoku} +Fill every row, every column and each of the two diagonals -- if indicated -- with numbers from 1 to SIZE of the grid. + +\subsubsection{Example} + +\begin{center} + \begin{ddsudoku} + \framepuzzle + \filldiagonals[orange!50] + \ddsudokucell{1}{5}{1} + \ddsudokucell{1}{4}{3} + \ddsudokucell{2}{3}{4} + \ddsudokucell{4}{1}{3} + \ddsudokucell{4}{3}{2} + \ddsudokucell{5}{4}{4} + \end{ddsudoku} + \hspace{1.5cm} + \begin{ddsudoku} + \framepuzzle + \filldiagonals[orange!50] + \setrow{5}{1,3,4,5,2} + \setrow{4}{3,2,5,1,4} + \setrow{3}{5,4,3,2,1} + \setrow{2}{2,5,1,4,3} + \setrow{1}{4,1,2,3,5} + \end{ddsudoku} +\end{center} + +\begin{lstlisting} +\begin{center} + \begin{ddsudoku} + \framepuzzle + \filldiagonals[orange!50] + \ddsudokucell{1}{5}{1} + \ddsudokucell{1}{4}{3} + \ddsudokucell{2}{3}{4} + \ddsudokucell{4}{1}{3} + \ddsudokucell{4}{3}{2} + \ddsudokucell{5}{4}{4} + \end{ddsudoku} + \hspace{1.5cm} + \begin{ddsudoku} + \framepuzzle + \filldiagonals[orange!50] + \setrow{5}{1,3,4,5,2} + \setrow{4}{3,2,5,1,4} + \setrow{3}{5,4,3,2,1} + \setrow{2}{2,5,1,4,3} + \setrow{1}{4,1,2,3,5} + \end{ddsudoku} +\end{center} +\end{lstlisting} + +\subsubsection{Options} +\begin{optionlist} + \optitem{\envoption{rows}}{5}{defines the number of rows in the grid.} + \optitem{\envoption{columns}}{5}{specifies the number of columns in the grid} + \optitem{\envoption{width}}{5.1cm}{sets the width of the minipage, in which the grid is typeset.} + \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage.} + \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}} + \optitem{\envoption{title}}{}{sets the title of a puzzle.} + \optitem{\envoption{titleindent}}{0cm}{defines the indent of the title.} + \optitem{\envoption{titlewidth}}{5.1cm}{specifies the width of the box the title is set in.} + \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.} + \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right} + \optitem{\envoption{cvoffset}}{-23pt}{sets the vertical offset of the counters in the margin.} +\end{optionlist} + +\subsection{Battleship} +Try to find the positions of the ships listed below the puzzle. The numbers on the side of the puzzle reveals how many ship segments can be found in the rows and columns. All remaining fields indicate 'water'. Consider the following rules: The ships are arranged horizontally and vertically. No ship touches another ship at any point, not even diagonally. + +\subsubsection{Example} +\begin{center} +\begin{battleship} +\placesegment{4}{1}{\ShipR} +\shipH{4,1,2,2,2} +\shipV{3,1,4,0,3} +\shipbox{3,3,2,2,1} +\end{battleship} +\hspace{1.5cm} +\begin{battleship} +\placeship{V}{1}{1}{3} +\placeship{H}{1}{5}{2} +\placeship{H}{3}{1}{2} +\placeship{H}{3}{3}{3} +\placeship{H}{5}{5}{1} +\shipH{4,1,2,2,2} +\shipV{3,1,4,0,3} +\end{battleship} +\end{center} + +\begin{lstlisting} +\begin{center} + \begin{battleship} + \placesegment{4}{1}{\ShipR} + \shipH{4,1,2,2,2} + \shipV{3,1,4,0,3} + \shipbox{3,3,2,2,1} + \end{battleship} + \hspace{1.5cm} + \begin{battleship} + \placeship{V}{1}{1}{3} + \placeship{H}{1}{5}{2} + \placeship{H}{3}{1}{2} + \placeship{H}{3}{3}{3} + \placeship{H}{5}{5}{1} + \shipH{4,1,2,2,2} + \shipV{3,1,4,0,3} + \end{battleship} +\end{center} +\end{lstlisting} + +\subsubsection{Options} +\begin{optionlist} + \optitem{\envoption{rows}}{5}{defines the number of rows in the grid.} + \optitem{\envoption{columns}}{5}{specifies the number of columns in the grid.} + \optitem{shipcolor}{green}{sets the color of the ship segments.} + \optitem{\envoption{width}}{6cm}{sets the width of the minipage, in which the grid is typeset.} + \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage.} + \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}} + \optitem{\envoption{title}}{}{sets the title of a puzzle.} + \optitem{\envoption{titleindent}}{0.75cm}{defines the indent of the title.} + \optitem{\envoption{titlewidth}}{5.15cm}{specifies the width of the box the title is set in.} + \optitem{\envoption{sbindent}}{0.75cm}{defines the indent of the ship box below the grid.} +\optitem{\envoption{sbwidth}}{5.15cm}{specifies the width of the minipage, in which the ships are typeset.} + \optitem{\envoption{sbshipscale}}{1}{scales the size of the ships in the ship box.} + \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.} + \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right} + \optitem{\envoption{cvoffset}}{-23pt}{sets the vertical offset of the counters in the margin.} +\end{optionlist} + +\subsection{Bokkusu} +Black out some of the grid cells. The numbers on the left and the bottom edge of the grid indicate the values of the cells for adding up. The numbers on the right and the top edge of the grid specify the sums of the values of the colored cells. + +\subsubsection{Example} +\begin{center} + \begin{bokkusu} + \valueH{1,2,3,4,5} + \valueV{1,2,3,4,5} + \sumH{7,1,11,9,6} + \sumV{2,12,5,13,?} + \end{bokkusu} + \hspace{1.5cm} + \begin{bokkusu} + \valueH{1,2,3,4,5} + \valueV{1,2,3,4,5} + \sumH{7,1,11,9,6} + \sumV{2,12,5,13,?} + \fillrow{1}{0,1,0,0,0} + \fillrow{2}{0,0,1,1,1} + \fillrow{3}{1,0,0,1,0} + \fillrow{4}{1,0,1,1,1} + \fillrow{5}{0,0,1,0,0} + \end{bokkusu} +\end{center} + +\begin{lstlisting} +\begin{center} + \begin{bokkusu} + \valueH{1,2,3,4,5} + \valueV{1,2,3,4,5} + \sumH{7,1,11,9,6} + \sumV{2,12,5,13,?} + \end{bokkusu} + \hspace{1.5cm} + \begin{bokkusu} + \valueH{1,2,3,4,5} + \valueV{1,2,3,4,5} + \sumH{7,1,11,9,6} + \sumV{2,12,5,13,?} + \fillrow{5}{0,0,1,0,0} + \fillrow{4}{1,0,1,1,1} + \fillrow{3}{1,0,0,1,0} + \fillrow{2}{0,0,1,1,1} + \fillrow{1}{0,1,0,0,0} + \end{bokkusu} +\end{center} +\end{lstlisting} + +\subsubsection{Options} +\begin{optionlist} + \optitem{\envoption{rows}}{5}{defines the number of rows in the grid.} + \optitem{\envoption{columns}}{5}{specifies the number of columns in the grid} + \optitem{\envoption{width}}{6.7cm}{sets the width of the minipage, in which the grid is typeset.} + \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage.} + \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}} + \optitem{\envoption{title}}{}{sets the title of a puzzle.} + \optitem{\envoption{titleindent}}{0.75cm}{defines the indent of the title.} + \optitem{\envoption{titlewidth}}{5.85cm}{specifies the width of the box the title is set in.} + \optitem{\envoption{color}}{black}{specifies the color for coloring the cells.} + \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.} + \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right} + \optitem{\envoption{cvoffset}}{-38pt}{sets the vertical offset of the counters in the margin.} +\end{optionlist} + +\subsection{Chaos Sudoku} +Fill the cells of an area with numbers from 1 to N of the N*N grid. Each number can appear only once - in each area, column, row or diagonal if indicated. +\subsubsection{Example} +\begin{center} + \begin{chaossudoku} + \chaossudokucell{1}{1}{3} + \chaossudokucell{1}{5}{4} + \chaossudokucell{3}{2}{4} + \chaossudokucell{4}{2}{5} + \chaossudokucell{5}{5}{2} + \begin{puzzlebackground} + \fillarea{Wheat}{(1,1)--(1,2)--(2,2)--(2,3)--(4,3)--(4,1)--(1,1)} + \fillarea{HotPink!30}{(1,2)--(1,6)--(3,6)--(3,5)--(2,5)--(2,2)--(1,2)} + \fillarea{GreenYellow}{(2,3)--(2,5)--(3,5)--(3,4)--(5,4)--(5,2)--(4,2)--(4,3)--(2,3)} + \fillarea{LightBlue}{(3,4)--(3,6)--(6,6)--(6,5)--(5,5)--(5,4)--(3,4)} + \fillarea{LightYellow}{(4,1)--(4,2)--(5,2)--(5,5)--(6,5)--(6,1)--(4,1)} + \end{puzzlebackground} + \end{chaossudoku} + \hspace{1.5cm} + \begin{chaossudoku} + \setrow{5}{4,3,5,1,2} + \setrow{4}{2,1,3,4,5} + \setrow{3}{5,4,2,3,1} + \setrow{2}{1,2,4,5,3} + \setrow{1}{3,5,1,2,4} + \begin{puzzlebackground} + \fillarea{Wheat}{\tikzpath{1}{1}{8,6,8,6,6,2,2,4,4,4}} + \fillarea{HotPink!30}{\tikzpath{1}{2}{8,8,8,8,6,6,2,4,2,2,2,4}} + \fillarea{GreenYellow}{\tikzpath{2}{3}{8,8,6,2,6,6,2,2,4,8,4,4}} + \fillarea{LightBlue}{\tikzpath{3}{4}{8,8,6,6,6,2,4,2,4,4}} + \fillarea{LightYellow}{\tikzpath{4}{1}{8,6,8,8,8,6,2,2,2,2,4,4}} + \end{puzzlebackground} + \end{chaossudoku} +\end{center} + +\begin{lstlisting} +\begin{center} + \begin{chaossudoku} + \chaossudokucell{1}{1}{3} + \chaossudokucell{1}{5}{4} + \chaossudokucell{3}{2}{4} + \chaossudokucell{4}{2}{5} + \chaossudokucell{5}{5}{2} + \begin{puzzlebackground} + \fillarea{Wheat}{(1,1)--(1,2)--(2,2)--(2,3)--(4,3)--(4,1) + --(1,1)} + \fillarea{HotPink!30}{(1,2)--(1,6)--(3,6)--(3,5)--(2,5) + --(2,2)--(1,2)} + \fillarea{GreenYellow}{(2,3)--(2,5)--(3,5)--(3,4)--(5,4) + --(5,2)--(4,2)--(4,3)--(2,3)} + \fillarea{LightBlue}{(3,4)--(3,6)--(6,6)--(6,5)--(5,5) + --(5,4)--(3,4)} + \fillarea{LightYellow}{(4,1)--(4,2)--(5,2)--(5,5)--(6,5) + --(6,1)--(4,1)} + \end{puzzlebackground} + \end{chaossudoku} + \hspace{1.5cm} + \begin{chaossudoku} + \setrow{5}{4,3,5,1,2} + \setrow{4}{2,1,3,4,5} + \setrow{3}{5,4,2,3,1} + \setrow{2}{1,2,4,5,3} + \setrow{1}{3,5,1,2,4} + \begin{puzzlebackground} + \fillarea{Wheat}{(1,1)--(1,2)--(2,2)--(2,3)--(4,3)--(4,1) + --(1,1)} + \fillarea{HotPink!30}{(1,2)--(1,6)--(3,6)--(3,5)--(2,5) + --(2,2)--(1,2)} + \fillarea{GreenYellow}{(2,3)--(2,5)--(3,5)--(3,4)--(5,4) + --(5,2)--(4,2)--(4,3)--(2,3)} + \fillarea{LightBlue}{(3,4)--(3,6)--(6,6)--(6,5)--(5,5) + --(5,4)--(3,4)} + \fillarea{LightYellow}{(4,1)--(4,2)--(5,2)--(5,5)--(6,5) + --(6,1)--(4,1)} + \end{puzzlebackground} + \end{chaossudoku} +\end{center} +\end{lstlisting} + +\subsubsection{Options} +\begin{optionlist} + \optitem{\envoption{rows}}{5}{defines the number of rows in the grid.} + \optitem{\envoption{columns}}{5}{specifies the number of columns in the grid} + \optitem{\envoption{width}}{5.1cm}{sets the width of the minipage, in which the grid is typeset.} + \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage.} + \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}} + \optitem{\envoption{title}}{}{sets the title of a puzzle.} + \optitem{\envoption{titleindent}}{0cm}{defines the indent of the title.} + \optitem{\envoption{titlewidth}}{5.1cm}{specifies the width of the box the title is set in.} + \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.} + \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right} + \optitem{\envoption{cvoffset}}{-23pt}{sets the vertical offset of the counters in the margin.} +\end{optionlist} + +\subsection{Hakyuu} +Fill the cells of an area with numbers from 1 to SIZE of the area. If there are two cells with the same number N in a row or a column, there must be at least N cells between those two cells. +\subsubsection{Example} +\begin{center} + \begin{hakyuu} + \hakyuucell{1}{5}{2} + \hakyuucell{3}{5}{6} + \hakyuucell{4}{5}{5} + \hakyuucell{4}{4}{4} + \hakyuucell{1}{3}{3} + \hakyuucell{2}{2}{2} + \hakyuucell{5}{2}{5} + \hakyuucell{4}{1}{1} + \begin{puzzlebackground} + \fillarea{Wheat}{(1,1)--(1,4)--(2,4)--(2,1)--(1,1)} + \fillarea{HotPink!30}{(1,4)--(1,6)--(6,6)--(6,5)--(3,5)--(3,4)--(1,4)} + \fillarea{GreenYellow}{(2,4)--(3,4)--(3,5)--(5,5)--(5,4)--(4,4)--(4,3)--(2,3)--(2,4)} + \fillarea{LightBlue}{(5,5)--(6,5)--(6,3)--(4,3)--(4,4)--(5,4)--(5,5)} + \fillarea{LightSalmon!50}{(2,2)--(2,3)--(5,3)--(5,2)--(2,2)} + \fillarea{LightYellow}{(2,1)--(2,2)--(5,2)--(5,3)--(6,3)--(6,1)--(2,1)} + \end{puzzlebackground} + \end{hakyuu} + \hspace{1.5cm} + \begin{hakyuu} + \setrow{5}{2,3,6,5,4} + \setrow{4}{1,7,3,4,2} + \setrow{3}{3,1,2,1,3} + \setrow{2}{1,2,1,3,5} + \setrow{1}{2,3,4,1,2} + \begin{puzzlebackground} + \fillarea{Wheat}{(1,1)--(1,4)--(2,4)--(2,1)--(1,1)} + \fillarea{HotPink!30}{(1,4)--(1,6)--(6,6)--(6,5)--(3,5)--(3,4)--(1,4)} + \fillarea{GreenYellow}{(2,4)--(3,4)--(3,5)--(5,5)--(5,4)--(4,4)--(4,3)--(2,3)--(2,4)} + \fillarea{LightBlue}{(5,5)--(6,5)--(6,3)--(4,3)--(4,4)--(5,4)--(5,5)} + \fillarea{LightSalmon!50}{(2,2)--(2,3)--(5,3)--(5,2)--(2,2)} + \fillarea{LightYellow}{(2,1)--(2,2)--(5,2)--(5,3)--(6,3)--(6,1)--(2,1)} + \end{puzzlebackground} + \end{hakyuu} +\end{center} + +\begin{lstlisting} +\begin{center} + \begin{hakyuu} + \hakyuucell{1}{5}{2} + \hakyuucell{3}{5}{6} + \hakyuucell{4}{5}{5} + \hakyuucell{4}{4}{4} + \hakyuucell{1}{3}{3} + \hakyuucell{2}{2}{2} + \hakyuucell{5}{2}{5} + \hakyuucell{4}{1}{1} + \begin{puzzlebackground} + \fillarea{Wheat}{(1,1)--(1,4)--(2,4)--(2,1)--(1,1)} + \fillarea{HotPink!30}{(1,4)--(1,6)--(6,6)--(6,5)--(3,5) + --(3,4)--(1,4)} + \fillarea{GreenYellow}{(2,4)--(3,4)--(3,5)--(5,5)--(5,4) + --(4,4)--(4,3)--(2,3)--(2,4)} + \fillarea{LightBlue}{(5,5)--(6,5)--(6,3)--(4,3)--(4,4) + --(5,4)--(5,5)} + \fillarea{LightSalmon!50}{(2,2)--(2,3)--(5,3)--(5,2) + --(2,2)} + \fillarea{LightYellow}{(2,1)--(2,2)--(5,2)--(5,3)--(6,3) + --(6,1)--(2,1)} + \end{puzzlebackground} + \end{hakyuu} + \hspace{1.5cm} + \begin{hakyuu} + \setrow{5}{2,3,6,5,4} + \setrow{4}{1,7,3,4,2} + \setrow{3}{3,1,2,1,3} + \setrow{2}{1,2,1,3,5} + \setrow{1}{2,3,4,1,2} + \begin{puzzlebackground} + \fillarea{Wheat}{(1,1)--(1,4)--(2,4)--(2,1)--(1,1)} + \fillarea{HotPink!30}{(1,4)--(1,6)--(6,6)--(6,5)--(3,5) + --(3,4)--(1,4)} + \fillarea{GreenYellow}{(2,4)--(3,4)--(3,5)--(5,5)--(5,4) + --(4,4)--(4,3)--(2,3)--(2,4)} + \fillarea{LightBlue}{(5,5)--(6,5)--(6,3)--(4,3)--(4,4) + --(5,4)--(5,5)} + \fillarea{LightSalmon!50}{(2,2)--(2,3)--(5,3)--(5,2) + --(2,2)} + \fillarea{LightYellow}{(2,1)--(2,2)--(5,2)--(5,3)--(6,3) + --(6,1)--(2,1)} + \end{puzzlebackground} + \end{hakyuu} +\end{center} +\end{lstlisting} + +\subsubsection{Options} +\begin{optionlist} + \optitem{\envoption{rows}}{5}{defines the number of rows in the grid.} + \optitem{\envoption{columns}}{5}{specifies the number of columns in the grid} + \optitem{\envoption{width}}{5.1cm}{sets the width of the minipage, in which the grid is typeset.} + \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage.} + \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}} + \optitem{\envoption{title}}{}{sets the title of a puzzle.} + \optitem{\envoption{titleindent}}{0cm}{defines the indent of the title.} + \optitem{\envoption{titlewidth}}{5.1cm}{specifies the width of the box the title is set in.} + \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.} + \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right} + \optitem{\envoption{cvoffset}}{-23pt}{sets the vertical offset of the counters in the margin.} +\end{optionlist} + +\subsection{Hitori} +Black out some cells according to these specifications: In each row and each column a number may only occur once or can be completely blackened. The blackened cells can touch neither horizontal nor vertical. All non blackened cells must remain connected. Each number has its own color, which otherwise has no meaning. +\subsubsection{Example} +\begin{center} + \begin{hitori} + \framepuzzle + \setcolorrow{5}{2,4,2,1,1} + \setcolorrow{4}{1,3,2,4,1} + \setcolorrow{3}{1,3,3,3,2} + \setcolorrow{2}{4,2,1,3,3} + \setcolorrow{1}{4,1,2,2,3} + \end{hitori} + \hspace{1.5cm} + \begin{hitori} + \framepuzzle + \setcolorrow{5}{2,4,0,1,0} + \setcolorrow{4}{0,3,2,4,1} + \setcolorrow{3}{1,0,3,0,2} + \setcolorrow{2}{4,2,1,3,0} + \setcolorrow{1}{0,1,0,2,3} + \end{hitori} +\end{center} + +\begin{lstlisting} +\begin{center} + \begin{hitori} + \framepuzzle + \setcolorrow{5}{2,4,2,1,1} + \setcolorrow{4}{1,3,2,4,1} + \setcolorrow{3}{1,3,3,3,2} + \setcolorrow{2}{4,2,1,3,3} + \setcolorrow{1}{4,1,2,2,3} + \end{hitori} + \hspace{1.5cm} + \begin{hitori} + \framepuzzle + \setcolorrow{5}{2,4,0,1,0} + \setcolorrow{4}{0,3,2,4,1} + \setcolorrow{3}{1,0,3,0,2} + \setcolorrow{2}{4,2,1,3,0} + \setcolorrow{1}{0,1,0,2,3} + \end{hitori} +\end{center} +\end{lstlisting} + +\subsubsection{Options} +\begin{optionlist} + \optitem{\envoption{rows}}{5}{defines the number of rows in the grid.} + \optitem{\envoption{columns}}{5}{specifies the number of columns in the grid} + \optitem{\envoption{width}}{5.1cm}{sets the width of the minipage, in which the grid is typeset.} + \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage.} + \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}} + \optitem{\envoption{title}}{}{sets the title of a puzzle.} + \optitem{\envoption{titleindent}}{0cm}{defines the indent of the title.} + \optitem{\envoption{titlewidth}}{5.1cm}{specifies the width of the box the title is set in.} + \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.} + \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right} + \optitem{\envoption{cvoffset}}{-23pt}{sets the vertical offset of the counters in the margin.} +\end{optionlist} + +\subsection{Kakuro} +Enter numbers from 1 to 9 in any order into the blank cells. Here, the given horizontal and vertical sums should result. The zero does not occur. Within a summation, no number can be repeated. +\subsubsection{Example} +\definecolor{kakuro}{RGB}{155,206,167} +\kakurosetup{color=kakuro} +\begin{center} + \begin{kakuro} + \framepuzzle + \kakurorow{5}{\Black,\KKR{23}{},\KKR{16}{},\KKR{10}{},\Black} + \kakurorow{4}{\KKR{}{14},9,1,4,\KKR{3}{}} + \kakurorow{3}{\KKR{}{16},6,5,3,2} + \kakurorow{2}{\KKR{}{14},8,3,2,1} + \kakurorow{1}{\Black,\KKR{}{8},7,1,\Black} + \end{kakuro} + \hspace{1.5cm} + \begin{kakuro}[solution] + \framepuzzle + \kakurorow{5}{\Black,\KKR{23}{},\KKR{16}{},\KKR{10}{},\Black} + \kakurorow{4}{\KKR{}{14},9,1,4,\KKR{3}{}} + \kakurorow{3}{\KKR{}{16},6,5,3,2} + \kakurorow{2}{\KKR{}{14},8,3,2,1} + \kakurorow{1}{\Black,\KKR{}{8},7,1,\Black} + \end{kakuro} +\end{center} +\begin{lstlisting} +\definecolor{kakuro}{RGB}{155,206,167} +\kakurosetup{color=kakuro} +\begin{center} + \begin{kakuro} + \framepuzzle + \kakurorow{5}{\Black,\KKR{23}{},\KKR{16}{},\KKR{10}{},\Black} + \kakurorow{4}{\KKR{}{14},9,1,4,\KKR{3}{}} + \kakurorow{3}{\KKR{}{16},6,5,3,2} + \kakurorow{2}{\KKR{}{14},8,3,2,1} + \kakurorow{1}{\Black,\KKR{}{8},7,1,\Black} + \end{kakuro} + \hspace{1.5cm} + \begin{kakuro}[solution] + \framepuzzle + \kakurorow{5}{\Black,\KKR{23}{},\KKR{16}{},\KKR{10}{},\Black} + \kakurorow{4}{\KKR{}{14},9,1,4,\KKR{3}{}} + \kakurorow{3}{\KKR{}{16},6,5,3,2} + \kakurorow{2}{\KKR{}{14},8,3,2,1} + \kakurorow{1}{\Black,\KKR{}{8},7,1,\Black} + \end{kakuro} +\end{center} +\end{lstlisting} + +\subsubsection{Options} +\begin{optionlist} + \optitem{\envoption{rows}}{5}{defines the number of rows in the grid.} + \optitem{\envoption{columns}}{5}{specifies the number of columns in the grid} + \optitem{\envoption{width}}{5.1cm}{sets the width of the minipage, in which the grid is typeset.} + \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage.} + \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}} + \optitem{\envoption{title}}{}{sets the title of a puzzle.} + \optitem{\envoption{titleindent}}{0cm}{defines the indent of the title.} + \optitem{\envoption{titlewidth}}{5.1cm}{specifies the width of the box the title is set in.} + \optitem{\envoption{color}}{green}{specifies the color of the kakuro cells.} + \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.} + \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right} + \optitem{\envoption{cvoffset}}{-23pt}{sets the vertical offset of the counters in the margin.} + \optitem{\envoption{solution}}{false}{You can use the solution also for the puzzle, as the numbers in the cells are only typeset with option \envoption{solution}\texttt{=true}.} +\end{optionlist} + +\subsection{Kendoku} +Fill the cells with the numbers from 1 to SIZE of the puzzle. In the top left corner of a framed area, you will find the result of the specified arithmetic function, which is applied on the entered numbers. The numbers may occur only once in each row and column. The numbers of an area may not necessarily be different when they are in different rows or columns. +\subsubsection{Example} +\begin{center} + \begin{kendoku} + \framearea{black}{\tikzpath{1}{1}{8,8,6,2,6,2,4,4}} + \framearea{black}{\tikzpath{1}{3}{8,6,2,4}} + \framearea{black}{\tikzpath{1}{4}{8,8,6,2,2,4}} + \framearea{black}{\tikzpath{2}{2}{8,8,6,6,2,4,2,4}} + \framearea{black}{\tikzpath{2}{4}{8,8,6,2,2,4}} + \framearea{black}{\tikzpath{3}{1}{8,8,6,2,2,4}} + \framearea{black}{\tikzpath{3}{4}{8,8,6,6,2,4,2,4}} + \framearea{black}{\tikzpath{4}{1}{8,6,6,2,4,4}} + \framearea{black}{\tikzpath{4}{2}{8,6,6,2,4,4}} + \framearea{black}{\tikzpath{4}{3}{8,8,6,2,2,4}} + \framearea{black}{\tikzpath{5}{3}{8,6,2,4}} + \framearea{black}{\tikzpath{5}{4}{8,6,2,4}} + \framearea{black}{\tikzpath{5}{5}{8,6,2,4}} + \setrule{1}{2}{8\times} + \setrule{1}{3}{5} + \setrule{1}{5}{4+} + \setrule{2}{3}{60\times} + \setrule{2}{5}{2\div} + \setrule{3}{2}{2-} + \setrule{3}{5}{75\times} + \setrule{4}{1}{8+} + \setrule{4}{2}{1-} + \setrule{4}{4}{2\times} + \setrule{5}{3}{1} + \setrule{5}{5}{2} + \end{kendoku} + \hspace{1.5cm} + \begin{kendoku} + \framearea{black}{\tikzpath{1}{1}{8,8,6,2,6,2,4,4}} + \framearea{black}{\tikzpath{1}{3}{8,6,2,4}} + \framearea{black}{\tikzpath{1}{4}{8,8,6,2,2,4}} + \framearea{black}{\tikzpath{2}{2}{8,8,6,6,2,4,2,4}} + \framearea{black}{\tikzpath{2}{4}{8,8,6,2,2,4}} + \framearea{black}{\tikzpath{3}{1}{8,8,6,2,2,4}} + \framearea{black}{\tikzpath{3}{4}{8,8,6,6,2,4,2,4}} + \framearea{black}{\tikzpath{4}{1}{8,6,6,2,4,4}} + \framearea{black}{\tikzpath{4}{2}{8,6,6,2,4,4}} + \framearea{black}{\tikzpath{4}{3}{8,8,6,2,2,4}} + \framearea{black}{\tikzpath{5}{3}{8,6,2,4}} + \framearea{black}{\tikzpath{5}{4}{8,6,2,4}} + \framearea{black}{\tikzpath{5}{5}{8,6,2,4}} + \setrule{1}{2}{8\times} + \setrule{1}{3}{5} + \setrule{1}{5}{4+} + \setrule{2}{3}{60\times} + \setrule{2}{5}{2\div} + \setrule{3}{2}{2-} + \setrule{3}{5}{75\times} + \setrule{4}{1}{8+} + \setrule{4}{2}{1-} + \setrule{4}{4}{2\times} + \setrule{5}{3}{1} + \setrule{5}{5}{2} + \setrow{5}{1,4,3,5,2} + \setrow{4}{3,2,5,1,4} + \setrow{3}{5,3,4,2,1} + \setrow{2}{2,5,1,4,3} + \setrow{1}{4,1,2,3,5} + \end{kendoku} +\end{center} + +\begin{lstlisting} +\begin{center} + \begin{kendoku} + \framearea{black}{\tikzpath{1}{1}{8,8,6,2,6,2,4,4}} + \framearea{black}{\tikzpath{1}{3}{8,6,2,4}} + \framearea{black}{\tikzpath{1}{4}{8,8,6,2,2,4}} + \framearea{black}{\tikzpath{2}{2}{8,8,6,6,2,4,2,4}} + \framearea{black}{\tikzpath{2}{4}{8,8,6,2,2,4}} + \framearea{black}{\tikzpath{3}{1}{8,8,6,2,2,4}} + \framearea{black}{\tikzpath{3}{4}{8,8,6,6,2,4,2,4}} + \framearea{black}{\tikzpath{4}{1}{8,6,6,2,4,4}} + \framearea{black}{\tikzpath{4}{2}{8,6,6,2,4,4}} + \framearea{black}{\tikzpath{4}{3}{8,8,6,2,2,4}} + \framearea{black}{\tikzpath{5}{3}{8,6,2,4}} + \framearea{black}{\tikzpath{5}{4}{8,6,2,4}} + \framearea{black}{\tikzpath{5}{5}{8,6,2,4}} + \setrule{1}{2}{8\times} + \setrule{1}{3}{5} + \setrule{1}{5}{4+} + \setrule{2}{3}{60\times} + \setrule{2}{5}{2\div} + \setrule{3}{2}{2-} + \setrule{3}{5}{75\times} + \setrule{4}{1}{8+} + \setrule{4}{2}{1-} + \setrule{4}{4}{2\times} + \setrule{5}{3}{1} + \setrule{5}{5}{2} + \end{kendoku} + \hspace{1.5cm} + \begin{kendoku} + \framearea{black}{\tikzpath{1}{1}{8,8,6,2,6,2,4,4}} + \framearea{black}{\tikzpath{1}{3}{8,6,2,4}} + \framearea{black}{\tikzpath{1}{4}{8,8,6,2,2,4}} + \framearea{black}{\tikzpath{2}{2}{8,8,6,6,2,4,2,4}} + \framearea{black}{\tikzpath{2}{4}{8,8,6,2,2,4}} + \framearea{black}{\tikzpath{3}{1}{8,8,6,2,2,4}} + \framearea{black}{\tikzpath{3}{4}{8,8,6,6,2,4,2,4}} + \framearea{black}{\tikzpath{4}{1}{8,6,6,2,4,4}} + \framearea{black}{\tikzpath{4}{2}{8,6,6,2,4,4}} + \framearea{black}{\tikzpath{4}{3}{8,8,6,2,2,4}} + \framearea{black}{\tikzpath{5}{3}{8,6,2,4}} + \framearea{black}{\tikzpath{5}{4}{8,6,2,4}} + \framearea{black}{\tikzpath{5}{5}{8,6,2,4}} + \setrule{1}{2}{8\times} + \setrule{1}{3}{5} + \setrule{1}{5}{4+} + \setrule{2}{3}{60\times} + \setrule{2}{5}{2\div} + \setrule{3}{2}{2-} + \setrule{3}{5}{75\times} + \setrule{4}{1}{8+} + \setrule{4}{2}{1-} + \setrule{4}{4}{2\times} + \setrule{5}{3}{1} + \setrule{5}{5}{2} + \setrow{5}{1,4,3,5,2} + \setrow{4}{3,2,5,1,4} + \setrow{3}{5,3,4,2,1} + \setrow{2}{2,5,1,4,3} + \setrow{1}{4,1,2,3,5} + \end{kendoku} +\end{center} +\end{lstlisting} + +\subsubsection{Options} +\begin{optionlist} + \optitem{\envoption{rows}}{5}{defines the number of rows in the grid.} + \optitem{\envoption{columns}}{5}{specifies the number of columns in the grid} + \optitem{\envoption{width}}{5.1cm}{sets the width of the minipage, in which the grid is typeset.} + \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage.} + \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}} + \optitem{\envoption{title}}{}{sets the title of a puzzle.} + \optitem{\envoption{titleindent}}{0cm}{defines the indent of the title.} + \optitem{\envoption{titlewidth}}{5.1cm}{specifies the width of the box the title is set in.} + \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.} + \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right} + \optitem{\envoption{cvoffset}}{-23pt}{sets the vertical offset of the counters in the margin.} +\end{optionlist} + +\subsection{Killer Sudoku} +Fill the cells with the numbers from 1 to SIZE of the puzzle. The numbers may occur only once in each row, column and colored area if specified. In the top left corner of a framed area, you will find the sum of the entered numbers. The numbers of an area may not necessarily be different, when they are in different rows or columns. But they must be different, when additional colored areas are specified. +\subsubsection{Example} +\begin{center} + \begin{killersudoku}[columns=4,rows=4,scale=1.11] + \framearea{black}{\tikzpath{1}{1}{8,8,6,6,2,4,2,4}} + \framearea{black}{\tikzpath{1}{3}{8,8,6,2,2,4}} + \framearea{black}{\tikzpath{2}{1}{8,6,6,6,2,4,4,4}} + \framearea{black}{\tikzpath{2}{3}{8,8,6,2,6,2,4,4}} + \framearea{black}{\tikzpath{3}{2}{8,6,8,6,2,2,4,4}} + \framearea{black}{\tikzpath{3}{4}{8,6,6,2,4,4}} + \begin{puzzlebackground} + \colorarea{orange!20}{\tikzpath{1}{1}{8,8,6,6,2,2,4,4}} + \colorarea{orange!20}{\tikzpath{3}{3}{8,8,6,6,2,2,4,4}} + \end{puzzlebackground} + \setrule{1}{2}{7} + \setrule{1}{4}{7} + \setrule{2}{1}{9} + \setrule{2}{4}{6} + \setrule{3}{4}{5} + \setrule{4}{3}{6} + \end{killersudoku} + \hspace{1.5cm} + \begin{killersudoku}[columns=4,rows=4,scale=1.11] + \framearea{black}{\tikzpath{1}{1}{8,8,6,6,2,4,2,4}} + \framearea{black}{\tikzpath{1}{3}{8,8,6,2,2,4}} + \framearea{black}{\tikzpath{2}{1}{8,6,6,6,2,4,4,4}} + \framearea{black}{\tikzpath{2}{3}{8,8,6,2,6,2,4,4}} + \framearea{black}{\tikzpath{3}{2}{8,6,8,6,2,2,4,4}} + \framearea{black}{\tikzpath{3}{4}{8,6,6,2,4,4}} + \begin{puzzlebackground} + \colorarea{orange!20}{\tikzpath{1}{1}{8,8,6,6,2,2,4,4}} + \colorarea{orange!20}{\tikzpath{3}{3}{8,8,6,6,2,2,4,4}} + \end{puzzlebackground} + \setrule{1}{2}{7} + \setrule{1}{4}{7} + \setrule{2}{1}{9} + \setrule{2}{4}{6} + \setrule{3}{4}{5} + \setrule{4}{3}{6} + \setrow{4}{3,2,4,1} + \setrow{3}{4,1,3,2} + \setrow{2}{2,4,1,3} + \setrow{1}{1,3,2,4} + \end{killersudoku} +\end{center} + +\begin{lstlisting} +\begin{killersudoku} + \framearea{black}{\tikzpath{1}{1}{8,8,6,6,2,4,2,4}} + \framearea{black}{\tikzpath{1}{3}{8,8,6,2,2,4}} + \framearea{black}{\tikzpath{2}{1}{8,6,6,6,2,4,4,4}} + \framearea{black}{\tikzpath{2}{3}{8,8,6,2,6,2,4,4}} + \framearea{black}{\tikzpath{3}{2}{8,6,8,6,2,2,4,4}} + \framearea{black}{\tikzpath{3}{4}{8,6,6,2,4,4}} + \begin{puzzlebackground} + \colorarea{orange!20}{\tikzpath{1}{1}{8,8,6,6,2,2,4,4}} + \colorarea{orange!20}{\tikzpath{3}{3}{8,8,6,6,2,2,4,4}} + \end{puzzlebackground} + \setrule{1}{2}{7} + \setrule{1}{4}{7} + \setrule{2}{1}{9} + \setrule{2}{4}{6} + \setrule{3}{4}{5} + \setrule{4}{3}{6} + \end{killersudoku} + \hspace{1.5cm} + \begin{killersudoku} + \framearea{black}{\tikzpath{1}{1}{8,8,6,6,2,4,2,4}} + \framearea{black}{\tikzpath{1}{3}{8,8,6,2,2,4}} + \framearea{black}{\tikzpath{2}{1}{8,6,6,6,2,4,4,4}} + \framearea{black}{\tikzpath{2}{3}{8,8,6,2,6,2,4,4}} + \framearea{black}{\tikzpath{3}{2}{8,6,8,6,2,2,4,4}} + \framearea{black}{\tikzpath{3}{4}{8,6,6,2,4,4}} + \begin{puzzlebackground} + \colorarea{orange!20}{\tikzpath{1}{1}{8,8,6,6,2,2,4,4}} + \colorarea{orange!20}{\tikzpath{3}{3}{8,8,6,6,2,2,4,4}} + \end{puzzlebackground} + \setrule{1}{2}{7} + \setrule{1}{4}{7} + \setrule{2}{1}{9} + \setrule{2}{4}{6} + \setrule{3}{4}{5} + \setrule{4}{3}{6} + \setrow{4}{3,2,4,1} + \setrow{3}{4,1,3,2} + \setrow{2}{2,4,1,3} + \setrow{1}{1,3,2,4} + \end{killersudoku} +\end{lstlisting} + +\subsubsection{Options} +\begin{optionlist} + \optitem{\envoption{rows}}{5}{defines the number of rows in the grid.} + \optitem{\envoption{columns}}{5}{specifies the number of columns in the grid} + \optitem{\envoption{width}}{5.1cm}{sets the width of the minipage, in which the grid is typeset.} + \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage.} + \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}} + \optitem{\envoption{title}}{}{sets the title of a puzzle.} + \optitem{\envoption{titleindent}}{0cm}{defines the indent of the title.} + \optitem{\envoption{titlewidth}}{5.1cm}{specifies the width of the box the title is set in.} + \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.} + \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right} + \optitem{\envoption{cvoffset}}{-23pt}{sets the vertical offset of the counters in the margin.} +\end{optionlist} + +\subsection{Laser Beam} +Draw a laser beam in each grid according to the following guidelines. The beam has to enter or to leave the grid at the arrows. At each intersection, a mirror, on which the laser beam must reflect on one side, can be placed horizontally or vertically. The other side must not be touched by the beam. All locations where the laser crosses are given. The numbers to the left and above the grid indicate how many cells are traversed by the beam in the corresponding row or column. The numbers to the right and below reveal, how many mirrors are found in the intersection of the corresponding row or column. +\subsubsection{Example} +\begin{center} + \begin{laserbeam} + \laserV{1} + \laserH{{}} + \mirrorH{{},2} + \mirrorV{{},{},{},{},{},2} + \framepuzzle[LP@c@mirror] + \placearrow{3}{1}{LeftUp} + \placearrow{6}{4}{RightUp} + \placecross{3}{3} + \end{laserbeam} + \hspace{1.5cm} + \begin{laserbeam} + \laserV{1} + \laserH{{}} + \mirrorH{{},2} + \mirrorV{{},{},{},{},{},2} + \framepuzzle[LP@c@mirror] + \placearrow{3}{1}{LeftUp} + \placearrow{6}{4}{RightUp} + \placecross{3}{3} + \placemirror{2}{2}{V} + \placemirror{4}{2}{H} + \placemirror{5}{5}{V} + \placemirror{3}{5}{H} + \begin{puzzlebackground} + \laser{\tikzpath{3}{1}{7,9,9,9,7,1,7,1,3,3,3,9,9}} + \end{puzzlebackground} + \end{laserbeam} +\end{center} + +\begin{lstlisting} +\begin{center} + \begin{laserbeam} + \laserV{1} + \laserH{{}} + \mirrorH{{},2} + \mirrorV{{},{},{},{},{},2} + \framepuzzle[LP@c@mirror] + \placearrow{3}{1}{LeftUp} + \placearrow{6}{4}{RightUp} + \placecross{3}{3} + \end{laserbeam} + \hspace{1cm} + \begin{laserbeam} + \laserV{1} + \laserH{{}} + \mirrorH{{},2} + \mirrorV{{},{},{},{},{},2} + \framepuzzle[LP@c@mirror] + \placearrow{3}{1}{LeftUp} + \placearrow{6}{4}{RightUp} + \placecross{3}{3} + \placemirror{2}{2}{V} + \placemirror{4}{2}{H} + \placemirror{5}{5}{V} + \placemirror{3}{5}{H} + \begin{puzzlebackground} + \laser{\tikzpath{3}{1}{7,9,9,9,7,1,7,1,3,3,3,9,9}} + \end{puzzlebackground} + \end{laserbeam} +\end{center} +\end{lstlisting} + +\subsubsection{Options} +\begin{optionlist} + \optitem{\envoption{rows}}{5}{defines the number of rows in the grid.} + \optitem{\envoption{columns}}{5}{specifies the number of columns in the grid} + \optitem{\envoption{width}}{6.5cm}{sets the width of the minipage, in which the grid is typeset.} + \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage.} + \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}} + \optitem{\envoption{title}}{}{sets the title of a puzzle.} + \optitem{\envoption{titleindent}}{0cm}{defines the indent of the title.} + \optitem{\envoption{titlewidth}}{6.5cm}{specifies the width of the box the title is set in.} + \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.} + \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right} + \optitem{\envoption{cvoffset}}{-38pt}{sets the vertical offset of the counters in the margin.} +\end{optionlist} + +\subsection{Minesweeper} +Draw a mine in some cells of the grid. The number in a cell indicates how many of the eight neighboring cells contain a mine. A numbered cell does not contain a mine. +\subsubsection{Example} +\begin{center} + \begin{minesweeper} + \framepuzzle + \setrow{5}{{},1} + \setrow{4}{{},{},3,3} + \setrow{3}{3,{},4,2} + \setrow{2}{{},{},{},{},0} + \setrow{1}{{},2} + \end{minesweeper} + \hspace{1.5cm} + \begin{minesweeper} + \framepuzzle + \setrow{5}{{},1,{},\Mine,\Mine} + \setrow{4}{{},\Mine,3,3,\Mine} + \setrow{3}{3,\Mine,4,2} + \setrow{2}{{},\Mine,\Mine,{},0} + \setrow{1}{{},2} + \end{minesweeper} +\end{center} +\begin{lstlisting} +\begin{center} + \begin{minesweeper} + \framepuzzle + \setrow{5}{{},1} + \setrow{4}{{},{},3,3} + \setrow{3}{3,{},4,2} + \setrow{2}{{},{},{},{},0} + \setrow{1}{{},2} + \end{minesweeper} + \hspace{1.5cm} + \begin{minesweeper} + \framepuzzle + \setrow{5}{{},1,{},\Mine,\Mine} + \setrow{4}{{},\Mine,3,3,\Mine} + \setrow{3}{3,\Mine,4,2} + \setrow{2}{{},\Mine,\Mine,{},0} + \setrow{1}{{},2} + \end{minesweeper} +\end{center} +\end{lstlisting} + +\subsubsection{Options} +\begin{optionlist} + \optitem{\envoption{rows}}{5}{defines the number of rows in the grid.} + \optitem{\envoption{columns}}{5}{specifies the number of columns in the grid} + \optitem{\envoption{width}}{5.1cm}{sets the width of the minipage, in which the grid is typeset.} + \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage.} + \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}} + \optitem{\envoption{title}}{}{sets the title of a puzzle.} + \optitem{\envoption{titleindent}}{0cm}{defines the indent of the title.} + \optitem{\envoption{titlewidth}}{5.1cm}{specifies the width of the box the title is set in.} + \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.} + \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right} + \optitem{\envoption{cvoffset}}{-23pt}{sets the vertical offset of the counters in the margin.} +\end{optionlist} + +\subsection{Schatzsuche} +It's a variant of Minesweeper, just with diamonds instead of mines. Draw a diamond in some cells of the grid. The number in a cell indicates how many of the eight neighboring cells contain a diamond. A numbered cell does not contain a diamond. +\subsubsection{Example} +\begin{center} + \begin{schatzsuche} + \framepuzzle + \setrow{5}{{},1} + \setrow{4}{{},{},3,3} + \setrow{3}{3,{},4,2} + \setrow{2}{{},{},{},{},0} + \setrow{1}{{},2} + \end{schatzsuche} + \hspace{1.5cm} + \begin{schatzsuche} + \framepuzzle + \setrow{5}{{},1,{},\Diamond,\Diamond} + \setrow{4}{{},\Diamond,3,3,\Diamond} + \setrow{3}{3,\Diamond,4,2} + \setrow{2}{{},\Diamond,\Diamond,{},0} + \setrow{1}{{},2} + \end{schatzsuche} +\end{center} +\begin{lstlisting} +\begin{center} + \begin{schatzsuche} + \framepuzzle + \setrow{5}{{},1} + \setrow{4}{{},{},3,3} + \setrow{3}{3,{},4,2} + \setrow{2}{{},{},{},{},0} + \setrow{1}{{},2} + \end{schatzsuche} + \hspace{1.5cm} + \begin{schatzsuche} + \framepuzzle + \setrow{5}{{},1,{},\Diamond,\Diamond} + \setrow{4}{{},\Diamond,3,3,\Diamond} + \setrow{3}{3,\Diamond,4,2} + \setrow{2}{{},\Diamond,\Diamond,{},0} + \setrow{1}{{},2} + \end{schatzsuche} +\end{center} +\end{lstlisting} + +\subsubsection{Options} +\begin{optionlist} + \optitem{\envoption{rows}}{5}{defines the number of rows in the grid.} + \optitem{\envoption{columns}}{5}{specifies the number of columns in the grid} + \optitem{\envoption{width}}{5.1cm}{sets the width of the minipage, in which the grid is typeset.} + \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage.} + \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}} + \optitem{\envoption{title}}{}{sets the title of a puzzle.} + \optitem{\envoption{titleindent}}{0cm}{defines the indent of the title.} + \optitem{\envoption{titlewidth}}{5.1cm}{specifies the width of the box the title is set in.} + \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.} + \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right} + \optitem{\envoption{cvoffset}}{-23pt}{sets the vertical offset of the counters in the margin.} +\end{optionlist} + +\subsection{Skyline} +There are skyscrapers located in each cell. Try to find out the height of the skyscraper in the respective cell. There are heights of 1 to MAX in every row, every column, and in each of the two diagonals if indicated. Some cells may be empty (parks). The numbers around the grid indicate how many buildings you can see from this position when you look at the skyscraper lineup. Bear in mind that only those skyscrapers are visible which are higher than the ones in front. +\subsubsection{Example} +\begin{center} + \begin{skyline} + \skylineB{3,{},3,1,{}} + \skylineL{{},4,3,{},{}} + \skylineT{{},{},2,{},3} + \skylineR{{},1,3,{},{}} + \skylinecell{1}{3}{2} + \skylinecell{4}{2}{3} + \end{skyline} + \hspace{1cm} + \begin{skyline} + \skylineB{3,{},3,1,{}} + \skylineL{{},4,3,{},{}} + \skylineT{{},{},2,{},3} + \skylineR{{},1,3,{},{}} + \setrow{5}{5,4,3,1,2} + \setrow{4}{4,5,1,2,3} + \setrow{3}{2,3,5,4,1} + \setrow{2}{1,2,4,3,5} + \setrow{1}{3,1,2,5,4} + \end{skyline} +\end{center} + +\begin{lstlisting} +\begin{center} + \begin{skyline} + \skylineB{3,{},3,1,{}} + \skylineL{{},4,3,{},{}} + \skylineT{{},{},2,{},3} + \skylineR{{},1,3,{},{}} + \skylinecell{1}{3}{2} + \skylinecell{4}{2}{3} + \end{skyline} + \hspace{1cm} + \begin{skyline} + \skylineB{3,{},3,1,{}} + \skylineL{{},4,3,{},{}} + \skylineT{{},{},2,{},3} + \skylineR{{},1,3,{},{}} + \setrow{5}{5,4,3,1,2} + \setrow{4}{4,5,1,2,3} + \setrow{3}{2,3,5,4,1} + \setrow{2}{1,2,4,3,5} + \setrow{1}{3,1,2,5,4} + \end{skyline} +\end{center} +\end{lstlisting} + +\paragraph{Variants} +\subparagraph{Skyline Sudoku} +\begin{center} + \begin{skyline}[sudoku,scale=.4] + \skylineB{4,5,2,5,2,1,2,4,3} + \skylineL{4,2,2,2,1,3,3,3,2} + \skylineT{4,1,3,2,3,5,3,2,3} + \skylineR{3,3,1,3,4,2,3,2,4} + \setrow{9}{{},{},{},8,{},{},{},7} + \setrow{8}{{},{},4,{},{},6,{},{},8} + \setrow{7}{{},2,{},7,{},{},{},{},1} + \setrow{6}{{},{},{},{},8,2} + \setrow{5}{{},{},2,{},4,{},7} + \setrow{4}{{},{},{},3,{},{},4} + \setrow{3}{{},{},{},{},1} + \setrow{2}{{},3,{},{},{},{},1,2} + \setrow{1}{{},{},5} + \end{skyline} + \hspace{1cm} + \begin{skyline}[sudoku,scale=.4] + \skylineB{4,5,2,5,2,1,2,4,3} + \skylineL{4,2,2,2,1,3,3,3,2} + \skylineT{4,1,3,2,3,5,3,2,3} + \skylineR{3,3,1,3,4,2,3,2,4} + \setrow{9}{3,9,6,8,5,1,2,7,4} + \setrow{8}{1,7,4,9,2,6,3,5,8} + \setrow{7}{5,2,8,7,3,4,9,6,1} + \setrow{6}{7,4,3,1,8,2,6,9,5} + \setrow{5}{9,8,2,6,4,5,7,1,3} + \setrow{4}{6,5,1,3,9,7,4,8,2} + \setrow{3}{8,6,7,2,1,3,5,4,9} + \setrow{2}{4,3,9,5,6,8,1,2,7} + \setrow{1}{2,1,5,4,7,9,8,3,6} + \end{skyline} +\end{center} + +\begin{lstlisting} +\begin{center} + \begin{skyline}[sudoku,scale=.4] + \skylineB{4,5,2,5,2,1,2,4,3} + \skylineL{4,2,2,2,1,3,3,3,2} + \skylineT{4,1,3,2,3,5,3,2,3} + \skylineR{3,3,1,3,4,2,3,2,4} + \setrow{9}{{},{},{},8,{},{},{},7} + \setrow{8}{{},{},4,{},{},6,{},{},8} + \setrow{7}{{},2,{},7,{},{},{},{},1} + \setrow{6}{{},{},{},{},8,2} + \setrow{5}{{},{},2,{},4,{},7} + \setrow{4}{{},{},{},3,{},{},4} + \setrow{3}{{},{},{},{},1} + \setrow{2}{{},3,{},{},{},{},1,2} + \setrow{1}{{},{},5} + \end{skyline} + \hspace{1cm} + \begin{skyline}[sudoku,scale=.4] + \skylineB{4,5,2,5,2,1,2,4,3} + \skylineL{4,2,2,2,1,3,3,3,2} + \skylineT{4,1,3,2,3,5,3,2,3} + \skylineR{3,3,1,3,4,2,3,2,4} + \setrow{9}{3,9,6,8,5,1,2,7,4} + \setrow{8}{1,7,4,9,2,6,3,5,8} + \setrow{7}{5,2,8,7,3,4,9,6,1} + \setrow{6}{7,4,3,1,8,2,6,9,5} + \setrow{5}{9,8,2,6,4,5,7,1,3} + \setrow{4}{6,5,1,3,9,7,4,8,2} + \setrow{3}{8,6,7,2,1,3,5,4,9} + \setrow{2}{4,3,9,5,6,8,1,2,7} + \setrow{1}{2,1,5,4,7,9,8,3,6} + \end{skyline} +\end{center} +\end{lstlisting} + +\subparagraph{Skyline Sudoku (N*N)} +\begin{center} + \begin{skyline}[rows=6,columns=6,scale=.58] + \skylineB{4,2,1,3,3,2} + \skylineL{3,3,4,3,2,1} + \skylineT{1,2,3,3,2,4} + \skylineR{4,1,2,2,2,3} + \skylinecell{2}{4}{1} + \skylinecell{4}{1}{4} + \skylinecell{5}{2}{3} + \begin{puzzlebackground} + \fillarea{Wheat}{(1,1)--(1,3)--(4,3)--(4,1)--(1,1)} + \fillarea{HotPink!30}{(1,3)--(1,7)--(4,7)--(4,6)--(2,6) + --(2,3)--(1,3)} + \fillarea{GreenYellow}{(2,3)--(2,6)--(4,6)--(4,3)--(2,3)} + \fillarea{LightBlue}{(4,1)--(7,1)--(7,5)--(6,5)--(6,2) + --(4,2)--(4,1)} + \fillarea{LightSalmon!50}{(4,7)--(4,4)--(5,4)--(5,6)--(6,6) + --(6,5)--(7,5)--(7,7)--(4,7)} + \fillarea{LightYellow}{(4,2)--(4,4)--(5,4)--(5,6)--(6,6) + --(6,2)--(4,2)} + \end{puzzlebackground} + \end{skyline} + \hspace{1cm} + \begin{skyline}[rows=6,columns=6,scale=.58] + \skylineB{4,2,1,3,3,2} + \skylineL{3,3,4,3,2,1} + \skylineT{1,2,3,3,2,4} + \skylineR{4,1,2,2,2,3} + \setrow{6}{6,3,4,1,5,2} + \setrow{5}{5,6,2,3,1,4} + \setrow{4}{2,1,3,6,4,5} + \setrow{3}{1,4,5,2,6,3} + \setrow{2}{4,2,1,5,3,6} + \setrow{1}{3,5,6,4,2,1} + \begin{puzzlebackground} + \fillarea{Wheat}{(1,1)--(1,3)--(4,3)--(4,1)--(1,1)} + \fillarea{HotPink!30}{(1,3)--(1,7)--(4,7)--(4,6)--(2,6) + --(2,3)--(1,3)} + \fillarea{GreenYellow}{(2,3)--(2,6)--(4,6)--(4,3)--(2,3)} + \fillarea{LightBlue}{(4,1)--(7,1)--(7,5)--(6,5)--(6,2) + --(4,2)--(4,1)} + \fillarea{LightSalmon!50}{(4,7)--(4,4)--(5,4)--(5,6)--(6,6) + --(6,5)--(7,5)--(7,7)--(4,7)} + \fillarea{LightYellow}{(4,2)--(4,4)--(5,4)--(5,6)--(6,6) + --(6,2)--(4,2)} + \end{puzzlebackground} + \end{skyline} +\end{center} + +\begin{lstlisting} +\begin{center} + \begin{skyline}[rows=6,columns=6,scale=.58] + \skylineB{4,2,1,3,3,2} + \skylineL{3,3,4,3,2,1} + \skylineT{1,2,3,3,2,4} + \skylineR{4,1,2,2,2,3} + \skylinecell{2}{4}{1} + \skylinecell{4}{1}{4} + \skylinecell{5}{2}{3} + \begin{puzzlebackground} + \fillarea{Wheat}{(1,1)--(1,3)--(4,3)--(4,1)--(1,1)} + \fillarea{HotPink!30}{(1,3)--(1,7)--(4,7)--(4,6)--(2,6) + --(2,3)--(1,3)} + \fillarea{GreenYellow}{(2,3)--(2,6)--(4,6)--(4,3)--(2,3)} + \fillarea{LightBlue}{(4,1)--(7,1)--(7,5)--(6,5)--(6,2) + --(4,2)--(4,1)} + \fillarea{LightSalmon!50}{(4,7)--(4,4)--(5,4)--(5,6)--(6,6) + --(6,5)--(7,5)--(7,7)--(4,7)} + \fillarea{LightYellow}{(4,2)--(4,4)--(5,4)--(5,6)--(6,6) + --(6,2)--(4,2)} + \end{puzzlebackground} + \end{skyline} + \hspace{1cm} + \begin{skyline}[rows=6,columns=6,scale=.58] + \skylineB{4,2,1,3,3,2} + \skylineL{3,3,4,3,2,1} + \skylineT{1,2,3,3,2,4} + \skylineR{4,1,2,2,2,3} + \setrow{6}{6,3,4,1,5,2} + \setrow{5}{5,6,2,3,1,4} + \setrow{4}{2,1,3,6,4,5} + \setrow{3}{1,4,5,2,6,3} + \setrow{2}{4,2,1,5,3,6} + \setrow{1}{3,5,6,4,2,1} + \begin{puzzlebackground} + \fillarea{Wheat}{(1,1)--(1,3)--(4,3)--(4,1)--(1,1)} + \fillarea{HotPink!30}{(1,3)--(1,7)--(4,7)--(4,6)--(2,6) + --(2,3)--(1,3)} + \fillarea{GreenYellow}{(2,3)--(2,6)--(4,6)--(4,3)--(2,3)} + \fillarea{LightBlue}{(4,1)--(7,1)--(7,5)--(6,5)--(6,2) + --(4,2)--(4,1)} + \fillarea{LightSalmon!50}{(4,7)--(4,4)--(5,4)--(5,6)--(6,6) + --(6,5)--(7,5)--(7,7)--(4,7)} + \fillarea{LightYellow}{(4,2)--(4,4)--(5,4)--(5,6)--(6,6) + --(6,2)--(4,2)} + \end{puzzlebackground} + \end{skyline} +\end{center} +\end{lstlisting} + +\subsubsection{Options} +\begin{optionlist} + \optitem{\envoption{rows}}{5}{defines the number of rows in the grid.} + \optitem{\envoption{columns}}{5}{specifies the number of columns in the grid} + \optitem{\envoption{sudoku}}{false}{sets \envoption{rows} and \envoption{columns} to 9, in case of \LANGLE\textit{true}\RANGLE\ is specified. Additionally the classic Sudoku grid is drawn.} + \optitem{\envoption{width}}{6.7cm}{sets the width of the minipage, in which the grid is typeset.} + \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage.} + \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}} + \optitem{\envoption{title}}{}{sets the title of a puzzle.} + \optitem{\envoption{titleindent}}{0.75cm}{defines the indent of the title.} + \optitem{\envoption{titlewidth}}{5.85cm}{specifies the width of the box the title is set in.} + \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.} + \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right} + \optitem{\envoption{cvoffset}}{-38pt}{sets the vertical offset of the counters in the margin.} +\end{optionlist} + +\subsection{Slitherlink} +Draw a closed line into the grid. This line must be on the existing dashed lines, but do not have to go through all grid points. If numbers are present in the grid cells, they indicate how many sides of the cell are touched by the line. The line must not touch or cross itself. +\subsubsection{Example} +\begin{center} + \begin{slitherlink} + \setbigcell{1}{1}{4} + \slitherlinkcell{1}{3}{3} + \slitherlinkcell{3}{1}{3} + \slitherlinkcell{3}{3}{0} + \slitherlinkcell{3}{4}{3} + \slitherlinkcell{4}{4}{2} + \slitherlinkcell{5}{1}{0} + \slitherlinkcell{5}{2}{2} + \end{slitherlink} + \hspace{1.5cm} + \begin{slitherlink} + \setbigcell{1}{1}{4} + \slitherlinkcell{1}{3}{3} + \slitherlinkcell{3}{1}{3} + \slitherlinkcell{3}{3}{0} + \slitherlinkcell{3}{4}{3} + \slitherlinkcell{4}{4}{2} + \slitherlinkcell{5}{1}{0} + \slitherlinkcell{5}{2}{2} + \framearea{black}{\tikzpath{3}{1}{8,8,4,4,8,6,6,8,6,2,6,6,2,4,2,4,2,4}} + \end{slitherlink} +\end{center} + +\begin{lstlisting} +\begin{center} + \begin{slitherlink} + \setbigcell{1}{1}{4} + \slitherlinkcell{1}{3}{3} + \slitherlinkcell{3}{1}{3} + \slitherlinkcell{3}{3}{0} + \slitherlinkcell{3}{4}{3} + \slitherlinkcell{4}{4}{2} + \slitherlinkcell{5}{1}{0} + \slitherlinkcell{5}{2}{2} + \end{slitherlink} + \hspace{1.5cm} + \begin{slitherlink} + \setbigcell{1}{1}{4} + \slitherlinkcell{1}{3}{3} + \slitherlinkcell{3}{1}{3} + \slitherlinkcell{3}{3}{0} + \slitherlinkcell{3}{4}{3} + \slitherlinkcell{4}{4}{2} + \slitherlinkcell{5}{1}{0} + \slitherlinkcell{5}{2}{2} + \framearea{black}{\tikzpath{3}{1}{8,8,4,4,8,6,6,8,6,2, + 6,6,2,4,2,4,2,4}} + \end{slitherlink} +\end{center} +\end{lstlisting} + +\subsubsection{Options} +\begin{optionlist} + \optitem{\envoption{rows}}{5}{defines the number of rows in the grid.} + \optitem{\envoption{columns}}{5}{specifies the number of columns in the grid} + \optitem{\envoption{width}}{5.2cm}{sets the width of the minipage, in which the grid is typeset.} + \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage.} + \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}} + \optitem{\envoption{title}}{}{sets the title of a puzzle.} + \optitem{\envoption{titleindent}}{0cm}{defines the indent of the title.} + \optitem{\envoption{titlewidth}}{5.2cm}{specifies the width of the box the title is set in.} + \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.} + \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right} + \optitem{\envoption{cvoffset}}{-23pt}{sets the vertical offset of the counters in the margin.} +\end{optionlist} + +\subsection{Sudoku} +Well, it's Sudoku -- nothing to explain! Fill each row and column with numbers from 1 to 9. +\subsubsection{Example} +\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} + +\begin{lstlisting} +\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{lstlisting} + +\subsubsection{Options} +\begin{optionlist} + \optitem{\envoption{width}}{9.1cm}{sets the width of the minipage, in which the grid is typeset. 9 cells of width 1cm plus a litle extra for lines.} + \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage. To get a width of 5cm you need to scale by $\nicefrac{5}{9}$} + \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}} + \optitem{\envoption{title}}{}{sets the title of a puzzle.} + \optitem{\envoption{titleindent}}{0cm}{defines the indent of the title.} + \optitem{\envoption{titlewidth}}{9.1cm}{specifies the width of the box the title is set in.} + \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.} + \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right} + \optitem{\envoption{cvoffset}}{-23pt}{sets the vertical offset of the counters in the margin.} +\end{optionlist} + +\subsubsection{Supporting \texttt{bash} scripts} +\paragraph{createlpsudoku} +The \texttt{createlpsudoku} \cite{bib:wiki:createlpsudoku} \texttt{bash} script can transform Sudoku format files into \env{lpsudoku} environments. It can process files in the so called one line 81 format\footnote{processing of several sudokus in 81 format (one in each line) is possible} (option -e (default)) and in simple sudoku format (option -s) + +\medskip +Usage: \texttt{createlpsudoku [options] [-o output] -i input} + +\medskip +It expects an input file with the option \texttt{-i}. You can specify an output file with the option \texttt{-o}. Otherwise it writes to \texttt{stdout}. Furthermore, the following options are possible: + +\medskip +\begin{tabular}{ll} +-w & write Windows line endings (CR/LF) to file \\ +-v & prints version number \\ +-h & prints help \\ +\end{tabular} + +\paragraph{lpsmag} + +With the \texttt{lpsmag} \cite{bib:wiki:lpsmag} \texttt{bash} script you can half automatically produce a Sudoku magazine using the \LaTeX\ package \package{lpsudoku.sty} and the \texttt{createlpsudoku} bash script. + +\medskip +Usage: \texttt{lpsmag configfile} + +\medskip +The script needs an installed \href{http://ostermiller.org/qqwing/}{QQwing} \cite{bib:web:qqwing} and a config file for defining the magazine's contents: + +\begin{lstlisting} +page p1 easy +page p2 easy +startpuzzles +typesetpage p1 +typesetpage p2 +startsolutions +typesetsolpage p1 p2 last +\end{lstlisting} + +This config file will be sourced into the \texttt{lpsmag bash} script and contains calls of \texttt{lpsmag} functions. Make sure, that the config file has UNIX line endings (LF). For a detailed documentation I refer to the following \href{http://logicpuzzle.square7.de/lpsmag}{wiki} \cite{bib:wiki:lpsmag} entry. + +After running \texttt{lpsmag} you will find a \texttt{lpsmag.tex} in your working directory. Just run \texttt{pdflatex lpsmag.tex} twice and you finally get for example this \href{https://bitbucket.org/kleberj/logicpuzzle/downloads/lpsmag.pdf}{\texttt{lpsmag.pdf}}. + +\subsection{Tents and Trees} +Draw tents in the grid. Next to each tree, a tent must be entered in a horizontally or vertically adjacent cell, which is associated with this tree. The numbers next to the grid indicate the quantity of tents in each row or column. No tent can stand directly next to another one, not even diagonally. +\subsubsection{Example} +\begin{center} + \begin{tentsandtrees} + \framepuzzle + \tentH{1,2,1,1,2} + \tentV{2,0,2,0,3} + \setrow{4}{\Tree,{},\Tree,\Tree,\Tree} + \setrow{2}{{},\Tree} + \setrow{1}{\Tree,{},{},\Tree} + \end{tentsandtrees} + \hspace{1.5cm} + \begin{tentsandtrees} + \framepuzzle + \tentH{1,2,1,1,2} + \tentV{2,0,2,0,3} + \setrow{5}{\Tent,{},\Tent,{},\Tent,} + \setrow{4}{\Tree,{},\Tree,\Tree,\Tree} + \setrow{3}{{},\Tent,{},\Tent} + \setrow{2}{{},\Tree} + \setrow{1}{\Tree,\Tent,{},\Tree,\Tent} + \end{tentsandtrees} +\end{center} +\begin{lstlisting} +\begin{center} + \begin{tentsandtrees} + \framepuzzle + \tentH{1,2,1,1,2} + \tentV{2,0,2,0,3} + \setrow{4}{\Tree,{},\Tree,\Tree,\Tree} + \setrow{2}{{},\Tree} + \setrow{1}{\Tree,{},{},\Tree} + \end{tentsandtrees} + \hspace{1.5cm} + \begin{tentsandtrees} + \framepuzzle + \tentH{1,2,1,1,2} + \tentV{2,0,2,0,3} + \setrow{5}{\Tent,{},\Tent,{},\Tent,} + \setrow{4}{\Tree,{},\Tree,\Tree,\Tree} + \setrow{3}{{},\Tent,{},\Tent} + \setrow{2}{{},\Tree} + \setrow{1}{\Tree,\Tent,{},\Tree,\Tent} + \end{tentsandtrees} +\end{center} +\end{lstlisting} + +\subsubsection{Options} +\begin{optionlist} + \optitem{\envoption{rows}}{5}{defines the number of rows in the grid.} + \optitem{\envoption{columns}}{5}{specifies the number of columns in the grid} + \optitem{\envoption{width}}{5.9cm}{sets the width of the minipage, in which the grid is typeset.} + \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage.} + \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}} + \optitem{\envoption{title}}{}{sets the title of a puzzle.} + \optitem{\envoption{titleindent}}{0cm}{defines the indent of the title.} + \optitem{\envoption{titlewidth}}{5.9cm}{specifies the width of the box the title is set in.} + \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.} + \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right} + \optitem{\envoption{cvoffset}}{-23pt}{sets the vertical offset of the counters in the margin.} +\end{optionlist} + +\subsection{Tunnel} +Determine the course of the tube. Draw the only possible connection. from the beginning to the end. The numbers indicate how many tube segments (including portals) are present in the corresponding rows and columns. The tube is one cell wide, and does not cross or touch itself! +\subsubsection{Example} +\begin{center} + \begin{tunnel} + \framepuzzle + \tunnelH{4,3,3,3,4} + \tunnelV{5,1,5,1,5} + \portal{1}{1} + \portal{5}{5} + \end{tunnel} + \hspace{1.5cm} + \begin{tunnel} + \framepuzzle + \tunnelH{4,3,3,3,4} + \tunnelV{5,1,5,1,5} + \portal{1}{1} + \portal{5}{5} + \tube{\tikzpath{1}{1}{6,6,6,6,8,8,4,4,4,4,8,8,6,6,6,6}} + \end{tunnel} +\end{center} + +\begin{lstlisting} +\begin{center} + \begin{tunnel} + \framepuzzle + \tunnelH{4,3,3,3,4} + \tunnelV{5,1,5,1,5} + \portal{1}{1} + \portal{5}{5} + \end{tunnel} + \hspace{1.5cm} + \begin{tunnel} + \framepuzzle + \tunnelH{4,3,3,3,4} + \tunnelV{5,1,5,1,5} + \portal{1}{1} + \portal{5}{5} + \tube{\tikzpath{1}{1}{6,6,6,6,8,8,4,4,4,4,8,8,6,6,6,6}} + \end{tunnel} +\end{center} +\end{lstlisting} + +\subsubsection{Options} +\begin{optionlist} + \optitem{\envoption{rows}}{5}{defines the number of rows in the grid.} + \optitem{\envoption{columns}}{5}{specifies the number of columns in the grid} + \optitem{\envoption{width}}{5.9cm}{sets the width of the minipage, in which the grid is typeset.} + \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage.} + \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}} + \optitem{\envoption{title}}{}{sets the title of a puzzle.} + \optitem{\envoption{titleindent}}{0cm}{defines the indent of the title.} + \optitem{\envoption{titlewidth}}{5.9cm}{specifies the width of the box the title is set in.} + \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.} + \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right} + \optitem{\envoption{cvoffset}}{-23pt}{sets the vertical offset of the counters in the margin.} +\end{optionlist} + +\clearpage +\section{Roll out your own grid-based logic puzzle} +\label{sec:rollout} +As an example we take a look at the former \package{bokkusu.sty} package. First, we ignore the LPPL license stuff. + +\lstset{numbers=none,basicstyle=\ttfamily\footnotesize}% +\begin{lstlisting} +\ProvidesPackage{bokkusu}[2013/03/25 bokkusu.sty v1.2 - Josef Kleber (C) 2013]% +\RequirePackage{logicpuzzle}% +\end{lstlisting} + +We wrote a package \package{bokkusu.sty} with version number v1.2 and date 2013/03/25 and added a copyright remark. We need to load the code base package \package{logicpuzzle.sty}. + +\begin{lstlisting} +\newcommand*\LP@BK@init@prefix{LP@BK}% +\newcommand*\LP@BK@init@package{bokkusu}% +\LP@define@key{\LP@BK@init@prefix}{\LP@BK@init@package}{rows}{5}% +\LP@define@key{\LP@BK@init@prefix}{\LP@BK@init@package}{columns}{5}% +\LP@define@key{\LP@BK@init@prefix}{\LP@BK@init@package}{scale}{1}% +\LP@define@key{\LP@BK@init@prefix}{\LP@BK@init@package}{counterstyle}{none}% +\LP@define@key{\LP@BK@init@prefix}{\LP@BK@init@package}{color}{black}% +\LP@define@key{\LP@BK@init@prefix}{\LP@BK@init@package}{bgcolor}{}% +\LP@define@key{\LP@BK@init@prefix}{\LP@BK@init@package}{width}{6.7cm}% +\LP@define@key{\LP@BK@init@prefix}{\LP@BK@init@package}{cvoffset}{-38pt}% +\LP@define@key{\LP@BK@init@prefix}{\LP@BK@init@package}{title}{}% +\LP@define@key{\LP@BK@init@prefix}{\LP@BK@init@package}{titleindent}{0.75cm}% +\LP@define@key{\LP@BK@init@prefix}{\LP@BK@init@package}{titlewidth}{5.85cm}% +\LP@define@choicekey@fontsize{\LP@BK@init@prefix}{\LP@BK@init@package}{Large}% +\ExecuteOptionsX{rows,columns,width,fontsize,scale,color,bgcolor,cvoffset, + counterstyle,title,titleindent,titlewidth}% +\ProcessOptionsX\relax% +\end{lstlisting} + +We save the package prefix and name in a macro for easy change. Then we define the options for package \package{bokkusu.sty} and the environment \env{bokkusu}, which are executed afterwards to create the macros for the option values. + +\begin{lstlisting} +\let\valueH\LP@bottomrow% +\let\valueV\LP@leftcolumn% +\let\sumH\LP@toprow% +\let\sumV\LP@rightcolumn% +\end{lstlisting} + +We need numbers around the grid. Therefore, we define some aliases for the existing generic commands. + +\begin{lstlisting} +\newcommand*\bokkususetup[1]% +{% + \setkeys{bokkusu.sty}{#1}% +}% +\end{lstlisting} + +We define \cmd\bokkususetup\ for resetting the global package options. + +\clearpage +Finally, we define the \env{bokkusu} environment. + +\begin{lstlisting} +\newenvironment{bokkusu}[1][]% +{% + \setkeys{bokkusu}{#1}% + \LP@set@package{bokkusu}% + \LP@set@env@prefix{LP@BK}% + \setcounter{LP@rows}{\LP@BK@rows}% + \setcounter{LP@columns}{\LP@BK@columns}% + \stepcounter{LP@rows}% + \stepcounter{LP@columns}% +\end{lstlisting} + +We locally set the environment options and the prefix and name of the current puzzle environment. We need to reset the counters for \envoption{rows} and \envoption{columns}, as they might have been altered. + +\begin{lstlisting} + \begin{minipage}[t]{\LP@BK@width}% + \ifthenelse{\equal{\LP@BK@title}{}}% + {\par\enspace\par}% empty + {\enspace\par\noindent\hspace{\LP@BK@titleindent}\parbox{\LP@BK@titlewidth} + {\strut\LP@titleformat\LP@BK@title}\vspace{3mm}\par}% + \begin{tikzpicture}[scale=\LP@BK@scale]% + \LP@drawbackground{1}{1}{\LP@BK@columns}{\LP@BK@rows}{\LP@BK@bgcolor}% + \LP@drawgrid{1}{1}{\LP@BK@columns}{\LP@BK@rows}{1cm}% +}% +\end{lstlisting} + +We start a minipage with width \marg{width}. If the user defined a title, we typeset the title and add a vertical space. Then, we draw the puzzle with the help of \package{tikz.sty}. We start drawing the background and the grid. + +\begin{lstlisting} +{% + \end{tikzpicture}% + \LP@drawcounter{\LP@BK@counterstyle}% + \stepcounter{LP@puzzlecounter}% + \end{minipage}% +}% +\end{lstlisting} + +Finally, we just end the picture for the puzzle. We draw and step the counter. As last action, we need to close the \env{minipage} environment. That's it. Easy, isn't it? You just need to copy this skelton and change or add some code for your specific puzzle. + +\section{The code} +\label{sec:code} +\lstset{basicstyle=\ttfamily\normalsize}% + +\subsection{PGF layers} +\label{sec:layer} +The \package{logicpuzzle.sty} package defines the PGF layers: \layer{LPdump}, \layer{LPbgcolor}, \layer{LPbackgroundtwo}, \layer{LPbackground}, \layer{LPforeground} and \layer{LPforegroundtwo} + +Without specifying a special layer, the standard \layer{main} layer is used. The \texttt{LPback\-ground} and \layer{LPforeground} layers can be accessed with the \env{puzzlebackground} [see: \ref{sec:puzzlebackground}] and \env{puzzleforeground} [see: \ref{sec:puzzleforeground}] environments. +The \layer{LPbgcolor} is and should only be used for the background color of the grid. + +All layers can also be accessed with the generic PGF method: + +\begin{lstlisting} +\begin{pgfonlayer}{layer} + ... +\end{pgfonlayer} +\end{lstlisting} + +\begin{tabularx}{\textwidth}{lX} +Order: & \layer{LPdump} $\rightarrow$ \layer{LPbgcolor} $\rightarrow$ \layer{LPbackgroundtwo} $\rightarrow$ \layer{LPbackground} $\rightarrow$ \layer{main} $\rightarrow$ \layer{LPforeground} $\rightarrow$ \layer{LPforegroundtwo} \\ +\end{tabularx} + +So, if you are in the need to place something behind \layer{LPbackground} or in front of \layer{LPforeground}, you can use the \layer{LPbackgroundtwo} and \layer{LPforegroundtwo} layers. You can hide elements like help nodes behind the background color on the \layer{LPdump} layer. + +\subsection{Environments} +\label{sec:env} +\subsubsection{\texttt{Puzzle environments}} +\paragraph{\texttt{logicpuzzle}} +The \env{logicpuzzle} environment\marginnote{\hbadness=10000\RaggedLeft\scriptsize\envb{logicpuzzle}\oarg{options}\\\dots\\\enve{logicpuzzle}} is the generic environment for typesetting logic puzzles. With the optional argument of the environment, you can reset the options with local scope. Here, a blank grid is created. +Furthermore, there are the puzzle environments described in section \ref{sec:supppuzzle}. They have their own set of options, that is also different option values and defaults! These can be changed with the \texttt{\textbackslash puzzlesetup} commands with global scope or in the optional argument of the environment with local scope. + +\subparagraph{Options} +\begin{optionlist} + \optitem{\envoption{rows}}{5}{defines the number of rows in the grid.} + \optitem{\envoption{columns}}{5}{specifies the number of columns in the grid} + \optitem{\envoption{width}}{5.1cm}{sets the width of the minipage, in which the grid is typeset.} + \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage.} + \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}} + \optitem{\envoption{title}}{}{sets the title of a puzzle.} + \optitem{\envoption{titleindent}}{0cm}{defines the indent of the title.} + \optitem{\envoption{titlewidth}}{5.1cm}{specifies the width of the box the title is set in.} + \optitem{\envoption{color}}{}{specifies the color for coloring the cells.} + \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.} + \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right} + \optitem{\envoption{cvoffset}}{-23pt}{sets the vertical offset of the counters in the margin.} +\end{optionlist} +\subsubsection{\texttt{Supporting environments}} +\paragraph{\texttt{puzzlebackground}} +\label{sec:puzzlebackground} +The \env{puzzlebackground} environment\marginnote{\hbadness=10000\RaggedLeft\scriptsize\envb{puzzlebackground}\\\dots\\\enve{puzzlebackground}} allows you to place elements behind the \layer{main} layer on the \layer{LPbackground} layer [see: \ref{sec:layer}]. This is for example usefull for the \cmd\fillarea\ [see: \ref{sec:fillarea}] command. +\paragraph{\texttt{puzzleforeground}} +\label{sec:puzzleforeground} +The \env{puzzleforeground} environment\marginnote{\hbadness=10000\RaggedLeft\scriptsize\envb{puzzleforeground}\\\dots\\\enve{puzzleforeground}} allows you to place elements in front of the \layer{main} layer on the \layer{LPforeground} layer [see: \ref{sec:layer}]. This is for example usefull for the \cmd\framearea\ [see: \ref{sec:framearea}] command. + +\subsection{Commands} +\label{sec:commands} +\subsubsection{Puzzle specific commands} +\label{sec:pscommands} +\paragraph{2D-Sudoku} +\label{sec:pscddsudoku} +\subparagraph{\texttt{ddsudokucell}} +\label{sec:pscddsudokucell} +The command \cs{ddsudokucell}\margcs{\cmd\ddsudokucell\{\marg{column}\}\{\marg{row}\}\\\{\marg{number}\}} sets the \marg{number} of the grid cell \marg{column}\marg{row}. +\subparagraph{\texttt{ddsudokusetup}} +With the command \cs{ddsudokusetup}\margcs{\cmd\ddsudokusetup\{\marg{options}\}} you can reset the options with global scope. +\paragraph{Battleship} +\label{sec:pscbattleship} +\subparagraph{\texttt{placeship}} +With the command \cs{placeship}\margcs{\cmd\placeship\{\marg{direction}\}\\\{\marg{column}\}\{\marg{row}\}\{\marg{length}\}} you can place complete ships in the grid. It expects the specification of the direction as horizontal (H) or vertical (V). Furthermore, it requires the starting coordinates and the length of the ship. +\subparagraph{\texttt{placesegment}} +The command \cs{placesegment}\margcs{\cmd\placesegment\{\marg{column}\}\{\marg{row}\}\\\{\marg{ship segment}\}} is used for the placement of ship segments in the grid. In the mandatory argument \marg{ship segment}, you can use the following commands: + +\begin{center} +\begin{tabular}{lccl} +\cs{Ship} & \scalebox{.5}{\Ship} & \scalebox{.5}{\ShipC} & \cs{ShipC} \\ +\cs{ShipL} & \scalebox{.5}{\ShipL} & \scalebox{.5}{\ShipR} & \cs{ShipR} \\ +\cs{ShipB} & \scalebox{.5}{\ShipB} & \scalebox{.5}{\ShipT} & \cs{ShipT} \\ +\end{tabular} +\end{center} +\subparagraph{\texttt{ship}} +The command \cs{ship} was replaced by the \cs{placesegment} command. The command \cs{ship} is deprecated and should not be used longer. It may still be used, but it is not recommended. +\subparagraph{\texttt{placewater}} +With the command \cs{placewater}\margcs{\cmd\placewater\{\marg{column}\}\{\marg{row}\}} you can place water markers \mbox{( \raisebox{2pt}{\Water} )} in the grid. +\subparagraph{\texttt{placeisland}} +With the command \cs{placeisland}\margcs{\cmd\placeisland\{\marg{column}\}\{\marg{row}\}} you can place islands ( \raisebox{-2pt}{\resizebox{!}{10pt}{\Island}} ) in the grid. The island outlines are created randomly: \raisebox{-2pt}{\resizebox{!}{10pt}{\Island}}, \raisebox{-2pt}{\resizebox{!}{10pt}{\Island}}, \raisebox{-2pt}{\resizebox{!}{10pt}{\Island}}, ... +\subparagraph{\texttt{shipH}} +The command \cs{shipH}\margcs{\cmd\shipH\{\marg{csv list}\}} typesets the horizontal numbers above the grid. It expects a comma-separated list as an argument. +\subparagraph{\texttt{shipV}} +The command \cs{shipV}\margcs{\cmd\shipV\{\marg{csv list}\}} typesets the vertical numbers beside the grid. It also expects a comma separated list. +\subparagraph{\texttt{shipbox}} +The command \cs{shipbox}\margcs{\cmd\shipbox\{\marg{csv list}\}} defines the number and size of the ships, which are typeset under the grid. +\subparagraph{\texttt{battleshipsetup}} +With the command \cs{battleshipsetup}\margcs{\cmd\battleshipsetup\{\marg{options}\}} you can reset the options with global scope. +\subparagraph{\texttt{classicgame}} +The command \cs{classicgame}\margcs{\cmd\classicgame\{\marg{csv list}\}} typesets a game sheet for playing classic Battleship. It expects a comma separated list with the number and sizes of the ships. +\paragraph{Bokkusu} +\label{sec:pscbokkusu} +\subparagraph{\texttt{valueH}} +The command \cs{valueH}\margcs{\cmd\valueH\{\marg{csv list}\}} typesets the numbers left to the grid indicating the values of the cells. It expects a comma-separated list as an argument. +\subparagraph{\texttt{valueV}} +The command \cs{valueV}\margcs{\cmd\valueV\{\marg{csv list}\}} typesets the numbers below the grid specifying the values of the cells. It also expects a comma separated list. +\subparagraph{\texttt{sumH}} +The command \cs{sumH}\margcs{\cmd\sumH\{\marg{csv list}\}} typesets the numbers right to the grid indicating the sums of the values of the colored cells. It expects a comma-separated list. +\subparagraph{\texttt{sumV}} +The command \cs{sumV}\margcs{\cmd\sumV\{\marg{csv list}\}} typesets the numbers above the grid specifying the sums of the values of the colored cells. It expects a comma separated list. +\subparagraph{\texttt{bokkususetup}} +With the command \cs{bokkususetup}\margcs{\cmd\bokkususetup\{\marg{options}\}} you can reset the options with global scope. +\paragraph{Chaos Sudoku} +\label{sec:pscchaossudoku} +\subparagraph{\texttt{chaossudokucell}} +With the command \cs{chaossudokucell}\margcs{\cmd\chaossudokucell\{\marg{column}\}\\\{\marg{row}\}\{\marg{number}\}}, you can set the \marg{number} of the grid cell \marg{column} \marg{row}. +\subparagraph{\texttt{chaossudokusetup}} +With the command \cs{chaossudokusetup}\margcs{\cmd\chaossudokusetup\{\marg{options}\}} you can reset the options with global scope. +\paragraph{Hakyuu} +\label{sec:pschakyuu} +\subparagraph{\texttt{hakyuucell}} +The command \cs{hakyuucell}\margcs{\cmd\hakyuucell\{\marg{column}\}\{\marg{row}\}\\\{\marg{number}\}} sets the \marg{number} of the grid cell \marg{column}\marg{row}. +\subparagraph{\texttt{hakyuusetup}} +With the command \cs{hakyuusetup}\margcs{\cmd\hakyuusetup\{\marg{options}\}} you can reset the options with global scope. +\paragraph{Hitori} +\label{sec:pschitori} +\subparagraph{\texttt{hitorisetup}} +With the command \cs{hitorisetup}\margcs{\cmd\hitorisetup\{\marg{options}\}} you can reset the options with global scope. +\paragraph{Kakuro} +\label{sec:psckakuro} +\subparagraph{\texttt{kakurorow}} +\label{sec:psckakurorow} +With\margcs{\cmd\kakurorow\{\marg{row}\}\{\marg{csv list}\}} the \cmd\kakurorow\ command, you can set the contents of a kakuro \marg{row}. These may be numbers and the commands \cmd\KKR\ or \cmd\Black. +\subparagraph{\texttt{kakurocolumn}} +\label{sec:psckakurocolumn} +With\margcs{\cmd\kakurocolumn\{\marg{column}\}\{\marg{csv list}\}} the \cmd\kakurocolumn\ command, you can set the contents of a kakuro \marg{column}. +\subparagraph{\texttt{KKR}} +With\margcs{\cmd\KKR\{\marg{sumV}\}\{\marg{sumH}\}} the \cmd\KKR\ command, you can set the contents of a kakuro cell. +\subparagraph{\texttt{Black}} +The command \cs{Black}\margcs{\cmd\Black} blacks out a cell. +\subparagraph{\texttt{kakurosetup}} +With the command \cs{kakurosetup}\margcs{\cmd\kakurosetup\{\marg{options}\}} you can reset the options with global scope. +\paragraph{Kendoku} +\label{sec:psckendoku} +\subparagraph{\texttt{kendokucell}} +The command \cs{kendokucell}\margcs{\cmd\kendokucell\{\marg{column}\}\{\marg{row}\}\\\{\marg{number}\}} sets the \marg{number} of the grid cell \marg{column}\marg{row}. +\subparagraph{\texttt{kendokusetup}} +With the command \cs{kendokusetup}\margcs{\cmd\kendokusetup\{\marg{options}\}} you can reset the options with global scope. +\paragraph{Killer Sudoku} +\label{sec:psckillersudoku} +\subparagraph{\texttt{killersudokucell}} +The command \cs{killersudokucell}\margcs{\cmd\killersudokucell\\\{\marg{column}\}\{\marg{row}\}\{\marg{number}\}} sets the \marg{number} of the grid cell \marg{column} \marg{row}. +\subparagraph{\texttt{killersudokusetup}} +With the command \cs{killersudokusetup}\margcs{\cmd\killersudokusetup\{\marg{options}\}} you can reset the options with global scope. +\paragraph{Laser Beam} +\label{sec:psclaserbeam} +\subparagraph{\texttt{laserH}} +The command \cs{laserH}\margcs{\cmd\laserH\{\marg{csv list}\}} typesets the numbers above the grid indicating how many cells are traversed by the laser beam. It expects a comma-separated list as an argument. +\subparagraph{\texttt{laserV}} +The command \cs{laserV}\margcs{\cmd\laserV\{\marg{csv list}\}} typesets the numbers left to the grid. +\subparagraph{\texttt{mirrorH}} +The command \cs{mirrorH}\margcs{\cmd\mirrorH\{\marg{csv list}\}} typesets the numbers below the grid indicating how many mirrors are placed in the intersections of this column. +\subparagraph{\texttt{mirrorV}} +The command \cs{mirrorV}\margcs{\cmd\mirrorV\{\marg{csv list}\}} typesets the numbers right to the grid. +\subparagraph{\texttt{placearrow}} +The command \cs{placearrow}\margcs{\cmd\placearrow\{\marg{column}\}\{\marg{row}\}\\\{\marg{direction}\}} is used for the placement of arrows at the grid frame. The reference for coordinates is the bottom left corner of the cell. In the mandatory argument \marg{direction}, you can use the following indicators: LeftUp, LeftDown, RightUp, RightDown +\subparagraph{\texttt{placecross}} +With the command \cs{placecross}\margcs{\cmd\placecross\{\marg{column}\}\{\marg{row}\}} you can place a cross in the intersections of the grid. +\subparagraph{\texttt{placemirror}} +With the command \cs{placemirror}\margcs{\cmd\placemirror\{\marg{column}\}\{\marg{row}\}\\\{\marg{direction}\}} you can place mirrors in the intersections of the grid. In the mandatory argument \marg{direction}, you can use the following indicators: H, V +\subparagraph{\texttt{laser}} +The command \cs{laser}\margcs{\cmd\laser[\oarg{color}]\{\marg{Ti\textit{k}Z path}\}} draws the laser beam given by \marg{Ti\textit{k}Z path} with color \oarg{color} (default: red). The reference for coordinates is the bottom left corner of the cell. + +\begin{lstlisting} +\laser[green]{(1,2)--(2,3)--(1,4)} +\end{lstlisting} + +You should consider using this command in the \env{puzzlebackground} environment. +\subparagraph{\texttt{laserbeamsetup}} +With the command \cs{laserbeamsetup}\margcs{\cmd\laserbeamsetup\{\marg{options}\}} you can reset the options with global scope. +\paragraph{Minesweeper} +\label{sec:pscminesweeper} +\subparagraph{\texttt{Mine}} +The command \cs{Mine}\margcs{\cmd\Mine} draws a mine. It can be used in commands like \cmd\setcell\ [see: \ref{sec:setcell}] or \cmd\setrow\ [see: \ref{sec:setrow}]! +\subparagraph{\texttt{minesweepersetup}} +With the command \cs{minesweepersetup}\margcs{\cmd\minesweepersetup\{\marg{options}\}} you can reset the options with global scope. +\paragraph{Schatzsuche} +\label{sec:pscschatzsuche} +\subparagraph{\texttt{Diamond}} +The command \cs{Diamond}\margcs{\cmd\Diamond} draws a diamond. It can be used in commands like \cmd\setcell\ [see: \ref{sec:setcell}] or \cmd\setrow\ [see: \ref{sec:setrow}]! +\subparagraph{\texttt{schatzsuchesetup}} +With the command \cs{schatzsuchesetup}\margcs{\cmd\schatzsuchesetup\{\marg{options}\}} you can reset the options with global scope. +\paragraph{Skyline} +\label{sec:pscskyline} +\subparagraph{\texttt{skylineT}} +The command \cs{skylineT}\margcs{\cmd\skylineT\{\marg{csv list}\}} typesets the numbers above the grid indicating how many skycrapers are visible. It expects a comma-separated list as an argument. +\subparagraph{\texttt{skylineB}} +The command \cs{skylineB}\margcs{\cmd\skylineB\{\marg{csv list}\}} typesets the numbers below the grid. +\subparagraph{\texttt{skylineL}} +The command \cs{skylineL}\margcs{\cmd\skylineL\{\marg{csv list}\}} typesets the numbers left to the grid. +\subparagraph{\texttt{skylineR}} +The command \cs{skylineR}\margcs{\cmd\skylineR\{\marg{csv list}\}} typesets the numbers right to the grid. +\subparagraph{\texttt{skylinecell}} +The command \cs{skylinecell}\margcs{\cmd\skylinecell\{\marg{column}\}\{\marg{row}\}\\\{\marg{height}\}} sets the \marg{height} of the grid cell \marg{column}\marg{row}. +\subparagraph{\texttt{skylinesetup}} +With the command \cs{skylinesetup}\margcs{\cmd\skylinesetup\{\marg{options}\}} you can reset the options with global scope. +\paragraph{Slitherlink} +\label{sec:pscslitherlink} +\subparagraph{\texttt{slitherlinkcell}} +The command \cs{slitherlinkcell}\margcs{\cmd\slitherlinkcell\\\{\marg{column}\}\{\marg{row}\}\{\marg{number}\}} sets the \marg{number} of the grid cell \marg{column} \marg{row}. +\subparagraph{\texttt{slitherlinksetup}} +With the command \cs{slitherlinksetup}\margcs{\cmd\slitherlinksetup\{\marg{options}\}} you can reset the options with global scope. +\paragraph{Sudoku} +\label{sec:psclpsudoku} +\subparagraph{\texttt{lpsudokucell}} +The command \cs{lpsudokucell}\margcs{\cmd\lpsudokucell\{\marg{column}\}\{\marg{row}\}\\\{\marg{number}\}} sets the \marg{number} of the grid cell \marg{column} \marg{row}. +\subparagraph{\texttt{lpsudokusetup}} +With the command \cs{lpsudokusetup}\margcs{\cmd\lpsudokusetup\{\marg{options}\}} you can reset the options with global scope. +\paragraph{Tents and Trees} +\label{sec:psctentsandtrees} +\subparagraph{\texttt{tentH}} +The command \cs{tentH}\margcs{\cmd\tentH\{\marg{csv list}\}} typesets the numbers above the grid indicating how many tents are in the respective column. It expects a comma-separated list as an argument. +\subparagraph{\texttt{tentV}} +The command \cs{tentV}\margcs{\cmd\tentV\{\marg{csv list}\}} typesets the numbers left to the grid. +\subparagraph{\texttt{Tree}} +The command \cs{Tree}\margcs{\cmd\Tree} draws a tree. It can be used in commands like \cmd\setcell\ [see: \ref{sec:setcell}] or \cmd\setrow\ [see: \ref{sec:setrow}]! The design of the tree is based on \href{http://tex.stackexchange.com/users/3144/alain-matthes}{Alain Matthes}' answer to this \href{http://tex.stackexchange.com/questions/39149/how-can-we-draw-a-christmas-tree-with-decorations-using-tikz}{question} on \TeX.sx. +\subparagraph{\texttt{Tent}} +The command \cs{Tent}\margcs{\cmd\Tent} draws a tent. It can be used in commands like \cmd\setcell\ [see: \ref{sec:setcell}] or \cmd\setrow\ [see: \ref{sec:setrow}]! +\subparagraph{\texttt{tentsandtreessetup}} +With the command \cs{tentsandtreessetup}\margcs{\cmd\tentsandtreessetup\{\marg{options}\}} you can reset the options with global scope. +\paragraph{Tunnel} +\label{sec:psctunnel} +\subparagraph{\texttt{tunnelH}} +The command \cs{tunnelH}\margcs{\cmd\tunnelH\{\marg{csv list}\}} typesets the numbers above the grid indicating how many tube segments are in the respective column. It expects a comma-separated list as an argument. +\subparagraph{\texttt{tunnelV}} +The command \cs{tunnelV}\margcs{\cmd\tunnelV\{\marg{csv list}\}} typesets the numbers left to the grid. +\subparagraph{\texttt{portal}} +The command \cs{portal}\margcs{\cmd\portal\{\marg{column}\}\{\marg{row}\}} is used for the placement of tunnel portals in the grid. +\subparagraph{\texttt{tube}} +The command \cs{tube}\margcs{\cmd\tube\{\marg{Ti\textit{k}Z path}\}} draws the tunnel tube given by \marg{Ti\textit{k}Z path}. The reference for coordinates is the center of the cell. The design of the tube is based on \href{http://tex.stackexchange.com/users/16772/xoff}{Xoff}'s answer to this \href{http://tex.stackexchange.com/questions/109410/how-to-pimp-my-tube}{question} on \TeX.sx. + +\begin{lstlisting} +\tube{(1.5,2.5)--(3.5,2.5)--(3.5,4.5)} +\end{lstlisting} + +\subparagraph{\texttt{tunnelsetup}} +With the command \cs{tunnelsetup}\margcs{\cmd\tunnelsetup\{\marg{options}\}} you can reset the options with global scope. +\subsubsection{User commands} +\paragraph{In the grid} +\subparagraph{\texttt{setcell}} +\label{sec:setcell} +With\margcs{\cmd\setcell\{\{\marg{column}\}\{\marg{row}\}\\\{\marg{element}\}} the \cmd\setcell\ command, you can set \marg{element} into cell \marg{column}\marg{row} as central node. It is aware of the current values of the surrounding environment options \envoption{rows}, \envoption{columns}, \envoption{scale} and \envoption{fontsize}. Furthermore, a check if \marg{element} is within the grid is applied. + +\subparagraph{\texttt{setbigcell}} +\label{sec:setbigcell} +The\margcs{\cmd\setbigcell[\oarg{fontsize}]\{\{\marg{column}\}\\\{\marg{row}\}\{\marg{element}\}} \cmd\setbigcell\ command sets \marg{element} into a big (\texttt{$2\times2$}) cell \marg{column}\marg{row} as central node. The optional argument \oarg{fontsize} is set to 'Huge' by default. + +\subparagraph{\texttt{setrow}} +\label{sec:setrow} +With\margcs{\cmd\setrow\{\marg{row}\}\{\marg{csv list}\}} the \cmd\setrow\ command, you can set the contents of a \marg{row}. These may be numbers or letters. + +\subparagraph{\texttt{setcolorrow}} +\label{sec:setcolorrow} +With\margcs{\cmd\setcolorrow\{\marg{row}\}\{\marg{csv list}\}} the \cmd\setcolorrow\ command, you can set the contents of a \marg{row}. Furthermore, the background of the cell is filled with color \texttt{LP@c@romannumber} [see: \ref{sec:LPdefinecolor}]. With the number 0, you can black out the grid cell. + +\subparagraph{\texttt{setcolumn}} +\label{sec:setcolumn} +With\margcs{\cmd\setcolumn\{\marg{column}\}\{\marg{csv list}\}} the \cmd\setcolumn\ command, you can set the contents of a \marg{column}. These may be numbers or letters. + +\subparagraph{\texttt{setcolorcolumn}} +\label{sec:setcolorcolumn} +With\margcs{\cmd\setcolorcolumn\\\{\marg{column}\}\{\marg{csv list}\}} the \cmd\setcolorcolumn\ command, you can set the contents of a \marg{column}. Furthermore, the background of the cell is filled with color \texttt{LP@c@romannumber} [see: \ref{sec:LPdefinecolor}]. + +\subparagraph{\texttt{setrule}} +\label{sec:setrule} +With\margcs{\cmd\setrule\{\{\marg{column}\}\{\marg{row}\}\\\{\marg{rule}\}} the \cmd\setrule\ command, you can set a calculation rule \marg{rule} into the top left corner of cell \marg{column}\marg{row}. The rule is typeset in inline math mode. You might consider using the \cmd\times\ and \cmd\div\ commands. + +\subparagraph{\texttt{fillcell}} +\label{sec:fillcell} +With\margcs{\cmd\fillcell\{\{\marg{column}\}\{\marg{row}\}} the \cmd\fillcell\ command, you can fill cell \marg{column} \marg{row} with the color defined with environment option \envoption{color}\footnote{Therefore, you must define an option \envoption{color} in the style file you want to use fill commands}. It is aware of the current values of the surrounding envionment options \envoption{rows}, \envoption{columns}, \envoption{scale} and \envoption{color}. Furthermore, a check if the cell is within the grid is applied. + +\subparagraph{\texttt{fillrow}} +\label{sec:fillrow} +With\margcs{\cmd\fillrow\{\marg{row}\}\{\marg{csv list}\}} the \cmd\fillrow\ command, you can fill a \marg{row}. In \marg{csv list} '1' means 'fill' and '0' means 'don't fill'. Internally, \cmd\fillrow\ uses \cmd\fillcell\ [see: \ref{sec:fillcell}]. + +\subparagraph{\texttt{fillcolumn}} +\label{sec:fillcolumn} +With\margcs{\cmd\fillcolumn\{\marg{column}\}\{\marg{csv list}\}} the \cmd\fillcolumn\ command, you can fill a \marg{column}. In \marg{csv list} '1' means 'fill' and '0' means 'don't fill'. Internally, \cmd\fillcolumn\ uses \cmd\fillcell\ [see: \ref{sec:fillcell}]. + +\subparagraph{\texttt{filldiagonals}} +\label{sec:filldiagonals} +With\margcs{\cmd\filldiagonals[\oarg{color}]} the \cmd\filldiagonals\ command, you can fill the diagonals with the color specified with the optional argument \oarg{color} (default: yellow!20). Furthermore, it checks for a quadratic grid, otherwise an error message is issued. + +\subparagraph{\texttt{framearea}} +\label{sec:framearea} +The command \cmd\framearea\margcs{\cmd\framearea\{\marg{color}\}\{\marg{Ti\textit{k}Z path}\}} frames the area given by \marg{Ti\textit{k}Z path} with color \marg{color}. The reference for coordinates is the bottom left corner of the cell. + +\begin{lstlisting} +\framearea{green}{(2,2)--(2,3)--(3,3)--(3,2)--(2,2)} +\end{lstlisting} + +This command will color the frame of the grid cell \texttt{(2,2)} green. You should consider using this command in the \env{puzzleforeground} [see: \ref{sec:puzzleforeground}] environment. + +\subparagraph{\texttt{fillarea}} +\label{sec:fillarea} +The command \cmd\fillarea\margcs{\cmd\fillarea\{\marg{color}\}\{\marg{Ti\textit{k}Z path}\}} fills the area given by \marg{Ti\textit{k}Z path} with color \marg{color}. The reference for coordinates is the bottom left corner of the cell. You should consider using this command in the \env{puzzlebackground} [see: \ref{sec:puzzlebackground}] environment. + +\subparagraph{\texttt{colorarea}} +\label{sec:colorarea} +The command \cmd\colorarea\margcs{\cmd\colorarea\{\marg{color}\}\{\marg{Ti\textit{k}Z path}\}} fills the area given by \marg{Ti\textit{k}Z path} with color \marg{color} -- just like \cmd\framearea\ without frame. + +\subparagraph{\texttt{framepuzzle}} +\label{sec:framepuzzle} +With\margcs{\cmd\framepuzzle[\oarg{color}]} the \cmd\framepuzzle\ command, you can frame the grid (thicker line) with the color specified with the optional argument \oarg{color} (default: black). + +\subparagraph{\texttt{tikzpath}} +\label{sec:tikzpath} +With\margcs{\cmd\tikzpath\{\marg{column}\}\{\marg{row}\}\\\{\marg{csv list}\}} the \cmd\tikzpath\ command, you can easily construct a Ti\textit{k}Z path. You just need to define a starting point \marg{column}\marg{row} (bottom left corner) and a \marg{csv list} with direction indicators relative to the current position. + +\begin{center} +\begin{tabular}{rlrlrl} +7: & up left & 8: & up & 9: & up right \\ +4: & left & 5: & no change & 6: & right \\ +1: & down left & 2: & down & 3: & down right \\ +\end{tabular} +\end{center} + +\begin{lstlisting} +\framearea{green}{\tikzpath{2}{2}{8,6,2,4}} +\end{lstlisting} + +This command will frame grid cell \texttt{(2,2)} green. + +\paragraph{Presentation} +\subparagraph{\texttt{titleformat}} +\label{sec:titleformat} +With\margcs{\cmd\titleformat\{\{\marg{format}\}} the \cmd\titleformat\ command, you can define the \marg{format} of the title. By default, the definition is as follows: + +\begin{lstlisting} +\titleformat{\centering\Large\color{blue}} +\end{lstlisting} + +\subparagraph{\texttt{puzzlecounter}} +\label{sec:puzzlecounter} +The command \cs{puzzlecounter}\margcs{\cmd\puzzlecounter} provides the general puzzle counter in textual form to use it in \cmd\definecounterstyle. + +\subparagraph{\texttt{setpuzzlecounter}} +\label{sec:setpuzzlecounter} +With the command \cs{setpuzzlecounter}\margcs{\cmd\setpuzzlecounter\{\marg{number}\}}, you can reset the puzzle counter, for example before the solutions. + +\subparagraph{\texttt{definecounterstyle}} +\label{sec:definecounterstyle} +The command \cs{definecounterstyle}\margcs{\cmd\definecounterstyle\{\marg{name}\}\\\{\marg{definition}\}} allows you to define your own styles. For example, the style \texttt{left} is defined as follows: + +\begin{lstlisting} +\definecounterstyle{left}{ + \begingroup\reversemarginpar\marginnote{ + \tikz\node[shape=rectangle,fill=yellow!40,inner sep=7pt, + draw,rounded corners=3pt,thick] + {\Huge\puzzlecounter};}[\LP@cvoffset]\endgroup} +} +\end{lstlisting} + +To typeset the counter into the margin we use the command \cmd\marginnote. We need to use the command \cmd\reversemarginpar\ to set the counter into the left margin. Of course, we must use this command in a group for local scope. Finally we use \cmd\puzzlecounter\ in a \cmd\tikz\ node with a vertical offset set with the option \envoption{cvoffset}. + +\subparagraph{\texttt{setgridlinestyle}} +\label{sec:setgridlinestyle} +The command \cs{setgridlinestyle}\margcs{\cmd\setgridlinestyle\{\marg{style}\}} sets the style of lines used in the grid. By default, the style is set to \texttt{solid}, whereas \package{slitherlink.sty} uses \texttt{dashed}. + +\subparagraph{\texttt{setnormallinewidth}} +\label{sec:setnormallinewidth} +With the command \cs{setnormallinewidth}\margcs{\cmd\setnormallinewidth\{\marg{dimension}\}}, you can set the width of the standard lines (default: \texttt{0.5pt}) + +\subparagraph{\texttt{setthicklinewidth}} +\label{sec:setthicklinewidth} +With the command \cs{setthicklinewidth}\margcs{\cmd\setthicklinewidth\{\marg{dimension}\}}, you can set the width of the 'thicker' lines (default: \texttt{1.5pt}) + + +\subsubsection{Internal commands} +\paragraph{Initialization} +\subparagraph{\texttt{LP@define@key}} +\label{sec:LPdefinekey} +With\margcs{\cmd\LP@define@key\{\marg{prefix}\}\\\{\marg{package}\}\{\marg{option}\}\{\marg{default}\}} the \cmd\LP@define@key\ command, you can define the options of the environment \marg{package}. A \marg{prefix} is needed for creating different name spaces. +\begin{lstlisting} +\LP@define@key{LP@BS}{battleship}{rows}{5} +\end{lstlisting} +This code snippet defines the option \envoption{rows} for environment \env{battleship} with the default value 5. This value is stored in \cmd\LP@BS@rows. + +\subparagraph{\texttt{LP@define@choicekey@fontsize}} +\label{sec:LPdefinechoicekeyfontsize} +With\margcs{\cmd\LP@define@choicekey@fontsize\\\{\marg{prefix}\}\{\marg{package}\}\{\marg{default}\}} this command, you can define the choice key option \envoption{fontsize} of the environment \marg{package}. Possible keys are: tiny, scriptsize, footnotesize, small, normalsize, large, Large, LARGE, huge, Huge + +\paragraph{Drawing grids} +\subparagraph{\texttt{LP@drawgrid}} +\label{sec:LPdrawgrid} +With\margcs{\cmd\LP@drawgrid\{\marg{xmin}\}\{\marg{ymin}\}\\\{\marg{xmax}\}\{\marg{ymax}\}\{\marg{step}\}} the \cmd\LP@drawgrid\ command, you can draw the grid (\marg{xmin},\marg{ymin}) to (\marg{xmax},\marg{ymax}) with step \marg{step}. For drawing the standard puzzle grid the step must be 1cm. + +\subparagraph{\texttt{LP@drawsudokugrid}} +\label{sec:LPdrawsudokugrid} +The\margcs{\cmd\LP@drawsudokugrid} command \cmd\LP@drawsudokugrid\ draws the stnadard Sudoku grid, but just the thicker lines. You will have to overlay the standard grid to get a full Sudoku grid. + +\subparagraph{\texttt{LP@drawbackground}} +\label{sec:LPdrawbackground} +The\margcs{\cmd\LP@drawbackground\{\marg{xmin}\}\\\{\marg{ymin}\}\{\marg{xmax}\}\{\marg{ymax}\}\{\marg{color}\}} command \cmd\LP@drawbackground\ draws the background color of the grid. + +\paragraph{In the grid} +\subparagraph{\texttt{LP@setcellcontent}} +\label{sec:LPsetcellcontent} +The\margcs{\cmd\LP@LP@setcellcontent\{\marg{column}\}\\\{\marg{row}\}\{\marg{element}\}} command \cmd\LP@setcellcontent\ is the generic command to set an arbitrary \marg{element}. + +\subparagraph{\texttt{LP@setcellcontentC}} +\label{sec:LPsetcellcontentC} +The\margcs{\cmd\LP@LP@setcellcontentC\{\marg{column}\}\\\{\marg{row}\}\{\marg{element}\}} command \cmd\LP@setcellcontentC\ is the generic command to set an arbitrary \marg{element} in a centered node in the bottom left corner. + +\subparagraph{\texttt{LP@setrowcontents}} +\label{sec:LPsetrowcontents} +The\margcs{\cmd\LP@setrowcontents\{\marg{csv list}\}\\\{\marg{column}\}\{\marg{row}\}} command \cmd\LP@setrowcontents\ is the generic command to set row contents. It does not necessarily start with \marg{column} 1! + +\subparagraph{\texttt{LP@setcolumncontents}} +\label{sec:LPsetcolumncontents} +The\margcs{\cmd\LP@setcolumncontents\{\marg{csv list}\}\\\{\marg{column}\}\{\marg{row}\}} command \cmd\LP@setcolumncontents\ is the generic command to set column contents. It does not necessarily start with \marg{row} 1! + +\subparagraph{\texttt{LP@ingrid}} +\label{sec:LPingrid} +With\margcs{\cmd\LP@ingrid\\\{\marg{column}\}\{\marg{row}\}\{\marg{max column}\}\\\{\marg{max row}\}\{\marg{package}\}} the \cmd\LP@ingrid\ command, you can check if an element -- that should be placed -- is within the grid. Otherwise an error message is issued. + +\subparagraph{\texttt{LP@definecolor}} +\label{sec:LPdefinecolor} +With\margcs{\cmd\LP@definecolor\\\{\marg{name}\}\{\marg{rgb color}\}} the \cmd\LP@definecolor\ command, you can define named rgb colors, especially for defining background colors of numbers used in \cmd\setcolorrow\ [see: \ref{sec:setcolorrow}] and \cmd\setcolorcolumn\ [see: \ref{sec:setcolorcolumn}]. + +The background color names follow the pattern: \texttt{LP@c@romannumber} + +\begin{lstlisting} +\LP@definecolor{LP@c@iv}{.55,1,.88} +\end{lstlisting} + +This command will define the new background color of number \colorbox[rgb]{.55,1,.88}{4}! + +\paragraph{Around the grid} +\subparagraph{\texttt{LP@leftcolumn}} +\label{sec:LPleftcolumn} +With\margcs{\cmd\LP@leftcolumn\{\{\marg{csv list}\}} the \cmd\LP@leftcolumn\ command, you can set the contents of the column left to the grid. The \cmd\skylineL\ command for the \env{skyline} environment is for example defined as follows: + +\begin{lstlisting} +\let\skylineL\LP@leftcolumn +\end{lstlisting} + +\subparagraph{\texttt{LP@rightcolumn}} +\label{sec:LPrightcolumn} +With\margcs{\cmd\LP@rightcolumn\{\{\marg{csv list}\}} the \cmd\LP@rightcolumn\ command, you can set the contents of the column right to the grid. + +\subparagraph{\texttt{LP@toprow}} +\label{sec:LPtoprow} +With\margcs{\cmd\LP@toprow\{\{\marg{csv list}\}} the \cmd\LP@toprow\ command, you can set the contents of the row above the grid. + +\subparagraph{\texttt{LP@bottomrow}} +\label{sec:LPbottomrow} +With\margcs{\cmd\LP@bottomrow\{\{\marg{csv list}\}} the \cmd\LP@bottomrow\ command, you can set the contents of the row below the grid. + +\paragraph{Presentation} +\subparagraph{\texttt{LP@drawcounter}} +\label{sec:LPdrawcounter} +The command \cs{LP@drawcounter}\margcs{\cmd\LP@drawcounter\{\marg{name}\}} draws the puzzle counter with counter style \marg{name}. + +\section{Examples} +You\IfFileExists{qrcode.png}{\marginnote{\href{https://bitbucket.org/kleberj/logicpuzzle/}{\includegraphics[height=2cm]{qrcode.png}}}[-37pt]}{} can download application examples and their solutions from the \href{https://bitbucket.org/kleberj/logicpuzzle/}{project page}. The puzzles are originally licensed under \href{http://creativecommons.org/licenses/by-nc-sa/3.0/}{\ccbyncsa}. +{ +\clearpage +\raggedright +\nocite{*} +\bibliography{logicpuzzle} +\addcontentsline{toc}{section}{\refname} +} +\clearpage +\Headline{Index} +\printindex +\end{document} diff --git a/Master/texmf-dist/doc/latex/logicpuzzle/logicpuzzle/logicpuzzle.pdf b/Master/texmf-dist/doc/latex/logicpuzzle/logicpuzzle/logicpuzzle.pdf deleted file mode 100644 index 0e77a0f56d3..00000000000 Binary files a/Master/texmf-dist/doc/latex/logicpuzzle/logicpuzzle/logicpuzzle.pdf and /dev/null differ diff --git a/Master/texmf-dist/doc/latex/logicpuzzle/logicpuzzle/logicpuzzle.tex b/Master/texmf-dist/doc/latex/logicpuzzle/logicpuzzle/logicpuzzle.tex deleted file mode 100644 index 47aa95d394e..00000000000 --- a/Master/texmf-dist/doc/latex/logicpuzzle/logicpuzzle/logicpuzzle.tex +++ /dev/null @@ -1,2284 +0,0 @@ -% pdflatex --shell-escape logo.tex -% run twice: 1. download qrcode.png 2. include the pic -% or download http://i.imgur.com/KAunnuS.png and rename it to qrcode.png -% -\documentclass[a4paper]{ltxdoc}% -\usepackage[english]{babel}% -\usepackage[latin1]{inputenc}% -\usepackage[T1]{fontenc}% -\usepackage{textcomp}% -\usepackage{lmodern}% -\usepackage{bera}% -\usepackage{makeidx} -\usepackage{ccicons} -\usepackage{tabularx} -\usepackage{microtype}% -\usepackage{ltxdocext}% -\usepackage{listings} -\usepackage{nicefrac} -\usepackage{filecontents} -\usepackage{marginnote}% -\usepackage[svgnames,rgb]{xcolor}% -\usepackage[automark,nouppercase]{scrpage2} -\usepackage{logicpuzzle} -\usepackage{hyperref} -% -\setlength{\headheight}{1.1\baselineskip}% -% -\let\PrintIndex\relax -\makeindex -\makeatletter -\renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}% - {-2.5ex\@plus -1ex \@minus -.25ex}% - {1.25ex \@plus .25ex}% - {\normalfont\normalsize\bfseries}} -\makeatother -\setcounter{secnumdepth}{5} -\setcounter{tocdepth}{5} -\makeatother -\AtBeginDocument{\IfFileExists{qrcode.png}{}{\write18{wget -O qrcode.png http://i.imgur.com/KAunnuS.png}}}% -\hypersetup{colorlinks=true,urlcolor=NavyBlue,linkcolor=NavyBlue,citecolor=CornflowerBlue,naturalnames=true,hypertexnames=false}% -\lstset{language=[LaTeX]TeX,numbers=left,numberstyle=\tiny, basicstyle=\ttfamily, aboveskip=\baselineskip, frame=single, backgroundcolor=\color{LightGoldenrodYellow}, keywordstyle=\color{Blue}, -emph={ddsudoku, battleship, bokkusu, chaossudoku, hakyuu, hitori, kendoku, killersudoku, laserbeam, skyline, slitherlink, lpsudoku, minesweeper, tunnel, -minipage, tikzpicture, puzzlebackground, puzzleforeground, center, pgfonlayer, left, -shape, fill, inner, sep, draw, rounded, corners, thick}, -emphstyle=\color{Tomato}, emph={[2]Wheat, HotPink, GreenYellow, LightBlue, LightSalmon, -LightYellow, green, sudoku, rows, columns, scale, layer, color, bgcolor, counterstyle, title, -titleindent, titlewidth, cvoffset, width}, -emphstyle={[2]\color{OliveDrab}}, morekeywords={LP@definecolor, LP@define@choicekey@fontsize, -ExecuteOptionsX, ProcessOptionsX, LP@init@counter, valueH, valueV, sumH, sumV, LP@bottomrow, -LP@toprow, LP@rightcolumn, bokkususetup, setkeys, LP@set@package, LP@set@env@prefix, -ifthenelse, equal, LP@drawbackground, LP@drawgrid, LP@drawcounter, ProvidesPackage, -RequirePackage, LP@BK@init@prefix, LP@BK@init@package, LP@leftcolumn, skylineL, -LP@define@key, framearea, framepuzzle, fillarea, filldiagonals, tikzpath, setrule, colorarea, -ddsudokucell, chaossudokucell, hakyuucell, setrow, LP@cvoffset, titleformat, definecounterstyle, -marginnote, tikz, node, placesegment, placeship, shipH, shipV, shipbox, puzzlecounter, color, -fillrow, setcolorrow, laserV, laserH, mirrorV, mirrorH, placearrow, placecross, placemirror, -laser, skylineT, skylineB, skylineR, skylineL, skylinecell, setbigcell, slitherlinkcell, -tunnelH, tunnelV, tube, portal, Mine, ShipR, [, ]}} -\makeatletter -\renewcommand{\maketitle}% -{% - \thispagestyle{empty}% - \pagecolor{Ivory}% - \begin{titlepage}% - \begin{tikzpicture}[remember picture,overlay]% - \node[yshift=-2cm] at (current page.north west)% - {% - \begin{tikzpicture}[remember picture, overlay]% - \draw[fill=CornflowerBlue,color=CornflowerBlue] (0,0) rectangle% - (\paperwidth,2cm);% - \draw[anchor=west,yshift=-4cm,xshift=3cm,color=NavyBlue] (0,0) node% - {\parbox{15cm}{\RaggedRight\Huge\sffamily\textbf{\@title}}};% - \draw[anchor=west,yshift=-6cm,xshift=3cm,color=NavyBlue] (0,0) node% - {\parbox{15cm}{\huge\sffamily\textbf{\@fileversion}}};% - \draw[anchor=west,yshift=-9cm,xshift=3cm,color=NavyBlue] (0,0) node% - {\parbox{15cm}{\RaggedRight\huge\sffamily\textbf{\@subtitle}}};% - \draw[anchor=west,yshift=-13cm,xshift=3cm,color=NavyBlue] (0,0) node% - {\usebox\logo};% - \draw[anchor=west,yshift=-17cm,xshift=3cm,color=NavyBlue] (0,0) node% - {\parbox{15cm}{\huge\sffamily\textbf{\@date}}};% - \draw[anchor=west,yshift=-20cm,xshift=3cm,color=NavyBlue] (0,0) node% - {\parbox{15cm}{\Large\sffamily{\@authorline\\\textbf{\@author}}}};% - \end{tikzpicture}% - };% - \node[yshift=0cm] at (current page.south west)% - {% - \begin{tikzpicture}[remember picture, overlay]% - \draw[fill=NavyBlue,color=NavyBlue,yshift=6cm,xshift=2cm] (0,0) rectangle (0.2cm,19cm);% - \draw[fill=CornflowerBlue,color=CornflowerBlue] (0,0) rectangle (\paperwidth,2cm);% - \draw[anchor=west,yshift=1cm,xshift=3cm,color=NavyBlue] (0,0) node% - {\parbox{15cm}{\large\sffamily{\@refline}}};% - \end{tikzpicture}% - };% - \end{tikzpicture}% - \end{titlepage}% - \pagecolor{white}% -}% -% -\newcommand*{\@tikzhead}[1]% -{% - \begin{tikzpicture}[remember picture,overlay]% - \node[yshift=-2cm] at (current page.north west)% - {% - \begin{tikzpicture}[remember picture, overlay]% - \draw[fill=CornflowerBlue] (0,0) rectangle (\paperwidth,2cm);% - \draw[anchor=west,yshift=1cm,xshift=1.5cm,color=NavyBlue] (0,0) node% - {\parbox{15cm}{\LARGE\sffamily\textbf{\@title}}};% - \node[anchor=east,xshift=.9\paperwidth,rectangle,% - rounded corners=15pt,inner sep=11pt,fill=NavyBlue]% - {\color{white}\textsc{#1}};% - \end{tikzpicture}% - };% - \end{tikzpicture}% -}% -\clearscrheadings% -\ihead{\@tikzhead{\headmark}}% -\cfoot{\upshape\thepage}% -\pagestyle{scrheadings}% -% -\newcommand*{\Headline}[1]{\@mkboth{#1}{#1}}% -% -\renewcommand{\headfont}{\normalfont\mdseries\scshape} -% -\gdef\@subtitle{}% -\providecommand*{\Subtitle}[1]{\gdef\@subtitle{#1}}% -\gdef\@fileversion{}% -\providecommand*{\Fileversion}[1]{\gdef\@fileversion{#1}}% -\gdef\@author{}% -\providecommand*{\Author}[1]{\gdef\@author{#1}}% -\gdef\@authorline{Package author:}% -\providecommand*{\Authorline}[1]{\gdef\@authorline{#1}}% -\gdef\@refline{}% -\providecommand*{\Refline}[1]{\gdef\@refline{#1}}% -\gdef\and{\unskip{}, }% -\newcommand\doubledash{-\kern0.5pt-} -\def\enoteformat{\rightskip\z@ \leftskip\z@ \parindent=1em\leavevmode\llap{\makeenmark}} -\makeatother -% -\def\filename{logicpuzzle.sty}% -\def\XeLaTeX{Xe\LaTeX}% -% -\newenvironment{optionlist} -{\begin{trivlist}\setlength\leftskip{2em}} -{\end{trivlist}} -\newcommand\optitem[3]{\item [\texttt{\textbf{\textcolor{DodgerBlue}{#1}} \lbrack\textcolor{Crimson}{#2}\rbrack}] #3} -% -\makeatletter% -\renewcommand\tableofcontents% -{% - %\section*{\contentsname}% - \@mkboth{% - \MakeUppercase\contentsname}{\MakeUppercase\contentsname}% - \@starttoc{toc}% -}% -% -\newcommand\layer{\name@idx{PGF layer}} -\newcommand\styleoption{\name@idx{style option}}% -\newcommand\envoption{\name@idx{environment option}}% -\newcommand\stylename{\name@idx{document style}}% -\def\name@idx#1#2{% - {\ttfamily#2}% - \index{#2\space#1=\string\ttt{#2}\space#1}\index{#1>#2=\string\ttt{#2}}% -}% -\newcommand*\margcs[1]{\marginnote{\hbadness=10000\RaggedLeft\scriptsize #1}}% -\newcommand*\package[1]{\texttt{#1}\index{#1=\string\ttt{#1}}}% -\DeclareRobustCommand{\marg}[1]{% - \meta{#1}% - \index{#1=\string\meta{#1} mandatory argument}\index{mandatory argument>#1=\string\meta{#1}}% -}% -\DeclareRobustCommand{\oarg}[1]{% - \meta{#1}% - \index{#1=\string\meta{#1} optional argument}\index{optional argument>#1=\string\meta{#1}}% -}% -% -%\renewcommand\@biblabel[1]{\makebox[1.5cm][l]{[#1]}} -\renewcommand*\l@subsection{\@dottedtocline{2}{1.6em}{3.1em}} -\renewcommand*\l@subsubsection{\@dottedtocline{3}{4.7em}{3.8em}} -\renewcommand*\l@paragraph{\@dottedtocline{3}{8.5em}{5em}} -\renewcommand*\l@subparagraph{\@dottedtocline{3}{13.5em}{6em}} -\renewenvironment{theindex} - {\if@twocolumn - \@restonecolfalse - \else - \@restonecoltrue - \fi - \columnseprule \z@ - \columnsep 35\p@ -\def\see##1##2{\textit{See} ##1}% -\def\seealso##1##2{\textit{See also} ##1}% -\long\def\cmd##1{\cs{\expandafter\cmd@to@cs\string##1}}% -\def\@url##1{\url@break\ttt{##1}\endgroup}% -\def\ttt{\begingroup\@sanitize\ttfamily\@ttt}% -\def\@ttt##1{##1\endgroup}% -\mathchardef\save@secnumdepth\c@secnumdepth -\c@secnumdepth\m@ne - \phantomsection% - \twocolumn%[\section{\indexname}]% - \addcontentsline{toc}{section}{Index}% -\c@secnumdepth\save@secnumdepth - %\thispagestyle{plain} - \parindent\z@ - \parskip\z@ \@plus .3\p@\relax - \let\item\@idxitem} - {\if@restonecol\onecolumn\else\clearpage\fi} -\makeatother -% -\setlength\parindent{0pt}% -\hypersetup{pdfauthor={Josef Kleber},pdftitle={A style file for typesetting logic puzzles},pdfsubject={Documentation for LaTeX style \filename}}% -% -\begin{document} -\begin{filecontents}{logicpuzzle.bib} -@misc{bib:webbb:logigpuzzle, - author = {Josef Kleber}, - note = {\href{https://bitbucket.org/kleberj/logicpuzzle/}(https://bitbucket.org/kleberj/logicpuzzle/)}, - title = {The logicpuzzle bundle}, - year = {2013}, - } - -@misc{bib:weblp:logigpuzzle, - author = {Josef Kleber}, - note = {\href{http://logicpuzzle.square7.de/}(http://logicpuzzle.square7.de/)}, - title = {{logicpuzzle -- A LaTeX style file for typesetting logic puzzles}}, - year = {2013}, - } - -@misc{bib:wiki:createlpsudoku, - author = {Josef Kleber}, - note = {\href{http://logicpuzzle.square7.de/createlpsudoku}(http://logicpuzzle.square7.de/createlpsudoku)}, - title = {createlpsudoku}, - year = {2013}, - } - -@misc{bib:wiki:lpsmag, - author = {Josef Kleber}, - note = {\href{http://logicpuzzle.square7.de/lpsmag}(http://logicpuzzle.square7.de/lpsmag)}, - title = {lpsmag}, - year = {2013}, - } - -@misc{bib:wiki:howtosudoku, - author = {Josef Kleber}, - note = {\href{http://logicpuzzle.square7.de/sudoku_magazine}(http://logicpuzzle.square7.de/sudoku\_magazine)}, - title = {{How to create a Sudoku magazine}}, - year = {2013}, - } - -@misc{bib:web:qqwing, - author = {Stephen Ostermiller}, - note = {\href{http://ostermiller.org/qqwing/}(http://ostermiller.org/qqwing/)}, - title = {{QQwing -- Sudoku Generator and Solver}}, - year = {2011}, - } - -@misc{bib:web:hodoku, - author = {Bernhard Hobiger}, - note = {\href{http://hodoku.sourceforge.net/en/index.php}(http://hodoku.sourceforge.net/en/index.php)}, - title = {{HoDoKu}}, - year = {2012}, - } - -@misc{bib:ex:ddsudoku, - author = {Josef Kleber}, - note = {\href{https://bitbucket.org/kleberj/logicpuzzle/downloads/example-ddsudoku.pdf}(https://bitbucket.org/kleberj/logicpuzzle/downloads/example-ddsudoku.pdf)}, - title = {{Examples \& Solutions (ddsudoku)}}, - year = {2013}, - } - -@misc{bib:ex:battleship, - author = {Josef Kleber}, - note = {\href{https://bitbucket.org/kleberj/logicpuzzle/downloads/example-battleship.pdf}(https://bitbucket.org/kleberj/logicpuzzle/downloads/example-battleship.pdf)}, - title = {{Examples \& Solutions (battleship)}}, - year = {2013}, - } - -@misc{bib:ex:bokkusu, - author = {Josef Kleber}, - note = {\href{https://bitbucket.org/kleberj/logicpuzzle/downloads/example-bokkusu.pdf}(https://bitbucket.org/kleberj/logicpuzzle/downloads/example-bokkusu.pdf)}, - title = {{Examples \& Solutions (bokkusu)}}, - year = {2013}, - } - -@misc{bib:ex:chaossudoku, - author = {Josef Kleber}, - note = {\href{https://bitbucket.org/kleberj/logicpuzzle/downloads/example-chaossudoku.pdf}(https://bitbucket.org/kleberj/logicpuzzle/downloads/example-chaossudoku.pdf)}, - title = {{Examples \& Solutions (chaossudoku)}}, - year = {2013}, - } - -@misc{bib:ex:hakyuu, - author = {Josef Kleber}, - note = {\href{https://bitbucket.org/kleberj/logicpuzzle/downloads/example-hakyuu.pdf}(https://bitbucket.org/kleberj/logicpuzzle/downloads/example-hakyuu.pdf)}, - title = {{Examples \& Solutions (hakyuu)}}, - year = {2013}, - } - -@misc{bib:ex:hitori, - author = {Josef Kleber}, - note = {\href{https://bitbucket.org/kleberj/logicpuzzle/downloads/example-hitor.pdf}(https://bitbucket.org/kleberj/logicpuzzle/downloads/example-hitori.pdf)}, - title = {{Examples \& Solutions (hitori)}}, - year = {2013}, - } - -@misc{bib:ex:kendoku, - author = {Josef Kleber}, - note = {\href{https://bitbucket.org/kleberj/logicpuzzle/downloads/example-kendoku.pdf}(https://bitbucket.org/kleberj/logicpuzzle/downloads/example-kendoku.pdf)}, - title = {{Examples \& Solutions (kendoku)}}, - year = {2013}, - } - -@misc{bib:ex:killersudoku, - author = {Josef Kleber}, - note = {\href{https://bitbucket.org/kleberj/logicpuzzle/downloads/example-killersudoku.pdf}(https://bitbucket.org/kleberj/logicpuzzle/downloads/example-killersudoku.pdf)}, - title = {{Examples \& Solutions (killersudoku)}}, - year = {2013}, - } - -@misc{bib:ex:laserbeam, - author = {Josef Kleber}, - note = {\href{https://bitbucket.org/kleberj/logicpuzzle/downloads/example-laserbeam.pdf}(https://bitbucket.org/kleberj/logicpuzzle/downloads/example-laserbeam.pdf)}, - title = {{Examples \& Solutions (laserbeam)}}, - year = {2013}, - } - -@misc{bib:ex:minesweeper, - author = {Josef Kleber}, - note = {\href{https://bitbucket.org/kleberj/logicpuzzle/downloads/example-minesweeper.pdf}(https://bitbucket.org/kleberj/logicpuzzle/downloads/example-minesweeper.pdf)}, - title = {{Examples \& Solutions (minesweeper)}}, - year = {2013}, - } - -@misc{bib:ex:skyline, - author = {Josef Kleber}, - note = {\href{https://bitbucket.org/kleberj/logicpuzzle/downloads/example-skyline.pdf}(https://bitbucket.org/kleberj/logicpuzzle/downloads/example-skyline.pdf)}, - title = {{Examples \& Solutions (skyline)}}, - year = {2013}, - } - -@misc{bib:ex:slitherlink, - author = {Josef Kleber}, - note = {\href{https://bitbucket.org/kleberj/logicpuzzle/downloads/example-slitherlink.pdf}(https://bitbucket.org/kleberj/logicpuzzle/downloads/example-slitherlink.pdf)}, - title = {{Examples \& Solutions (slitherlink)}}, - year = {2013}, - } - -@misc{bib:ex:lpsudoku, - author = {Josef Kleber}, - note = {\href{https://bitbucket.org/kleberj/logicpuzzle/downloads/example-lpsudoku.pdf}(https://bitbucket.org/kleberj/logicpuzzle/downloads/example-lpsudoku.pdf)}, - title = {{Examples \& Solutions (lpsudoku)}}, - year = {2013}, - } - -@misc{bib:ex:tunnel, - author = {Josef Kleber}, - note = {\href{https://bitbucket.org/kleberj/logicpuzzle/downloads/example-tunnel.pdf}(https://bitbucket.org/kleberj/logicpuzzle/downloads/example-tunnel.pdf)}, - title = {{Examples \& Solutions (tunnel)}}, - year = {2013}, - } - -\end{filecontents} -\bibliographystyle{plain} -\ddsudokusetup{width=4.5cm,scale=0.85} -\battleshipsetup{width=4.5cm,scale=0.77,sbindent=0.65cm,sbwidth=3.6cm} -\bokkususetup{width=4.5cm,scale=0.64,fontsize=normalsize} -\chaossudokusetup{width=4.5cm,scale=0.89} -\hakyuusetup{width=4.5cm,scale=0.89} -\hitorisetup{width=4.5cm,scale=0.85} -\kendokusetup{width=4.5cm,scale=0.89} -\killersudokusetup{width=4.5cm,scale=0.89} -\laserbeamsetup{width=4.5cm,scale=0.66,fontsize=normalsize} -\minesweepersetup{width=4.5cm,scale=0.85} -\skylinesetup{width=4.5cm,scale=0.66,fontsize=normalsize} -\slitherlinksetup{width=4.5cm,scale=0.85} -\lpsudokusetup{width=4.5cm,scale=0.49,fontsize=small} -\tunnelsetup{width=4.5cm,scale=0.75} -\title{\filename}% -\Subtitle{A style file for typesetting logic puzzles}% -\author{Josef Kleber} -\Fileversion{v2.0} -\Refline{\href{mailto:josef.kleber@gmx.de}{\texttt{josef.kleber@gmx.de}}\\\href{https://bitbucket.org/kleberj/logicpuzzle/}{\texttt{https://bitbucket.org/kleberj/logicpuzzle/}}} -\newsavebox\logo -\savebox\logo{% - \begin{laserbeam} - \laserV{1} - \laserH{{}} - \mirrorH{{},2} - \mirrorV{{},{},{},{},{},2} - \framepuzzle[LP@c@mirror] - \placearrow{3}{1}{LeftUp} - \placearrow{6}{4}{RightUp} - \placecross{3}{3} - \end{laserbeam} - \hspace{1.5cm} - \begin{laserbeam} - \laserV{1} - \laserH{{}} - \mirrorH{{},2} - \mirrorV{{},{},{},{},{},2} - \framepuzzle[LP@c@mirror] - \placearrow{3}{1}{LeftUp} - \placearrow{6}{4}{RightUp} - \placecross{3}{3} - \placemirror{2}{2}{V} - \placemirror{4}{2}{H} - \placemirror{5}{5}{V} - \placemirror{3}{5}{H} - \begin{puzzlebackground} - \laser{\tikzpath{3}{1}{7,9,9,9,7,1,7,1,3,3,3,9,9}} - \end{puzzlebackground} - \end{laserbeam} -} -\maketitle -\stepcounter{page} -\tableofcontents -\clearpage -\setlength\parskip{6pt}% - -\section{Supported puzzles} -\label{sec:supppuzzle} -\subsection{2D-Sudoku} -Fill every row, every column and each of the two diagonals -- if indicated -- with numbers from 1 to SIZE of the grid. - -\subsubsection{Example} - -\begin{center} - \begin{ddsudoku} - \framepuzzle - \filldiagonals[orange!50] - \ddsudokucell{1}{5}{1} - \ddsudokucell{1}{4}{3} - \ddsudokucell{2}{3}{4} - \ddsudokucell{4}{1}{3} - \ddsudokucell{4}{3}{2} - \ddsudokucell{5}{4}{4} - \end{ddsudoku} - \hspace{1.5cm} - \begin{ddsudoku} - \framepuzzle - \filldiagonals[orange!50] - \setrow{5}{1,3,4,5,2} - \setrow{4}{3,2,5,1,4} - \setrow{3}{5,4,3,2,1} - \setrow{2}{2,5,1,4,3} - \setrow{1}{4,1,2,3,5} - \end{ddsudoku} -\end{center} - -\begin{lstlisting} -\begin{center} - \begin{ddsudoku} - \framepuzzle - \filldiagonals[orange!50] - \ddsudokucell{1}{5}{1} - \ddsudokucell{1}{4}{3} - \ddsudokucell{2}{3}{4} - \ddsudokucell{4}{1}{3} - \ddsudokucell{4}{3}{2} - \ddsudokucell{5}{4}{4} - \end{ddsudoku} - \hspace{1.5cm} - \begin{ddsudoku} - \framepuzzle - \filldiagonals[orange!50] - \setrow{5}{1,3,4,5,2} - \setrow{4}{3,2,5,1,4} - \setrow{3}{5,4,3,2,1} - \setrow{2}{2,5,1,4,3} - \setrow{1}{4,1,2,3,5} - \end{ddsudoku} -\end{center} -\end{lstlisting} - -\subsubsection{Options} -\begin{optionlist} - \optitem{\envoption{rows}}{5}{defines the number of rows in the grid.} - \optitem{\envoption{columns}}{5}{specifies the number of columns in the grid} - \optitem{\envoption{width}}{5.1cm}{sets the width of the minipage, in which the grid is typeset.} - \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage.} - \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}} - \optitem{\envoption{title}}{}{sets the title of a puzzle.} - \optitem{\envoption{titleindent}}{0cm}{defines the indent of the title.} - \optitem{\envoption{titlewidth}}{5.1cm}{specifies the width of the box the title is set in.} - \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.} - \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right} - \optitem{\envoption{cvoffset}}{-23pt}{sets the vertical offset of the counters in the margin.} -\end{optionlist} - -\subsection{Battleship} -Try to find the positions of the ships listed below the puzzle. The numbers on the side of the puzzle reveals how many ship segments can be found in the rows and columns. All remaining fields indicate 'water'. Consider the following rules: The ships are arranged horizontally and vertically. No ship touches another ship at any point, not even diagonally. - -\subsubsection{Example} -\begin{center} -\begin{battleship} -\placesegment{4}{1}{\ShipR} -\shipH{4,1,2,2,2} -\shipV{3,1,4,0,3} -\shipbox{3,3,2,2,1} -\end{battleship} -\hspace{1.5cm} -\begin{battleship} -\placeship{V}{1}{1}{3} -\placeship{H}{1}{5}{2} -\placeship{H}{3}{1}{2} -\placeship{H}{3}{3}{3} -\placeship{H}{5}{5}{1} -\shipH{4,1,2,2,2} -\shipV{3,1,4,0,3} -\end{battleship} -\end{center} - -\begin{lstlisting} -\begin{center} - \begin{battleship} - \placesegment{4}{1}{\ShipR} - \shipH{4,1,2,2,2} - \shipV{3,1,4,0,3} - \shipbox{3,3,2,2,1} - \end{battleship} - \hspace{1.5cm} - \begin{battleship} - \placeship{V}{1}{1}{3} - \placeship{H}{1}{5}{2} - \placeship{H}{3}{1}{2} - \placeship{H}{3}{3}{3} - \placeship{H}{5}{5}{1} - \shipH{4,1,2,2,2} - \shipV{3,1,4,0,3} - \end{battleship} -\end{center} -\end{lstlisting} - -\subsubsection{Options} -\begin{optionlist} - \optitem{\envoption{rows}}{5}{defines the number of rows in the grid.} - \optitem{\envoption{columns}}{5}{specifies the number of columns in the grid.} - \optitem{shipcolor}{green}{sets the color of the ship segments.} - \optitem{\envoption{width}}{6cm}{sets the width of the minipage, in which the grid is typeset.} - \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage.} - \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}} - \optitem{\envoption{title}}{}{sets the title of a puzzle.} - \optitem{\envoption{titleindent}}{0.75cm}{defines the indent of the title.} - \optitem{\envoption{titlewidth}}{5.15cm}{specifies the width of the box the title is set in.} - \optitem{\envoption{sbindent}}{0.75cm}{defines the indent of the ship box below the grid.} -\optitem{\envoption{sbwidth}}{5.15cm}{specifies the width of the minipage, in which the ships are typeset.} - \optitem{\envoption{sbshipscale}}{1}{scales the size of the ships in the ship box.} - \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.} - \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right} - \optitem{\envoption{cvoffset}}{-23pt}{sets the vertical offset of the counters in the margin.} -\end{optionlist} - -\subsection{Bokkusu} -Black out some of the grid cells. The numbers on the left and the bottom edge of the grid indicate the values of the cells for adding up. The numbers on the right and the top edge of the grid specify the sums of the values of the colored cells. - -\subsubsection{Example} -\begin{center} - \begin{bokkusu} - \valueH{1,2,3,4,5} - \valueV{1,2,3,4,5} - \sumH{7,1,11,9,6} - \sumV{2,12,5,13,?} - \end{bokkusu} - \hspace{1.5cm} - \begin{bokkusu} - \valueH{1,2,3,4,5} - \valueV{1,2,3,4,5} - \sumH{7,1,11,9,6} - \sumV{2,12,5,13,?} - \fillrow{1}{0,1,0,0,0} - \fillrow{2}{0,0,1,1,1} - \fillrow{3}{1,0,0,1,0} - \fillrow{4}{1,0,1,1,1} - \fillrow{5}{0,0,1,0,0} - \end{bokkusu} -\end{center} - -\begin{lstlisting} -\begin{center} - \begin{bokkusu} - \valueH{1,2,3,4,5} - \valueV{1,2,3,4,5} - \sumH{7,1,11,9,6} - \sumV{2,12,5,13,?} - \end{bokkusu} - \hspace{1.5cm} - \begin{bokkusu} - \valueH{1,2,3,4,5} - \valueV{1,2,3,4,5} - \sumH{7,1,11,9,6} - \sumV{2,12,5,13,?} - \fillrow{5}{0,0,1,0,0} - \fillrow{4}{1,0,1,1,1} - \fillrow{3}{1,0,0,1,0} - \fillrow{2}{0,0,1,1,1} - \fillrow{1}{0,1,0,0,0} - \end{bokkusu} -\end{center} -\end{lstlisting} - -\subsubsection{Options} -\begin{optionlist} - \optitem{\envoption{rows}}{5}{defines the number of rows in the grid.} - \optitem{\envoption{columns}}{5}{specifies the number of columns in the grid} - \optitem{\envoption{width}}{6.7cm}{sets the width of the minipage, in which the grid is typeset.} - \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage.} - \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}} - \optitem{\envoption{title}}{}{sets the title of a puzzle.} - \optitem{\envoption{titleindent}}{0.75cm}{defines the indent of the title.} - \optitem{\envoption{titlewidth}}{5.85cm}{specifies the width of the box the title is set in.} - \optitem{\envoption{color}}{black}{specifies the color for coloring the cells.} - \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.} - \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right} - \optitem{\envoption{cvoffset}}{-38pt}{sets the vertical offset of the counters in the margin.} -\end{optionlist} - -\subsection{Chaos Sudoku} -Fill the cells of an area with numbers from 1 to N of the N*N grid. Each number can appear only once - in each area, column, row or diagonal if indicated. -\subsubsection{Example} -\begin{center} - \begin{chaossudoku} - \chaossudokucell{1}{1}{3} - \chaossudokucell{1}{5}{4} - \chaossudokucell{3}{2}{4} - \chaossudokucell{4}{2}{5} - \chaossudokucell{5}{5}{2} - \begin{puzzlebackground} - \fillarea{Wheat}{(1,1)--(1,2)--(2,2)--(2,3)--(4,3)--(4,1)--(1,1)} - \fillarea{HotPink!30}{(1,2)--(1,6)--(3,6)--(3,5)--(2,5)--(2,2)--(1,2)} - \fillarea{GreenYellow}{(2,3)--(2,5)--(3,5)--(3,4)--(5,4)--(5,2)--(4,2)--(4,3)--(2,3)} - \fillarea{LightBlue}{(3,4)--(3,6)--(6,6)--(6,5)--(5,5)--(5,4)--(3,4)} - \fillarea{LightYellow}{(4,1)--(4,2)--(5,2)--(5,5)--(6,5)--(6,1)--(4,1)} - \end{puzzlebackground} - \end{chaossudoku} - \hspace{1.5cm} - \begin{chaossudoku} - \setrow{5}{4,3,5,1,2} - \setrow{4}{2,1,3,4,5} - \setrow{3}{5,4,2,3,1} - \setrow{2}{1,2,4,5,3} - \setrow{1}{3,5,1,2,4} - \begin{puzzlebackground} - \fillarea{Wheat}{\tikzpath{1}{1}{8,6,8,6,6,2,2,4,4,4}} - \fillarea{HotPink!30}{\tikzpath{1}{2}{8,8,8,8,6,6,2,4,2,2,2,4}} - \fillarea{GreenYellow}{\tikzpath{2}{3}{8,8,6,2,6,6,2,2,4,8,4,4}} - \fillarea{LightBlue}{\tikzpath{3}{4}{8,8,6,6,6,2,4,2,4,4}} - \fillarea{LightYellow}{\tikzpath{4}{1}{8,6,8,8,8,6,2,2,2,2,4,4}} - \end{puzzlebackground} - \end{chaossudoku} -\end{center} - -\begin{lstlisting} -\begin{center} - \begin{chaossudoku} - \chaossudokucell{1}{1}{3} - \chaossudokucell{1}{5}{4} - \chaossudokucell{3}{2}{4} - \chaossudokucell{4}{2}{5} - \chaossudokucell{5}{5}{2} - \begin{puzzlebackground} - \fillarea{Wheat}{(1,1)--(1,2)--(2,2)--(2,3)--(4,3)--(4,1) - --(1,1)} - \fillarea{HotPink!30}{(1,2)--(1,6)--(3,6)--(3,5)--(2,5) - --(2,2)--(1,2)} - \fillarea{GreenYellow}{(2,3)--(2,5)--(3,5)--(3,4)--(5,4) - --(5,2)--(4,2)--(4,3)--(2,3)} - \fillarea{LightBlue}{(3,4)--(3,6)--(6,6)--(6,5)--(5,5) - --(5,4)--(3,4)} - \fillarea{LightYellow}{(4,1)--(4,2)--(5,2)--(5,5)--(6,5) - --(6,1)--(4,1)} - \end{puzzlebackground} - \end{chaossudoku} - \hspace{1.5cm} - \begin{chaossudoku} - \setrow{5}{4,3,5,1,2} - \setrow{4}{2,1,3,4,5} - \setrow{3}{5,4,2,3,1} - \setrow{2}{1,2,4,5,3} - \setrow{1}{3,5,1,2,4} - \begin{puzzlebackground} - \fillarea{Wheat}{(1,1)--(1,2)--(2,2)--(2,3)--(4,3)--(4,1) - --(1,1)} - \fillarea{HotPink!30}{(1,2)--(1,6)--(3,6)--(3,5)--(2,5) - --(2,2)--(1,2)} - \fillarea{GreenYellow}{(2,3)--(2,5)--(3,5)--(3,4)--(5,4) - --(5,2)--(4,2)--(4,3)--(2,3)} - \fillarea{LightBlue}{(3,4)--(3,6)--(6,6)--(6,5)--(5,5) - --(5,4)--(3,4)} - \fillarea{LightYellow}{(4,1)--(4,2)--(5,2)--(5,5)--(6,5) - --(6,1)--(4,1)} - \end{puzzlebackground} - \end{chaossudoku} -\end{center} -\end{lstlisting} - -\subsubsection{Options} -\begin{optionlist} - \optitem{\envoption{rows}}{5}{defines the number of rows in the grid.} - \optitem{\envoption{columns}}{5}{specifies the number of columns in the grid} - \optitem{\envoption{width}}{5.1cm}{sets the width of the minipage, in which the grid is typeset.} - \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage.} - \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}} - \optitem{\envoption{title}}{}{sets the title of a puzzle.} - \optitem{\envoption{titleindent}}{0cm}{defines the indent of the title.} - \optitem{\envoption{titlewidth}}{5.1cm}{specifies the width of the box the title is set in.} - \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.} - \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right} - \optitem{\envoption{cvoffset}}{-23pt}{sets the vertical offset of the counters in the margin.} -\end{optionlist} - -\subsection{Hakyuu} -Fill the cells of an area with numbers from 1 to SIZE of the area. If there are two cells with the same number N in a row or a column, there must be at least N cells between those two cells. -\subsubsection{Example} -\begin{center} - \begin{hakyuu} - \hakyuucell{1}{5}{2} - \hakyuucell{3}{5}{6} - \hakyuucell{4}{5}{5} - \hakyuucell{4}{4}{4} - \hakyuucell{1}{3}{3} - \hakyuucell{2}{2}{2} - \hakyuucell{5}{2}{5} - \hakyuucell{4}{1}{1} - \begin{puzzlebackground} - \fillarea{Wheat}{(1,1)--(1,4)--(2,4)--(2,1)--(1,1)} - \fillarea{HotPink!30}{(1,4)--(1,6)--(6,6)--(6,5)--(3,5)--(3,4)--(1,4)} - \fillarea{GreenYellow}{(2,4)--(3,4)--(3,5)--(5,5)--(5,4)--(4,4)--(4,3)--(2,3)--(2,4)} - \fillarea{LightBlue}{(5,5)--(6,5)--(6,3)--(4,3)--(4,4)--(5,4)--(5,5)} - \fillarea{LightSalmon!50}{(2,2)--(2,3)--(5,3)--(5,2)--(2,2)} - \fillarea{LightYellow}{(2,1)--(2,2)--(5,2)--(5,3)--(6,3)--(6,1)--(2,1)} - \end{puzzlebackground} - \end{hakyuu} - \hspace{1.5cm} - \begin{hakyuu} - \setrow{5}{2,3,6,5,4} - \setrow{4}{1,7,3,4,2} - \setrow{3}{3,1,2,1,3} - \setrow{2}{1,2,1,3,5} - \setrow{1}{2,3,4,1,2} - \begin{puzzlebackground} - \fillarea{Wheat}{(1,1)--(1,4)--(2,4)--(2,1)--(1,1)} - \fillarea{HotPink!30}{(1,4)--(1,6)--(6,6)--(6,5)--(3,5)--(3,4)--(1,4)} - \fillarea{GreenYellow}{(2,4)--(3,4)--(3,5)--(5,5)--(5,4)--(4,4)--(4,3)--(2,3)--(2,4)} - \fillarea{LightBlue}{(5,5)--(6,5)--(6,3)--(4,3)--(4,4)--(5,4)--(5,5)} - \fillarea{LightSalmon!50}{(2,2)--(2,3)--(5,3)--(5,2)--(2,2)} - \fillarea{LightYellow}{(2,1)--(2,2)--(5,2)--(5,3)--(6,3)--(6,1)--(2,1)} - \end{puzzlebackground} - \end{hakyuu} -\end{center} - -\begin{lstlisting} -\begin{center} - \begin{hakyuu} - \hakyuucell{1}{5}{2} - \hakyuucell{3}{5}{6} - \hakyuucell{4}{5}{5} - \hakyuucell{4}{4}{4} - \hakyuucell{1}{3}{3} - \hakyuucell{2}{2}{2} - \hakyuucell{5}{2}{5} - \hakyuucell{4}{1}{1} - \begin{puzzlebackground} - \fillarea{Wheat}{(1,1)--(1,4)--(2,4)--(2,1)--(1,1)} - \fillarea{HotPink!30}{(1,4)--(1,6)--(6,6)--(6,5)--(3,5) - --(3,4)--(1,4)} - \fillarea{GreenYellow}{(2,4)--(3,4)--(3,5)--(5,5)--(5,4) - --(4,4)--(4,3)--(2,3)--(2,4)} - \fillarea{LightBlue}{(5,5)--(6,5)--(6,3)--(4,3)--(4,4) - --(5,4)--(5,5)} - \fillarea{LightSalmon!50}{(2,2)--(2,3)--(5,3)--(5,2) - --(2,2)} - \fillarea{LightYellow}{(2,1)--(2,2)--(5,2)--(5,3)--(6,3) - --(6,1)--(2,1)} - \end{puzzlebackground} - \end{hakyuu} - \hspace{1.5cm} - \begin{hakyuu} - \setrow{5}{2,3,6,5,4} - \setrow{4}{1,7,3,4,2} - \setrow{3}{3,1,2,1,3} - \setrow{2}{1,2,1,3,5} - \setrow{1}{2,3,4,1,2} - \begin{puzzlebackground} - \fillarea{Wheat}{(1,1)--(1,4)--(2,4)--(2,1)--(1,1)} - \fillarea{HotPink!30}{(1,4)--(1,6)--(6,6)--(6,5)--(3,5) - --(3,4)--(1,4)} - \fillarea{GreenYellow}{(2,4)--(3,4)--(3,5)--(5,5)--(5,4) - --(4,4)--(4,3)--(2,3)--(2,4)} - \fillarea{LightBlue}{(5,5)--(6,5)--(6,3)--(4,3)--(4,4) - --(5,4)--(5,5)} - \fillarea{LightSalmon!50}{(2,2)--(2,3)--(5,3)--(5,2) - --(2,2)} - \fillarea{LightYellow}{(2,1)--(2,2)--(5,2)--(5,3)--(6,3) - --(6,1)--(2,1)} - \end{puzzlebackground} - \end{hakyuu} -\end{center} -\end{lstlisting} - -\subsubsection{Options} -\begin{optionlist} - \optitem{\envoption{rows}}{5}{defines the number of rows in the grid.} - \optitem{\envoption{columns}}{5}{specifies the number of columns in the grid} - \optitem{\envoption{width}}{5.1cm}{sets the width of the minipage, in which the grid is typeset.} - \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage.} - \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}} - \optitem{\envoption{title}}{}{sets the title of a puzzle.} - \optitem{\envoption{titleindent}}{0cm}{defines the indent of the title.} - \optitem{\envoption{titlewidth}}{5.1cm}{specifies the width of the box the title is set in.} - \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.} - \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right} - \optitem{\envoption{cvoffset}}{-23pt}{sets the vertical offset of the counters in the margin.} -\end{optionlist} - -\subsection{Hitori} -Black out some cells according to these specifications: In each row and each column a number may only occur once or can be completely blackened. The blackened cells can touch neither horizontal nor vertical. All non blackened cells must remain connected. Each number has its own color, which otherwise has no meaning. -\subsubsection{Example} -\begin{center} - \begin{hitori} - \framepuzzle - \setcolorrow{5}{2,4,2,1,1} - \setcolorrow{4}{1,3,2,4,1} - \setcolorrow{3}{1,3,3,3,2} - \setcolorrow{2}{4,2,1,3,3} - \setcolorrow{1}{4,1,2,2,3} - \end{hitori} - \hspace{1.5cm} - \begin{hitori} - \framepuzzle - \setcolorrow{5}{2,4,0,1,0} - \setcolorrow{4}{0,3,2,4,1} - \setcolorrow{3}{1,0,3,0,2} - \setcolorrow{2}{4,2,1,3,0} - \setcolorrow{1}{0,1,0,2,3} - \end{hitori} -\end{center} - -\begin{lstlisting} -\begin{center} - \begin{hitori} - \framepuzzle - \setcolorrow{5}{2,4,2,1,1} - \setcolorrow{4}{1,3,2,4,1} - \setcolorrow{3}{1,3,3,3,2} - \setcolorrow{2}{4,2,1,3,3} - \setcolorrow{1}{4,1,2,2,3} - \end{hitori} - \hspace{1.5cm} - \begin{hitori} - \framepuzzle - \setcolorrow{5}{2,4,0,1,0} - \setcolorrow{4}{0,3,2,4,1} - \setcolorrow{3}{1,0,3,0,2} - \setcolorrow{2}{4,2,1,3,0} - \setcolorrow{1}{0,1,0,2,3} - \end{hitori} -\end{center} -\end{lstlisting} - -\subsubsection{Options} -\begin{optionlist} - \optitem{\envoption{rows}}{5}{defines the number of rows in the grid.} - \optitem{\envoption{columns}}{5}{specifies the number of columns in the grid} - \optitem{\envoption{width}}{5.1cm}{sets the width of the minipage, in which the grid is typeset.} - \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage.} - \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}} - \optitem{\envoption{title}}{}{sets the title of a puzzle.} - \optitem{\envoption{titleindent}}{0cm}{defines the indent of the title.} - \optitem{\envoption{titlewidth}}{5.1cm}{specifies the width of the box the title is set in.} - \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.} - \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right} - \optitem{\envoption{cvoffset}}{-23pt}{sets the vertical offset of the counters in the margin.} -\end{optionlist} - -\subsection{Kendoku} -Fill the cells with the numbers from 1 to SIZE of the puzzle. In the top left corner of a framed area, you will find the result of the specified arithmetic function, which is applied on the entered numbers. The numbers may occur only once in each row and column. The numbers of an area may not necessarily be different when they are in different rows or columns. -\subsubsection{Example} -\begin{center} - \begin{kendoku} - \framearea{black}{\tikzpath{1}{1}{8,8,6,2,6,2,4,4}} - \framearea{black}{\tikzpath{1}{3}{8,6,2,4}} - \framearea{black}{\tikzpath{1}{4}{8,8,6,2,2,4}} - \framearea{black}{\tikzpath{2}{2}{8,8,6,6,2,4,2,4}} - \framearea{black}{\tikzpath{2}{4}{8,8,6,2,2,4}} - \framearea{black}{\tikzpath{3}{1}{8,8,6,2,2,4}} - \framearea{black}{\tikzpath{3}{4}{8,8,6,6,2,4,2,4}} - \framearea{black}{\tikzpath{4}{1}{8,6,6,2,4,4}} - \framearea{black}{\tikzpath{4}{2}{8,6,6,2,4,4}} - \framearea{black}{\tikzpath{4}{3}{8,8,6,2,2,4}} - \framearea{black}{\tikzpath{5}{3}{8,6,2,4}} - \framearea{black}{\tikzpath{5}{4}{8,6,2,4}} - \framearea{black}{\tikzpath{5}{5}{8,6,2,4}} - \setrule{1}{2}{8\times} - \setrule{1}{3}{5} - \setrule{1}{5}{4+} - \setrule{2}{3}{60\times} - \setrule{2}{5}{2\div} - \setrule{3}{2}{2-} - \setrule{3}{5}{75\times} - \setrule{4}{1}{8+} - \setrule{4}{2}{1-} - \setrule{4}{4}{2\times} - \setrule{5}{3}{1} - \setrule{5}{5}{2} - \end{kendoku} - \hspace{1.5cm} - \begin{kendoku} - \framearea{black}{\tikzpath{1}{1}{8,8,6,2,6,2,4,4}} - \framearea{black}{\tikzpath{1}{3}{8,6,2,4}} - \framearea{black}{\tikzpath{1}{4}{8,8,6,2,2,4}} - \framearea{black}{\tikzpath{2}{2}{8,8,6,6,2,4,2,4}} - \framearea{black}{\tikzpath{2}{4}{8,8,6,2,2,4}} - \framearea{black}{\tikzpath{3}{1}{8,8,6,2,2,4}} - \framearea{black}{\tikzpath{3}{4}{8,8,6,6,2,4,2,4}} - \framearea{black}{\tikzpath{4}{1}{8,6,6,2,4,4}} - \framearea{black}{\tikzpath{4}{2}{8,6,6,2,4,4}} - \framearea{black}{\tikzpath{4}{3}{8,8,6,2,2,4}} - \framearea{black}{\tikzpath{5}{3}{8,6,2,4}} - \framearea{black}{\tikzpath{5}{4}{8,6,2,4}} - \framearea{black}{\tikzpath{5}{5}{8,6,2,4}} - \setrule{1}{2}{8\times} - \setrule{1}{3}{5} - \setrule{1}{5}{4+} - \setrule{2}{3}{60\times} - \setrule{2}{5}{2\div} - \setrule{3}{2}{2-} - \setrule{3}{5}{75\times} - \setrule{4}{1}{8+} - \setrule{4}{2}{1-} - \setrule{4}{4}{2\times} - \setrule{5}{3}{1} - \setrule{5}{5}{2} - \setrow{5}{1,4,3,5,2} - \setrow{4}{3,2,5,1,4} - \setrow{3}{5,3,4,2,1} - \setrow{2}{2,5,1,4,3} - \setrow{1}{4,1,2,3,5} - \end{kendoku} -\end{center} - -\begin{lstlisting} -\begin{center} - \begin{kendoku} - \framearea{black}{\tikzpath{1}{1}{8,8,6,2,6,2,4,4}} - \framearea{black}{\tikzpath{1}{3}{8,6,2,4}} - \framearea{black}{\tikzpath{1}{4}{8,8,6,2,2,4}} - \framearea{black}{\tikzpath{2}{2}{8,8,6,6,2,4,2,4}} - \framearea{black}{\tikzpath{2}{4}{8,8,6,2,2,4}} - \framearea{black}{\tikzpath{3}{1}{8,8,6,2,2,4}} - \framearea{black}{\tikzpath{3}{4}{8,8,6,6,2,4,2,4}} - \framearea{black}{\tikzpath{4}{1}{8,6,6,2,4,4}} - \framearea{black}{\tikzpath{4}{2}{8,6,6,2,4,4}} - \framearea{black}{\tikzpath{4}{3}{8,8,6,2,2,4}} - \framearea{black}{\tikzpath{5}{3}{8,6,2,4}} - \framearea{black}{\tikzpath{5}{4}{8,6,2,4}} - \framearea{black}{\tikzpath{5}{5}{8,6,2,4}} - \setrule{1}{2}{8\times} - \setrule{1}{3}{5} - \setrule{1}{5}{4+} - \setrule{2}{3}{60\times} - \setrule{2}{5}{2\div} - \setrule{3}{2}{2-} - \setrule{3}{5}{75\times} - \setrule{4}{1}{8+} - \setrule{4}{2}{1-} - \setrule{4}{4}{2\times} - \setrule{5}{3}{1} - \setrule{5}{5}{2} - \end{kendoku} - \hspace{1.5cm} - \begin{kendoku} - \framearea{black}{\tikzpath{1}{1}{8,8,6,2,6,2,4,4}} - \framearea{black}{\tikzpath{1}{3}{8,6,2,4}} - \framearea{black}{\tikzpath{1}{4}{8,8,6,2,2,4}} - \framearea{black}{\tikzpath{2}{2}{8,8,6,6,2,4,2,4}} - \framearea{black}{\tikzpath{2}{4}{8,8,6,2,2,4}} - \framearea{black}{\tikzpath{3}{1}{8,8,6,2,2,4}} - \framearea{black}{\tikzpath{3}{4}{8,8,6,6,2,4,2,4}} - \framearea{black}{\tikzpath{4}{1}{8,6,6,2,4,4}} - \framearea{black}{\tikzpath{4}{2}{8,6,6,2,4,4}} - \framearea{black}{\tikzpath{4}{3}{8,8,6,2,2,4}} - \framearea{black}{\tikzpath{5}{3}{8,6,2,4}} - \framearea{black}{\tikzpath{5}{4}{8,6,2,4}} - \framearea{black}{\tikzpath{5}{5}{8,6,2,4}} - \setrule{1}{2}{8\times} - \setrule{1}{3}{5} - \setrule{1}{5}{4+} - \setrule{2}{3}{60\times} - \setrule{2}{5}{2\div} - \setrule{3}{2}{2-} - \setrule{3}{5}{75\times} - \setrule{4}{1}{8+} - \setrule{4}{2}{1-} - \setrule{4}{4}{2\times} - \setrule{5}{3}{1} - \setrule{5}{5}{2} - \setrow{5}{1,4,3,5,2} - \setrow{4}{3,2,5,1,4} - \setrow{3}{5,3,4,2,1} - \setrow{2}{2,5,1,4,3} - \setrow{1}{4,1,2,3,5} - \end{kendoku} -\end{center} -\end{lstlisting} - -\subsubsection{Options} -\begin{optionlist} - \optitem{\envoption{rows}}{5}{defines the number of rows in the grid.} - \optitem{\envoption{columns}}{5}{specifies the number of columns in the grid} - \optitem{\envoption{width}}{5.1cm}{sets the width of the minipage, in which the grid is typeset.} - \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage.} - \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}} - \optitem{\envoption{title}}{}{sets the title of a puzzle.} - \optitem{\envoption{titleindent}}{0cm}{defines the indent of the title.} - \optitem{\envoption{titlewidth}}{5.1cm}{specifies the width of the box the title is set in.} - \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.} - \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right} - \optitem{\envoption{cvoffset}}{-23pt}{sets the vertical offset of the counters in the margin.} -\end{optionlist} - -\subsection{Killer Sudoku} -Fill the cells with the numbers from 1 to SIZE of the puzzle. The numbers may occur only once in each row, column and colored area if specified. In the top left corner of a framed area, you will find the sum of the entered numbers. The numbers of an area may not necessarily be different, when they are in different rows or columns. But they must be different, when additional colored areas are specified. -\subsubsection{Example} -\begin{center} - \begin{killersudoku}[columns=4,rows=4,scale=1.11] - \framearea{black}{\tikzpath{1}{1}{8,8,6,6,2,4,2,4}} - \framearea{black}{\tikzpath{1}{3}{8,8,6,2,2,4}} - \framearea{black}{\tikzpath{2}{1}{8,6,6,6,2,4,4,4}} - \framearea{black}{\tikzpath{2}{3}{8,8,6,2,6,2,4,4}} - \framearea{black}{\tikzpath{3}{2}{8,6,8,6,2,2,4,4}} - \framearea{black}{\tikzpath{3}{4}{8,6,6,2,4,4}} - \begin{puzzlebackground} - \colorarea{orange!20}{\tikzpath{1}{1}{8,8,6,6,2,2,4,4}} - \colorarea{orange!20}{\tikzpath{3}{3}{8,8,6,6,2,2,4,4}} - \end{puzzlebackground} - \setrule{1}{2}{7} - \setrule{1}{4}{7} - \setrule{2}{1}{9} - \setrule{2}{4}{6} - \setrule{3}{4}{5} - \setrule{4}{3}{6} - \end{killersudoku} - \hspace{1.5cm} - \begin{killersudoku}[columns=4,rows=4,scale=1.11] - \framearea{black}{\tikzpath{1}{1}{8,8,6,6,2,4,2,4}} - \framearea{black}{\tikzpath{1}{3}{8,8,6,2,2,4}} - \framearea{black}{\tikzpath{2}{1}{8,6,6,6,2,4,4,4}} - \framearea{black}{\tikzpath{2}{3}{8,8,6,2,6,2,4,4}} - \framearea{black}{\tikzpath{3}{2}{8,6,8,6,2,2,4,4}} - \framearea{black}{\tikzpath{3}{4}{8,6,6,2,4,4}} - \begin{puzzlebackground} - \colorarea{orange!20}{\tikzpath{1}{1}{8,8,6,6,2,2,4,4}} - \colorarea{orange!20}{\tikzpath{3}{3}{8,8,6,6,2,2,4,4}} - \end{puzzlebackground} - \setrule{1}{2}{7} - \setrule{1}{4}{7} - \setrule{2}{1}{9} - \setrule{2}{4}{6} - \setrule{3}{4}{5} - \setrule{4}{3}{6} - \setrow{4}{3,2,4,1} - \setrow{3}{4,1,3,2} - \setrow{2}{2,4,1,3} - \setrow{1}{1,3,2,4} - \end{killersudoku} -\end{center} - -\begin{lstlisting} -\begin{killersudoku} - \framearea{black}{\tikzpath{1}{1}{8,8,6,6,2,4,2,4}} - \framearea{black}{\tikzpath{1}{3}{8,8,6,2,2,4}} - \framearea{black}{\tikzpath{2}{1}{8,6,6,6,2,4,4,4}} - \framearea{black}{\tikzpath{2}{3}{8,8,6,2,6,2,4,4}} - \framearea{black}{\tikzpath{3}{2}{8,6,8,6,2,2,4,4}} - \framearea{black}{\tikzpath{3}{4}{8,6,6,2,4,4}} - \begin{puzzlebackground} - \colorarea{orange!20}{\tikzpath{1}{1}{8,8,6,6,2,2,4,4}} - \colorarea{orange!20}{\tikzpath{3}{3}{8,8,6,6,2,2,4,4}} - \end{puzzlebackground} - \setrule{1}{2}{7} - \setrule{1}{4}{7} - \setrule{2}{1}{9} - \setrule{2}{4}{6} - \setrule{3}{4}{5} - \setrule{4}{3}{6} - \end{killersudoku} - \hspace{1.5cm} - \begin{killersudoku} - \framearea{black}{\tikzpath{1}{1}{8,8,6,6,2,4,2,4}} - \framearea{black}{\tikzpath{1}{3}{8,8,6,2,2,4}} - \framearea{black}{\tikzpath{2}{1}{8,6,6,6,2,4,4,4}} - \framearea{black}{\tikzpath{2}{3}{8,8,6,2,6,2,4,4}} - \framearea{black}{\tikzpath{3}{2}{8,6,8,6,2,2,4,4}} - \framearea{black}{\tikzpath{3}{4}{8,6,6,2,4,4}} - \begin{puzzlebackground} - \colorarea{orange!20}{\tikzpath{1}{1}{8,8,6,6,2,2,4,4}} - \colorarea{orange!20}{\tikzpath{3}{3}{8,8,6,6,2,2,4,4}} - \end{puzzlebackground} - \setrule{1}{2}{7} - \setrule{1}{4}{7} - \setrule{2}{1}{9} - \setrule{2}{4}{6} - \setrule{3}{4}{5} - \setrule{4}{3}{6} - \setrow{4}{3,2,4,1} - \setrow{3}{4,1,3,2} - \setrow{2}{2,4,1,3} - \setrow{1}{1,3,2,4} - \end{killersudoku} -\end{lstlisting} - -\subsubsection{Options} -\begin{optionlist} - \optitem{\envoption{rows}}{5}{defines the number of rows in the grid.} - \optitem{\envoption{columns}}{5}{specifies the number of columns in the grid} - \optitem{\envoption{width}}{5.1cm}{sets the width of the minipage, in which the grid is typeset.} - \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage.} - \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}} - \optitem{\envoption{title}}{}{sets the title of a puzzle.} - \optitem{\envoption{titleindent}}{0cm}{defines the indent of the title.} - \optitem{\envoption{titlewidth}}{5.1cm}{specifies the width of the box the title is set in.} - \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.} - \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right} - \optitem{\envoption{cvoffset}}{-23pt}{sets the vertical offset of the counters in the margin.} -\end{optionlist} - -\subsection{Laser Beam} -Draw a laser beam in each grid according to the following guidelines. The beam has to enter or to leave the grid at the arrows. At each intersection, a mirror, on which the laser beam must reflect on one side, can be placed horizontally or vertically. The other side must not be touched by the beam. All locations where the laser crosses are given. The numbers to the left and above the grid indicate how many cells are traversed by the beam in the corresponding row or column. The numbers to the right and below reveal, how many mirrors are found in the intersection of the corresponding row or column. -\subsubsection{Example} -\begin{center} - \begin{laserbeam} - \laserV{1} - \laserH{{}} - \mirrorH{{},2} - \mirrorV{{},{},{},{},{},2} - \framepuzzle[LP@c@mirror] - \placearrow{3}{1}{LeftUp} - \placearrow{6}{4}{RightUp} - \placecross{3}{3} - \end{laserbeam} - \hspace{1.5cm} - \begin{laserbeam} - \laserV{1} - \laserH{{}} - \mirrorH{{},2} - \mirrorV{{},{},{},{},{},2} - \framepuzzle[LP@c@mirror] - \placearrow{3}{1}{LeftUp} - \placearrow{6}{4}{RightUp} - \placecross{3}{3} - \placemirror{2}{2}{V} - \placemirror{4}{2}{H} - \placemirror{5}{5}{V} - \placemirror{3}{5}{H} - \begin{puzzlebackground} - \laser{\tikzpath{3}{1}{7,9,9,9,7,1,7,1,3,3,3,9,9}} - \end{puzzlebackground} - \end{laserbeam} -\end{center} - -\begin{lstlisting} -\begin{center} - \begin{laserbeam} - \laserV{1} - \laserH{{}} - \mirrorH{{},2} - \mirrorV{{},{},{},{},{},2} - \framepuzzle[LP@c@mirror] - \placearrow{3}{1}{LeftUp} - \placearrow{6}{4}{RightUp} - \placecross{3}{3} - \end{laserbeam} - \hspace{1cm} - \begin{laserbeam} - \laserV{1} - \laserH{{}} - \mirrorH{{},2} - \mirrorV{{},{},{},{},{},2} - \framepuzzle[LP@c@mirror] - \placearrow{3}{1}{LeftUp} - \placearrow{6}{4}{RightUp} - \placecross{3}{3} - \placemirror{2}{2}{V} - \placemirror{4}{2}{H} - \placemirror{5}{5}{V} - \placemirror{3}{5}{H} - \begin{puzzlebackground} - \laser{\tikzpath{3}{1}{7,9,9,9,7,1,7,1,3,3,3,9,9}} - \end{puzzlebackground} - \end{laserbeam} -\end{center} -\end{lstlisting} - -\subsubsection{Options} -\begin{optionlist} - \optitem{\envoption{rows}}{5}{defines the number of rows in the grid.} - \optitem{\envoption{columns}}{5}{specifies the number of columns in the grid} - \optitem{\envoption{width}}{6.5cm}{sets the width of the minipage, in which the grid is typeset.} - \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage.} - \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}} - \optitem{\envoption{title}}{}{sets the title of a puzzle.} - \optitem{\envoption{titleindent}}{0cm}{defines the indent of the title.} - \optitem{\envoption{titlewidth}}{6.5cm}{specifies the width of the box the title is set in.} - \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.} - \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right} - \optitem{\envoption{cvoffset}}{-38pt}{sets the vertical offset of the counters in the margin.} -\end{optionlist} - -\subsection{Minesweeper} -Draw a mine in some cells of the grid. The number in a cell indicates how many of the eight neighboring cells contain a mine. A numbered cell does not contain a mine. -\subsubsection{Example} -\begin{center} - \begin{minesweeper} - \framepuzzle - \setrow{5}{{},1} - \setrow{4}{{},{},3,3} - \setrow{3}{3,{},4,2} - \setrow{2}{{},{},{},{},0} - \setrow{1}{{},2} - \end{minesweeper} - \hspace{1.5cm} - \begin{minesweeper} - \framepuzzle - \setrow{5}{{},1,{},\Mine,\Mine} - \setrow{4}{{},\Mine,3,3,\Mine} - \setrow{3}{3,\Mine,4,2} - \setrow{2}{{},\Mine,\Mine,{},0} - \setrow{1}{{},2} - \end{minesweeper} -\end{center} -\begin{lstlisting} -\begin{center} - \begin{minesweeper} - \framepuzzle - \setrow{5}{{},1} - \setrow{4}{{},{},3,3} - \setrow{3}{3,{},4,2} - \setrow{2}{{},{},{},{},0} - \setrow{1}{{},2} - \end{minesweeper} - \hspace{1.5cm} - \begin{minesweeper} - \framepuzzle - \setrow{5}{{},1,{},\Mine,\Mine} - \setrow{4}{{},\Mine,3,3,\Mine} - \setrow{3}{3,\Mine,4,2} - \setrow{2}{{},\Mine,\Mine,{},0} - \setrow{1}{{},2} - \end{minesweeper} -\end{center} -\end{lstlisting} - -\subsubsection{Options} -\begin{optionlist} - \optitem{\envoption{rows}}{5}{defines the number of rows in the grid.} - \optitem{\envoption{columns}}{5}{specifies the number of columns in the grid} - \optitem{\envoption{width}}{5.1cm}{sets the width of the minipage, in which the grid is typeset.} - \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage.} - \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}} - \optitem{\envoption{title}}{}{sets the title of a puzzle.} - \optitem{\envoption{titleindent}}{0cm}{defines the indent of the title.} - \optitem{\envoption{titlewidth}}{5.1cm}{specifies the width of the box the title is set in.} - \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.} - \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right} - \optitem{\envoption{cvoffset}}{-23pt}{sets the vertical offset of the counters in the margin.} -\end{optionlist} - -\subsection{Skyline} -There are skyscrapers located in each cell. Try to find out the height of the skyscraper in the respective cell. There are heights of 1 to MAX in every row, every column, and in each of the two diagonals if indicated. Some cells may be empty (parks). The numbers around the grid indicate how many buildings you can see from this position when you look at the skyscraper lineup. Bear in mind that only those skyscrapers are visible which are higher than the ones in front. -\subsubsection{Example} -\begin{center} - \begin{skyline} - \skylineB{3,{},3,1,{}} - \skylineL{{},4,3,{},{}} - \skylineT{{},{},2,{},3} - \skylineR{{},1,3,{},{}} - \skylinecell{1}{3}{2} - \skylinecell{4}{2}{3} - \end{skyline} - \hspace{1cm} - \begin{skyline} - \skylineB{3,{},3,1,{}} - \skylineL{{},4,3,{},{}} - \skylineT{{},{},2,{},3} - \skylineR{{},1,3,{},{}} - \setrow{5}{5,4,3,1,2} - \setrow{4}{4,5,1,2,3} - \setrow{3}{2,3,5,4,1} - \setrow{2}{1,2,4,3,5} - \setrow{1}{3,1,2,5,4} - \end{skyline} -\end{center} - -\begin{lstlisting} -\begin{center} - \begin{skyline} - \skylineB{3,{},3,1,{}} - \skylineL{{},4,3,{},{}} - \skylineT{{},{},2,{},3} - \skylineR{{},1,3,{},{}} - \skylinecell{1}{3}{2} - \skylinecell{4}{2}{3} - \end{skyline} - \hspace{1cm} - \begin{skyline} - \skylineB{3,{},3,1,{}} - \skylineL{{},4,3,{},{}} - \skylineT{{},{},2,{},3} - \skylineR{{},1,3,{},{}} - \setrow{5}{5,4,3,1,2} - \setrow{4}{4,5,1,2,3} - \setrow{3}{2,3,5,4,1} - \setrow{2}{1,2,4,3,5} - \setrow{1}{3,1,2,5,4} - \end{skyline} -\end{center} -\end{lstlisting} - -\paragraph{Variants} -\subparagraph{Skyline Sudoku} -\begin{center} - \begin{skyline}[sudoku,scale=.4] - \skylineB{4,5,2,5,2,1,2,4,3} - \skylineL{4,2,2,2,1,3,3,3,2} - \skylineT{4,1,3,2,3,5,3,2,3} - \skylineR{3,3,1,3,4,2,3,2,4} - \setrow{9}{{},{},{},8,{},{},{},7} - \setrow{8}{{},{},4,{},{},6,{},{},8} - \setrow{7}{{},2,{},7,{},{},{},{},1} - \setrow{6}{{},{},{},{},8,2} - \setrow{5}{{},{},2,{},4,{},7} - \setrow{4}{{},{},{},3,{},{},4} - \setrow{3}{{},{},{},{},1} - \setrow{2}{{},3,{},{},{},{},1,2} - \setrow{1}{{},{},5} - \end{skyline} - \hspace{1cm} - \begin{skyline}[sudoku,scale=.4] - \skylineB{4,5,2,5,2,1,2,4,3} - \skylineL{4,2,2,2,1,3,3,3,2} - \skylineT{4,1,3,2,3,5,3,2,3} - \skylineR{3,3,1,3,4,2,3,2,4} - \setrow{9}{3,9,6,8,5,1,2,7,4} - \setrow{8}{1,7,4,9,2,6,3,5,8} - \setrow{7}{5,2,8,7,3,4,9,6,1} - \setrow{6}{7,4,3,1,8,2,6,9,5} - \setrow{5}{9,8,2,6,4,5,7,1,3} - \setrow{4}{6,5,1,3,9,7,4,8,2} - \setrow{3}{8,6,7,2,1,3,5,4,9} - \setrow{2}{4,3,9,5,6,8,1,2,7} - \setrow{1}{2,1,5,4,7,9,8,3,6} - \end{skyline} -\end{center} - -\begin{lstlisting} -\begin{center} - \begin{skyline}[sudoku,scale=.4] - \skylineB{4,5,2,5,2,1,2,4,3} - \skylineL{4,2,2,2,1,3,3,3,2} - \skylineT{4,1,3,2,3,5,3,2,3} - \skylineR{3,3,1,3,4,2,3,2,4} - \setrow{9}{{},{},{},8,{},{},{},7} - \setrow{8}{{},{},4,{},{},6,{},{},8} - \setrow{7}{{},2,{},7,{},{},{},{},1} - \setrow{6}{{},{},{},{},8,2} - \setrow{5}{{},{},2,{},4,{},7} - \setrow{4}{{},{},{},3,{},{},4} - \setrow{3}{{},{},{},{},1} - \setrow{2}{{},3,{},{},{},{},1,2} - \setrow{1}{{},{},5} - \end{skyline} - \hspace{1cm} - \begin{skyline}[sudoku,scale=.4] - \skylineB{4,5,2,5,2,1,2,4,3} - \skylineL{4,2,2,2,1,3,3,3,2} - \skylineT{4,1,3,2,3,5,3,2,3} - \skylineR{3,3,1,3,4,2,3,2,4} - \setrow{9}{3,9,6,8,5,1,2,7,4} - \setrow{8}{1,7,4,9,2,6,3,5,8} - \setrow{7}{5,2,8,7,3,4,9,6,1} - \setrow{6}{7,4,3,1,8,2,6,9,5} - \setrow{5}{9,8,2,6,4,5,7,1,3} - \setrow{4}{6,5,1,3,9,7,4,8,2} - \setrow{3}{8,6,7,2,1,3,5,4,9} - \setrow{2}{4,3,9,5,6,8,1,2,7} - \setrow{1}{2,1,5,4,7,9,8,3,6} - \end{skyline} -\end{center} -\end{lstlisting} - -\subparagraph{Skyline Sudoku (N*N)} -\begin{center} - \begin{skyline}[rows=6,columns=6,scale=.58] - \skylineB{4,2,1,3,3,2} - \skylineL{3,3,4,3,2,1} - \skylineT{1,2,3,3,2,4} - \skylineR{4,1,2,2,2,3} - \skylinecell{2}{4}{1} - \skylinecell{4}{1}{4} - \skylinecell{5}{2}{3} - \begin{puzzlebackground} - \fillarea{Wheat}{(1,1)--(1,3)--(4,3)--(4,1)--(1,1)} - \fillarea{HotPink!30}{(1,3)--(1,7)--(4,7)--(4,6)--(2,6) - --(2,3)--(1,3)} - \fillarea{GreenYellow}{(2,3)--(2,6)--(4,6)--(4,3)--(2,3)} - \fillarea{LightBlue}{(4,1)--(7,1)--(7,5)--(6,5)--(6,2) - --(4,2)--(4,1)} - \fillarea{LightSalmon!50}{(4,7)--(4,4)--(5,4)--(5,6)--(6,6) - --(6,5)--(7,5)--(7,7)--(4,7)} - \fillarea{LightYellow}{(4,2)--(4,4)--(5,4)--(5,6)--(6,6) - --(6,2)--(4,2)} - \end{puzzlebackground} - \end{skyline} - \hspace{1cm} - \begin{skyline}[rows=6,columns=6,scale=.58] - \skylineB{4,2,1,3,3,2} - \skylineL{3,3,4,3,2,1} - \skylineT{1,2,3,3,2,4} - \skylineR{4,1,2,2,2,3} - \setrow{6}{6,3,4,1,5,2} - \setrow{5}{5,6,2,3,1,4} - \setrow{4}{2,1,3,6,4,5} - \setrow{3}{1,4,5,2,6,3} - \setrow{2}{4,2,1,5,3,6} - \setrow{1}{3,5,6,4,2,1} - \begin{puzzlebackground} - \fillarea{Wheat}{(1,1)--(1,3)--(4,3)--(4,1)--(1,1)} - \fillarea{HotPink!30}{(1,3)--(1,7)--(4,7)--(4,6)--(2,6) - --(2,3)--(1,3)} - \fillarea{GreenYellow}{(2,3)--(2,6)--(4,6)--(4,3)--(2,3)} - \fillarea{LightBlue}{(4,1)--(7,1)--(7,5)--(6,5)--(6,2) - --(4,2)--(4,1)} - \fillarea{LightSalmon!50}{(4,7)--(4,4)--(5,4)--(5,6)--(6,6) - --(6,5)--(7,5)--(7,7)--(4,7)} - \fillarea{LightYellow}{(4,2)--(4,4)--(5,4)--(5,6)--(6,6) - --(6,2)--(4,2)} - \end{puzzlebackground} - \end{skyline} -\end{center} - -\begin{lstlisting} -\begin{center} - \begin{skyline}[rows=6,columns=6,scale=.58] - \skylineB{4,2,1,3,3,2} - \skylineL{3,3,4,3,2,1} - \skylineT{1,2,3,3,2,4} - \skylineR{4,1,2,2,2,3} - \skylinecell{2}{4}{1} - \skylinecell{4}{1}{4} - \skylinecell{5}{2}{3} - \begin{puzzlebackground} - \fillarea{Wheat}{(1,1)--(1,3)--(4,3)--(4,1)--(1,1)} - \fillarea{HotPink!30}{(1,3)--(1,7)--(4,7)--(4,6)--(2,6) - --(2,3)--(1,3)} - \fillarea{GreenYellow}{(2,3)--(2,6)--(4,6)--(4,3)--(2,3)} - \fillarea{LightBlue}{(4,1)--(7,1)--(7,5)--(6,5)--(6,2) - --(4,2)--(4,1)} - \fillarea{LightSalmon!50}{(4,7)--(4,4)--(5,4)--(5,6)--(6,6) - --(6,5)--(7,5)--(7,7)--(4,7)} - \fillarea{LightYellow}{(4,2)--(4,4)--(5,4)--(5,6)--(6,6) - --(6,2)--(4,2)} - \end{puzzlebackground} - \end{skyline} - \hspace{1cm} - \begin{skyline}[rows=6,columns=6,scale=.58] - \skylineB{4,2,1,3,3,2} - \skylineL{3,3,4,3,2,1} - \skylineT{1,2,3,3,2,4} - \skylineR{4,1,2,2,2,3} - \setrow{6}{6,3,4,1,5,2} - \setrow{5}{5,6,2,3,1,4} - \setrow{4}{2,1,3,6,4,5} - \setrow{3}{1,4,5,2,6,3} - \setrow{2}{4,2,1,5,3,6} - \setrow{1}{3,5,6,4,2,1} - \begin{puzzlebackground} - \fillarea{Wheat}{(1,1)--(1,3)--(4,3)--(4,1)--(1,1)} - \fillarea{HotPink!30}{(1,3)--(1,7)--(4,7)--(4,6)--(2,6) - --(2,3)--(1,3)} - \fillarea{GreenYellow}{(2,3)--(2,6)--(4,6)--(4,3)--(2,3)} - \fillarea{LightBlue}{(4,1)--(7,1)--(7,5)--(6,5)--(6,2) - --(4,2)--(4,1)} - \fillarea{LightSalmon!50}{(4,7)--(4,4)--(5,4)--(5,6)--(6,6) - --(6,5)--(7,5)--(7,7)--(4,7)} - \fillarea{LightYellow}{(4,2)--(4,4)--(5,4)--(5,6)--(6,6) - --(6,2)--(4,2)} - \end{puzzlebackground} - \end{skyline} -\end{center} -\end{lstlisting} - -\subsubsection{Options} -\begin{optionlist} - \optitem{\envoption{rows}}{5}{defines the number of rows in the grid.} - \optitem{\envoption{columns}}{5}{specifies the number of columns in the grid} - \optitem{\envoption{sudoku}}{false}{sets \envoption{rows} and \envoption{columns} to 9, in case of \LANGLE\textit{true}\RANGLE\ is specified. Additionally the classic Sudoku grid is drawn.} - \optitem{\envoption{width}}{6.7cm}{sets the width of the minipage, in which the grid is typeset.} - \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage.} - \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}} - \optitem{\envoption{title}}{}{sets the title of a puzzle.} - \optitem{\envoption{titleindent}}{0.75cm}{defines the indent of the title.} - \optitem{\envoption{titlewidth}}{5.85cm}{specifies the width of the box the title is set in.} - \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.} - \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right} - \optitem{\envoption{cvoffset}}{-38pt}{sets the vertical offset of the counters in the margin.} -\end{optionlist} - -\subsection{Slitherlink} -Draw a closed line into the grid. This line must be on the existing dashed lines, but do not have to go through all grid points. If numbers are present in the grid cells, they indicate how many sides of the cell are touched by the line. The line must not touch or cross itself. -\subsubsection{Example} -\begin{center} - \begin{slitherlink} - \setbigcell{1}{1}{4} - \slitherlinkcell{1}{3}{3} - \slitherlinkcell{3}{1}{3} - \slitherlinkcell{3}{3}{0} - \slitherlinkcell{3}{4}{3} - \slitherlinkcell{4}{4}{2} - \slitherlinkcell{5}{1}{0} - \slitherlinkcell{5}{2}{2} - \end{slitherlink} - \hspace{1.5cm} - \begin{slitherlink} - \setbigcell{1}{1}{4} - \slitherlinkcell{1}{3}{3} - \slitherlinkcell{3}{1}{3} - \slitherlinkcell{3}{3}{0} - \slitherlinkcell{3}{4}{3} - \slitherlinkcell{4}{4}{2} - \slitherlinkcell{5}{1}{0} - \slitherlinkcell{5}{2}{2} - \framearea{black}{\tikzpath{3}{1}{8,8,4,4,8,6,6,8,6,2,6,6,2,4,2,4,2,4}} - \end{slitherlink} -\end{center} - -\begin{lstlisting} -\begin{center} - \begin{slitherlink} - \setbigcell{1}{1}{4} - \slitherlinkcell{1}{3}{3} - \slitherlinkcell{3}{1}{3} - \slitherlinkcell{3}{3}{0} - \slitherlinkcell{3}{4}{3} - \slitherlinkcell{4}{4}{2} - \slitherlinkcell{5}{1}{0} - \slitherlinkcell{5}{2}{2} - \end{slitherlink} - \hspace{1.5cm} - \begin{slitherlink} - \setbigcell{1}{1}{4} - \slitherlinkcell{1}{3}{3} - \slitherlinkcell{3}{1}{3} - \slitherlinkcell{3}{3}{0} - \slitherlinkcell{3}{4}{3} - \slitherlinkcell{4}{4}{2} - \slitherlinkcell{5}{1}{0} - \slitherlinkcell{5}{2}{2} - \framearea{black}{\tikzpath{3}{1}{8,8,4,4,8,6,6,8,6,2, - 6,6,2,4,2,4,2,4}} - \end{slitherlink} -\end{center} -\end{lstlisting} - -\subsubsection{Options} -\begin{optionlist} - \optitem{\envoption{rows}}{5}{defines the number of rows in the grid.} - \optitem{\envoption{columns}}{5}{specifies the number of columns in the grid} - \optitem{\envoption{width}}{5.2cm}{sets the width of the minipage, in which the grid is typeset.} - \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage.} - \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}} - \optitem{\envoption{title}}{}{sets the title of a puzzle.} - \optitem{\envoption{titleindent}}{0cm}{defines the indent of the title.} - \optitem{\envoption{titlewidth}}{5.2cm}{specifies the width of the box the title is set in.} - \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.} - \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right} - \optitem{\envoption{cvoffset}}{-23pt}{sets the vertical offset of the counters in the margin.} -\end{optionlist} - -\subsection{Sudoku} -Well, it's Sudoku -- nothing to explain! Fill each row and column with numbers from 1 to 9. -\subsubsection{Example} -\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} - -\begin{lstlisting} -\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{lstlisting} - -\subsubsection{Options} -\begin{optionlist} - \optitem{\envoption{width}}{9.1cm}{sets the width of the minipage, in which the grid is typeset. 9 cells of width 1cm plus a litle extra for lines.} - \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage. To get a width of 5cm you need to scale by $\nicefrac{5}{9}$} - \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}} - \optitem{\envoption{title}}{}{sets the title of a puzzle.} - \optitem{\envoption{titleindent}}{0cm}{defines the indent of the title.} - \optitem{\envoption{titlewidth}}{9.1cm}{specifies the width of the box the title is set in.} - \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.} - \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right} - \optitem{\envoption{cvoffset}}{-23pt}{sets the vertical offset of the counters in the margin.} -\end{optionlist} - -\subsubsection{Supporting \texttt{bash} scripts} -\paragraph{createlpsudoku} -The \texttt{createlpsudoku} \cite{bib:wiki:createlpsudoku} \texttt{bash} script can transform Sudoku format files into \env{lpsudoku} environments. It can process files in the so called one line 81 format\footnote{processing of several sudokus in 81 format (one in each line) is possible} (option -e (default)) and in simple sudoku format (option -s) - -\medskip -Usage: \texttt{createlpsudoku [options] [-o output] -i input} - -\medskip -It expects an input file with the option \texttt{-i}. You can specify an output file with the option \texttt{-o}. Otherwise it writes to \texttt{stdout}. Furthermore, the following options are possible: - -\medskip -\begin{tabular}{ll} --w & write Windows line endings (CR/LF) to file \\ --v & prints version number \\ --h & prints help \\ -\end{tabular} - -\paragraph{lpsmag} - -With the \texttt{lpsmag} \cite{bib:wiki:lpsmag} \texttt{bash} script you can half automatically produce a Sudoku magazine using the \LaTeX\ package \package{lpsudoku.sty} and the \texttt{createlpsudoku} bash script. - -\medskip -Usage: \texttt{lpsmag configfile} - -\medskip -The script needs an installed \href{http://ostermiller.org/qqwing/}{QQwing} \cite{bib:web:qqwing} and a config file for defining the magazine's contents: - -\begin{lstlisting} -page p1 easy -page p2 easy -startpuzzles -typesetpage p1 -typesetpage p2 -startsolutions -typesetsolpage p1 p2 last -\end{lstlisting} - -This config file will be sourced into the \texttt{lpsmag bash} script and contains calls of \texttt{lpsmag} functions. Make sure, that the config file has UNIX line endings (LF). For a detailed documentation I refer to the following \href{http://logicpuzzle.square7.de/lpsmag}{wiki} \cite{bib:wiki:lpsmag} entry. - -After running \texttt{lpsmag} you will find a \texttt{lpsmag.tex} in your working directory. Just run \texttt{pdflatex lpsmag.tex} twice and you finally get for example this \href{https://bitbucket.org/kleberj/logicpuzzle/downloads/lpsmag.pdf}{\texttt{lpsmag.pdf}}. - -\subsection{Tunnel} -Determine the course of the tube. Draw the only possible connection. from the beginning to the end. The numbers indicate how many tube segments (including portals) are present in the corresponding rows and columns. The tube is one cell wide, and does not cross or touch itself! -\subsubsection{Example} -\begin{center} - \begin{tunnel} - \framepuzzle - \tunnelH{4,3,3,3,4} - \tunnelV{5,1,5,1,5} - \portal{1}{1} - \portal{5}{5} - \end{tunnel} - \hspace{1.5cm} - \begin{tunnel} - \framepuzzle - \tunnelH{4,3,3,3,4} - \tunnelV{5,1,5,1,5} - \portal{1}{1} - \portal{5}{5} - \tube{\tikzpath{1}{1}{6,6,6,6,8,8,4,4,4,4,8,8,6,6,6,6}} - \end{tunnel} -\end{center} - -\begin{lstlisting} -\begin{center} - \begin{tunnel} - \framepuzzle - \tunnelH{4,3,3,3,4} - \tunnelV{5,1,5,1,5} - \portal{1}{1} - \portal{5}{5} - \end{tunnel} - \hspace{1.5cm} - \begin{tunnel} - \framepuzzle - \tunnelH{4,3,3,3,4} - \tunnelV{5,1,5,1,5} - \portal{1}{1} - \portal{5}{5} - \tube{\tikzpath{1}{1}{6,6,6,6,8,8,4,4,4,4,8,8,6,6,6,6}} - \end{tunnel} -\end{center} -\end{lstlisting} - -\subsubsection{Options} -\begin{optionlist} - \optitem{\envoption{rows}}{5}{defines the number of rows in the grid.} - \optitem{\envoption{columns}}{5}{specifies the number of columns in the grid} - \optitem{\envoption{width}}{5.9cm}{sets the width of the minipage, in which the grid is typeset.} - \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage.} - \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}} - \optitem{\envoption{title}}{}{sets the title of a puzzle.} - \optitem{\envoption{titleindent}}{0cm}{defines the indent of the title.} - \optitem{\envoption{titlewidth}}{5.9cm}{specifies the width of the box the title is set in.} - \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.} - \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right} - \optitem{\envoption{cvoffset}}{-23pt}{sets the vertical offset of the counters in the margin.} -\end{optionlist} - -\clearpage -\section{Roll out your own grid-based logic puzzle} -\label{sec:rollout} -As an example we take a look at the former \package{bokkusu.sty} package. First, we ignore the LPPL license stuff. - -\lstset{numbers=none,basicstyle=\ttfamily\footnotesize}% -\begin{lstlisting} -\ProvidesPackage{bokkusu}[2013/03/25 bokkusu.sty v1.2 - Josef Kleber (C) 2013]% -\RequirePackage{logicpuzzle}% -\end{lstlisting} - -We wrote a package \package{bokkusu.sty} with version number v1.2 and date 2013/03/25 and added a copyright remark. We need to load the code base package \package{logicpuzzle.sty}. - -\begin{lstlisting} -\newcommand*\LP@BK@init@prefix{LP@BK}% -\newcommand*\LP@BK@init@package{bokkusu}% -\LP@define@key{\LP@BK@init@prefix}{\LP@BK@init@package}{rows}{5}% -\LP@define@key{\LP@BK@init@prefix}{\LP@BK@init@package}{columns}{5}% -\LP@define@key{\LP@BK@init@prefix}{\LP@BK@init@package}{scale}{1}% -\LP@define@key{\LP@BK@init@prefix}{\LP@BK@init@package}{counterstyle}{none}% -\LP@define@key{\LP@BK@init@prefix}{\LP@BK@init@package}{color}{black}% -\LP@define@key{\LP@BK@init@prefix}{\LP@BK@init@package}{bgcolor}{}% -\LP@define@key{\LP@BK@init@prefix}{\LP@BK@init@package}{width}{6.7cm}% -\LP@define@key{\LP@BK@init@prefix}{\LP@BK@init@package}{cvoffset}{-38pt}% -\LP@define@key{\LP@BK@init@prefix}{\LP@BK@init@package}{title}{}% -\LP@define@key{\LP@BK@init@prefix}{\LP@BK@init@package}{titleindent}{0.75cm}% -\LP@define@key{\LP@BK@init@prefix}{\LP@BK@init@package}{titlewidth}{5.85cm}% -\LP@define@choicekey@fontsize{\LP@BK@init@prefix}{\LP@BK@init@package}{Large}% -\ExecuteOptionsX{rows,columns,width,fontsize,scale,color,bgcolor,cvoffset, - counterstyle,title,titleindent,titlewidth}% -\ProcessOptionsX\relax% -\LP@init@counter{\LP@BK@init@prefix}% -\end{lstlisting} - -We save the package prefix and name in a macro for easy change. Then we define the options for package \package{bokkusu.sty} and the environment \env{bokkusu}, which are executed afterwards to create the macros for the option values. In the end, we need to initialize the package counters. - -\begin{lstlisting} -\let\valueH\LP@bottomrow% -\let\valueV\LP@leftcolumn% -\let\sumH\LP@toprow% -\let\sumV\LP@rightcolumn% -\end{lstlisting} - -We need numbers around the grid. Therefore, we define some aliases for the existing generic commands. - -\begin{lstlisting} -\newcommand*\bokkususetup[1]% -{% - \setkeys{bokkusu.sty}{#1}% -}% -\end{lstlisting} - -We define \cmd\bokkususetup\ for resetting the global package options. - -\clearpage -Finally, we define the \env{bokkusu} environment. - -\begin{lstlisting} -\newenvironment{bokkusu}[1][]% -{% - \setkeys{bokkusu}{#1}% - \LP@set@package{bokkusu}% - \LP@set@env@prefix{LP@BK}% - \setcounter{LP@BK@rows}{\LP@BK@rows}% - \setcounter{LP@BK@columns}{\LP@BK@columns}% - \stepcounter{LP@BK@rows}% - \stepcounter{LP@BK@columns}% -\end{lstlisting} - -We locally set the environment options and the prefix and name of the current puzzle environment. We need to reset the counters for \envoption{rows} and \envoption{columns}, as they might have been altered. - -\begin{lstlisting} - \begin{minipage}[t]{\LP@BK@width}% - \ifthenelse{\equal{\LP@BK@title}{}}% - {\par\enspace\par}% empty - {\enspace\par\noindent\hspace{\LP@BK@titleindent}\parbox{\LP@BK@titlewidth} - {\strut\LP@titleformat\LP@BK@title}\vspace{3mm}\par}% - \begin{tikzpicture}[scale=\LP@BK@scale]% - \LP@drawbackground{1}{1}{\LP@BK@columns}{\LP@BK@rows}{\LP@BK@bgcolor}% - \LP@drawgrid{1}{1}{\LP@BK@columns}{\LP@BK@rows}{1cm}% -}% -\end{lstlisting} - -We start a minipage with width \marg{width}. If the user defined a title, we typeset the title and add a vertical space. Then, we draw the puzzle with the help of \package{tikz.sty}. We start drawing the background and the grid. - -\begin{lstlisting} -{% - \end{tikzpicture}% - \LP@drawcounter{\LP@BK@counterstyle}% - \stepcounter{LP@puzzlecounter}% - \end{minipage}% -}% -\end{lstlisting} - -Finally, we just end the picture for the puzzle. We draw and step the counter. As last action, we need to close the \env{minipage} environment. That's it. Easy, isn't it? You just need to copy this skelton and change or add some code for your specific puzzle. - -\section{The code} -\label{sec:code} -\lstset{basicstyle=\ttfamily\normalsize}% - -\subsection{PGF layers} -\label{sec:layer} -The \package{logicpuzzle.sty} package defines the PGF layers: \layer{LPdump}, \layer{LPbgcolor}, \layer{LPbackgroundtwo}, \layer{LPbackground}, \layer{LPforeground} and \layer{LPforegroundtwo} - -Without specifying a special layer, the standard \layer{main} layer is used. The \texttt{LPback\-ground} and \layer{LPforeground} layers can be accessed with the \env{puzzlebackground} [see: \ref{sec:puzzlebackground}] and \env{puzzleforeground} [see: \ref{sec:puzzleforeground}] environments. -The \layer{LPbgcolor} is and should only be used for the background color of the grid. - -All layers can also be accessed with the generic PGF method: - -\begin{lstlisting} -\begin{pgfonlayer}{layer} - ... -\end{pgfonlayer} -\end{lstlisting} - -\begin{tabularx}{\textwidth}{lX} -Order: & \layer{LPdump} $\rightarrow$ \layer{LPbgcolor} $\rightarrow$ \layer{LPbackgroundtwo} $\rightarrow$ \layer{LPbackground} $\rightarrow$ \layer{main} $\rightarrow$ \layer{LPforeground} $\rightarrow$ \layer{LPforegroundtwo} \\ -\end{tabularx} - -So, if you are in the need to place something behind \layer{LPbackground} or in front of \layer{LPforeground}, you can use the \layer{LPbackgroundtwo} and \layer{LPforegroundtwo} layers. You can hide elements like help nodes behind the background color on the \layer{LPdump} layer. - -\subsection{Environments} -\label{sec:env} -\subsubsection{\texttt{Puzzle environments}} -\paragraph{\texttt{logicpuzzle}} -The \env{logicpuzzle} environment\marginnote{\hbadness=10000\RaggedLeft\scriptsize\envb{logicpuzzle}\oarg{options}\\\dots\\\enve{logicpuzzle}} is the generic environment for typesetting logic puzzles. With the optional argument of the environment, you can reset the options with local scope. Here, a blank grid is created. -Furthermore, there are the puzzle environments described in section \ref{sec:supppuzzle}. They have their own set of options, that is also different option values and defaults! These can be changed with the \texttt{\textbackslash puzzlesetup} commands with global scope or in the optional argument of the environment with local scope. - -\subparagraph{Options} -\begin{optionlist} - \optitem{\envoption{rows}}{5}{defines the number of rows in the grid.} - \optitem{\envoption{columns}}{5}{specifies the number of columns in the grid} - \optitem{\envoption{width}}{5.1cm}{sets the width of the minipage, in which the grid is typeset.} - \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage.} - \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}} - \optitem{\envoption{title}}{}{sets the title of a puzzle.} - \optitem{\envoption{titleindent}}{0cm}{defines the indent of the title.} - \optitem{\envoption{titlewidth}}{5.1cm}{specifies the width of the box the title is set in.} - \optitem{\envoption{color}}{}{specifies the color for coloring the cells.} - \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.} - \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right} - \optitem{\envoption{cvoffset}}{-23pt}{sets the vertical offset of the counters in the margin.} -\end{optionlist} -\subsubsection{\texttt{Supporting environments}} -\paragraph{\texttt{puzzlebackground}} -\label{sec:puzzlebackground} -The \env{puzzlebackground} environment\marginnote{\hbadness=10000\RaggedLeft\scriptsize\envb{puzzlebackground}\\\dots\\\enve{puzzlebackground}} allows you to place elements behind the \layer{main} layer on the \layer{LPbackground} layer [see: \ref{sec:layer}]. This is for example usefull for the \cmd\fillarea\ [see: \ref{sec:fillarea}] command. -\paragraph{\texttt{puzzleforeground}} -\label{sec:puzzleforeground} -The \env{puzzleforeground} environment\marginnote{\hbadness=10000\RaggedLeft\scriptsize\envb{puzzleforeground}\\\dots\\\enve{puzzleforeground}} allows you to place elements in front of the \layer{main} layer on the \layer{LPforeground} layer [see: \ref{sec:layer}]. This is for example usefull for the \cmd\framearea\ [see: \ref{sec:framearea}] command. - -\subsection{Commands} -\label{sec:commands} -\subsubsection{Puzzle specific commands} -\label{sec:pscommands} -\paragraph{2D-Sudoku} -\label{sec:pscddsudoku} -\subparagraph{\texttt{ddsudokucell}} -\label{sec:pscddsudokucell} -The command \cs{ddsudokucell}\margcs{\cmd\ddsudokucell\{\marg{column}\}\{\marg{row}\}\\\{\marg{number}\}} sets the \marg{number} of the grid cell \marg{column}\marg{row}. -\subparagraph{\texttt{ddsudokusetup}} -With the command \cs{ddsudokusetup}\margcs{\cmd\ddsudokusetup\{\marg{options}\}} you can reset the options with global scope. -\paragraph{Battleship} -\label{sec:pscbattleship} -\subparagraph{\texttt{placeship}} -With the command \cs{placeship}\margcs{\cmd\placeship\{\marg{direction}\}\\\{\marg{column}\}\{\marg{row}\}\{\marg{length}\}} you can place complete ships in the grid. It expects the specification of the direction as horizontal (H) or vertical (V). Furthermore, it requires the starting coordinates and the length of the ship. -\subparagraph{\texttt{placesegment}} -The command \cs{placesegment}\margcs{\cmd\placesegment\{\marg{column}\}\{\marg{row}\}\\\{\marg{ship segment}\}} is used for the placement of ship segments in the grid. In the mandatory argument \marg{ship segment}, you can use the following commands: - -\begin{center} -\begin{tabular}{lccl} -\cs{Ship} & \scalebox{.5}{\Ship} & \scalebox{.5}{\ShipC} & \cs{ShipC} \\ -\cs{ShipL} & \scalebox{.5}{\ShipL} & \scalebox{.5}{\ShipR} & \cs{ShipR} \\ -\cs{ShipB} & \scalebox{.5}{\ShipB} & \scalebox{.5}{\ShipT} & \cs{ShipT} \\ -\end{tabular} -\end{center} -\subparagraph{\texttt{ship}} -The command \cs{ship} was replaced by the \cs{placesegment} command. The command \cs{ship} is deprecated and should not be used longer. It may still be used, but it is not recommended. -\subparagraph{\texttt{placewater}} -With the command \cs{placewater}\margcs{\cmd\placewater\{\marg{column}\}\{\marg{row}\}} you can place water markers \mbox{( \raisebox{2pt}{\Water} )} in the grid. -\subparagraph{\texttt{placeisland}} -With the command \cs{placeisland}\margcs{\cmd\placeisland\{\marg{column}\}\{\marg{row}\}} you can place islands ( \raisebox{-2pt}{\resizebox{!}{10pt}{\Island}} ) in the grid. The island outlines are created randomly: \raisebox{-2pt}{\resizebox{!}{10pt}{\Island}}, \raisebox{-2pt}{\resizebox{!}{10pt}{\Island}}, \raisebox{-2pt}{\resizebox{!}{10pt}{\Island}}, ... -\subparagraph{\texttt{shipH}} -The command \cs{shipH}\margcs{\cmd\shipH\{\marg{csv list}\}} typesets the horizontal numbers above the grid. It expects a comma-separated list as an argument. -\subparagraph{\texttt{shipV}} -The command \cs{shipV}\margcs{\cmd\shipV\{\marg{csv list}\}} typesets the vertical numbers beside the grid. It also expects a comma separated list. -\subparagraph{\texttt{shipbox}} -The command \cs{shipbox}\margcs{\cmd\shipbox\{\marg{csv list}\}} defines the number and size of the ships, which are typeset under the grid. -\subparagraph{\texttt{battleshipsetup}} -With the command \cs{battleshipsetup}\margcs{\cmd\battleshipsetup\{\marg{options}\}} you can reset the options with global scope. -\subparagraph{\texttt{classicgame}} -The command \cs{classicgame}\margcs{\cmd\classicgame\{\marg{csv list}\}} typesets a game sheet for playing classic Battleship. It expects a comma separated list with the number and sizes of the ships. -\paragraph{Bokkusu} -\label{sec:pscbokkusu} -\subparagraph{\texttt{valueH}} -The command \cs{valueH}\margcs{\cmd\valueH\{\marg{csv list}\}} typesets the numbers left to the grid indicating the values of the cells. It expects a comma-separated list as an argument. -\subparagraph{\texttt{valueV}} -The command \cs{valueV}\margcs{\cmd\valueV\{\marg{csv list}\}} typesets the numbers below the grid specifying the values of the cells. It also expects a comma separated list. -\subparagraph{\texttt{sumH}} -The command \cs{sumH}\margcs{\cmd\sumH\{\marg{csv list}\}} typesets the numbers right to the grid indicating the sums of the values of the colored cells. It expects a comma-separated list. -\subparagraph{\texttt{sumV}} -The command \cs{sumV}\margcs{\cmd\sumV\{\marg{csv list}\}} typesets the numbers above the grid specifying the sums of the values of the colored cells. It expects a comma separated list. -\subparagraph{\texttt{bokkususetup}} -With the command \cs{bokkususetup}\margcs{\cmd\bokkususetup\{\marg{options}\}} you can reset the options with global scope. -\paragraph{Chaos Sudoku} -\label{sec:pscchaossudoku} -\subparagraph{\texttt{chaossudokucell}} -With the command \cs{chaossudokucell}\margcs{\cmd\chaossudokucell\{\marg{column}\}\\\{\marg{row}\}\{\marg{number}\}}, you can set the \marg{number} of the grid cell \marg{column} \marg{row}. -\subparagraph{\texttt{chaossudokusetup}} -With the command \cs{chaossudokusetup}\margcs{\cmd\chaossudokusetup\{\marg{options}\}} you can reset the options with global scope. -\paragraph{Hakyuu} -\label{sec:pschakyuu} -\subparagraph{\texttt{hakyuucell}} -The command \cs{hakyuucell}\margcs{\cmd\hakyuucell\{\marg{column}\}\{\marg{row}\}\\\{\marg{number}\}} sets the \marg{number} of the grid cell \marg{column}\marg{row}. -\subparagraph{\texttt{hakyuusetup}} -With the command \cs{hakyuusetup}\margcs{\cmd\hakyuusetup\{\marg{options}\}} you can reset the options with global scope. -\paragraph{Hitori} -\label{sec:pschitori} -\subparagraph{\texttt{hitorisetup}} -With the command \cs{hitorisetup}\margcs{\cmd\hitorisetup\{\marg{options}\}} you can reset the options with global scope. -\paragraph{Kendoku} -\label{sec:psckendoku} -\subparagraph{\texttt{kendokucell}} -The command \cs{kendokucell}\margcs{\cmd\kendokucell\{\marg{column}\}\{\marg{row}\}\\\{\marg{number}\}} sets the \marg{number} of the grid cell \marg{column}\marg{row}. -\subparagraph{\texttt{kendokusetup}} -With the command \cs{kendokusetup}\margcs{\cmd\kendokusetup\{\marg{options}\}} you can reset the options with global scope. -\paragraph{Killer Sudoku} -\label{sec:psckillersudoku} -\subparagraph{\texttt{killersudokucell}} -The command \cs{killersudokucell}\margcs{\cmd\killersudokucell\\\{\marg{column}\}\{\marg{row}\}\{\marg{number}\}} sets the \marg{number} of the grid cell \marg{column} \marg{row}. -\subparagraph{\texttt{killersudokusetup}} -With the command \cs{killersudokusetup}\margcs{\cmd\killersudokusetup\{\marg{options}\}} you can reset the options with global scope. -\paragraph{Laser Beam} -\label{sec:psclaserbeam} -\subparagraph{\texttt{laserH}} -The command \cs{laserH}\margcs{\cmd\laserH\{\marg{csv list}\}} typesets the numbers above the grid indicating how many cells are traversed by the laser beam. It expects a comma-separated list as an argument. -\subparagraph{\texttt{laserV}} -The command \cs{laserV}\margcs{\cmd\laserV\{\marg{csv list}\}} typesets the numbers left to the grid. -\subparagraph{\texttt{mirrorH}} -The command \cs{mirrorH}\margcs{\cmd\mirrorH\{\marg{csv list}\}} typesets the numbers below the grid indicating how many mirrors are placed in the intersections of this column. -\subparagraph{\texttt{mirrorV}} -The command \cs{mirrorV}\margcs{\cmd\mirrorV\{\marg{csv list}\}} typesets the numbers right to the grid. -\subparagraph{\texttt{placearrow}} -The command \cs{placearrow}\margcs{\cmd\placearrow\{\marg{column}\}\{\marg{row}\}\\\{\marg{direction}\}} is used for the placement of arrows at the grid frame. The reference for coordinates is the bottom left corner of the cell. In the mandatory argument \marg{direction}, you can use the following indicators: LeftUp, LeftDown, RightUp, RightDown -\subparagraph{\texttt{placecross}} -With the command \cs{placecross}\margcs{\cmd\placecross\{\marg{column}\}\{\marg{row}\}} you can place a cross in the intersections of the grid. -\subparagraph{\texttt{placemirror}} -With the command \cs{placemirror}\margcs{\cmd\placemirror\{\marg{column}\}\{\marg{row}\}\\\{\marg{direction}\}} you can place mirrors in the intersections of the grid. In the mandatory argument \marg{direction}, you can use the following indicators: H, V -\subparagraph{\texttt{laser}} -The command \cs{laser}\margcs{\cmd\laser[\oarg{color}]\{\marg{Ti\textit{k}Z path}\}} draws the laser beam given by \marg{Ti\textit{k}Z path} with color \oarg{color} (default: red). The reference for coordinates is the bottom left corner of the cell. - -\begin{lstlisting} -\laser[green]{(1,2)--(2,3)--(1,4)} -\end{lstlisting} - -You should consider using this command in the \env{puzzlebackground} environment. -\subparagraph{\texttt{laserbeamsetup}} -With the command \cs{laserbeamsetup}\margcs{\cmd\laserbeamsetup\{\marg{options}\}} you can reset the options with global scope. -\paragraph{Minesweeper} -\label{sec:pscminesweeper} -\subparagraph{\texttt{Mine}} -The command \cs{Mine}\margcs{\cmd\Mine} draws a mine. It can be used in commands like \cmd\setcell\ [see: \ref{sec:setcell}] or \cmd\setrow\ [see: \ref{sec:setrow}]! -\subparagraph{\texttt{minesweepersetup}} -With the command \cs{minesweepersetup}\margcs{\cmd\minesweepersetup\{\marg{options}\}} you can reset the options with global scope. -\paragraph{Skyline} -\label{sec:pscskyline} -\subparagraph{\texttt{skylineT}} -The command \cs{skylineT}\margcs{\cmd\skylineT\{\marg{csv list}\}} typesets the numbers above the grid indicating how many skycrapers are visible. It expects a comma-separated list as an argument. -\subparagraph{\texttt{skylineB}} -The command \cs{skylineB}\margcs{\cmd\skylineB\{\marg{csv list}\}} typesets the numbers below the grid. -\subparagraph{\texttt{skylineL}} -The command \cs{skylineL}\margcs{\cmd\skylineL\{\marg{csv list}\}} typesets the numbers left to the grid. -\subparagraph{\texttt{skylineR}} -The command \cs{skylineR}\margcs{\cmd\skylineR\{\marg{csv list}\}} typesets the numbers right to the grid. -\subparagraph{\texttt{skylinecell}} -The command \cs{skylinecell}\margcs{\cmd\skylinecell\{\marg{column}\}\{\marg{row}\}\\\{\marg{height}\}} sets the \marg{height} of the grid cell \marg{column}\marg{row}. -\subparagraph{\texttt{skylinesetup}} -With the command \cs{skylinesetup}\margcs{\cmd\skylinesetup\{\marg{options}\}} you can reset the options with global scope. -\paragraph{Slitherlink} -\label{sec:pscslitherlink} -\subparagraph{\texttt{slitherlinkcell}} -The command \cs{slitherlinkcell}\margcs{\cmd\slitherlinkcell\\\{\marg{column}\}\{\marg{row}\}\{\marg{number}\}} sets the \marg{number} of the grid cell \marg{column} \marg{row}. -\subparagraph{\texttt{slitherlinksetup}} -With the command \cs{slitherlinksetup}\margcs{\cmd\slitherlinksetup\{\marg{options}\}} you can reset the options with global scope. -\paragraph{Sudoku} -\label{sec:psclpsudoku} -\subparagraph{\texttt{lpsudokucell}} -The command \cs{lpsudokucell}\margcs{\cmd\lpsudokucell\{\marg{column}\}\{\marg{row}\}\\\{\marg{number}\}} sets the \marg{number} of the grid cell \marg{column} \marg{row}. -\subparagraph{\texttt{lpsudokusetup}} -With the command \cs{lpsudokusetup}\margcs{\cmd\lpsudokusetup\{\marg{options}\}} you can reset the options with global scope. -\paragraph{Tunnel} -\label{sec:psctunnel} -\subparagraph{\texttt{tunnelH}} -The command \cs{tunnelH}\margcs{\cmd\tunnelH\{\marg{csv list}\}} typesets the numbers above the grid indicating how many tube segments are in the respective column. It expects a comma-separated list as an argument. -\subparagraph{\texttt{tunnelV}} -The command \cs{tunnelV}\margcs{\cmd\tunnelV\{\marg{csv list}\}} typesets the numbers left to the grid. -\subparagraph{\texttt{portal}} -The command \cs{portal}\margcs{\cmd\portal\{\marg{column}\}\{\marg{row}\}} is used for the placement of tunnel portals in the grid. -\subparagraph{\texttt{tube}} -The command \cs{tube}\margcs{\cmd\tube\{\marg{Ti\textit{k}Z path}\}} draws the tunnel tube given by \marg{Ti\textit{k}Z path}. The reference for coordinates is the center of the cell. The design of the tube is based on \href{http://tex.stackexchange.com/users/16772/xoff}{Xoff}'s answer to this \href{http://tex.stackexchange.com/questions/109410/how-to-pimp-my-tube}{question} on \TeX.sx. - -\begin{lstlisting} -\tube{(1.5,2.5)--(3.5,2.5)--(3.5,4.5)} -\end{lstlisting} - -\subparagraph{\texttt{tunnelsetup}} -With the command \cs{tunnelsetup}\margcs{\cmd\tunnelsetup\{\marg{options}\}} you can reset the options with global scope. -\subsubsection{User commands} -\paragraph{In the grid} -\subparagraph{\texttt{setcell}} -\label{sec:setcell} -With\margcs{\cmd\setcell\{\{\marg{column}\}\{\marg{row}\}\\\{\marg{element}\}} the \cmd\setcell\ command, you can set \marg{element} into cell \marg{column}\marg{row} as central node. It is aware of the current values of the surrounding environment options \envoption{rows}, \envoption{columns}, \envoption{scale} and \envoption{fontsize}. Furthermore, a check if \marg{element} is within the grid is applied. - -\subparagraph{\texttt{setbigcell}} -\label{sec:setbigcell} -The\margcs{\cmd\setbigcell[\oarg{fontsize}]\{\{\marg{column}\}\\\{\marg{row}\}\{\marg{element}\}} \cmd\setbigcell\ command sets \marg{element} into a big (\texttt{$2\times2$}) cell \marg{column}\marg{row} as central node. The optional argument \oarg{fontsize} is set to 'Huge' by default. - -\subparagraph{\texttt{setrow}} -\label{sec:setrow} -With\margcs{\cmd\setrow\{\marg{row}\}\{\marg{csv list}\}} the \cmd\setrow\ command, you can set the contents of a \marg{row}. These may be numbers or letters. - -\subparagraph{\texttt{setcolorrow}} -\label{sec:setcolorrow} -With\margcs{\cmd\setcolorrow\{\marg{row}\}\{\marg{csv list}\}} the \cmd\setcolorrow\ command, you can set the contents of a \marg{row}. Furthermore, the background of the cell is filled with color \texttt{LP@c@romannumber} [see: \ref{sec:LPdefinecolor}]. With the number 0, you can black out the grid cell. - -\subparagraph{\texttt{setcolumn}} -\label{sec:setcolumn} -With\margcs{\cmd\setcolumn\{\marg{column}\}\{\marg{csv list}\}} the \cmd\setcolumn\ command, you can set the contents of a \marg{column}. These may be numbers or letters. - -\subparagraph{\texttt{setcolorcolumn}} -\label{sec:setcolorcolumn} -With\margcs{\cmd\setcolorcolumn\\\{\marg{column}\}\{\marg{csv list}\}} the \cmd\setcolorcolumn\ command, you can set the contents of a \marg{column}. Furthermore, the background of the cell is filled with color \texttt{LP@c@romannumber} [see: \ref{sec:LPdefinecolor}]. - -\subparagraph{\texttt{setrule}} -\label{sec:setrule} -With\margcs{\cmd\setrule\{\{\marg{column}\}\{\marg{row}\}\\\{\marg{rule}\}} the \cmd\setrule\ command, you can set a calculation rule \marg{rule} into the top left corner of cell \marg{column}\marg{row}. The rule is typeset in inline math mode. You might consider using the \cmd\times\ and \cmd\div\ commands. - -\subparagraph{\texttt{fillcell}} -\label{sec:fillcell} -With\margcs{\cmd\fillcell\{\{\marg{column}\}\{\marg{row}\}} the \cmd\fillcell\ command, you can fill cell \marg{column} \marg{row} with the color defined with environment option \envoption{color}\footnote{Therefore, you must define an option \envoption{color} in the style file you want to use fill commands}. It is aware of the current values of the surrounding envionment options \envoption{rows}, \envoption{columns}, \envoption{scale} and \envoption{color}. Furthermore, a check if the cell is within the grid is applied. - -\subparagraph{\texttt{fillrow}} -\label{sec:fillrow} -With\margcs{\cmd\fillrow\{\marg{row}\}\{\marg{csv list}\}} the \cmd\fillrow\ command, you can fill a \marg{row}. In \marg{csv list} '1' means 'fill' and '0' means 'don't fill'. Internally, \cmd\fillrow\ uses \cmd\fillcell\ [see: \ref{sec:fillcell}]. - -\subparagraph{\texttt{fillcolumn}} -\label{sec:fillcolumn} -With\margcs{\cmd\fillcolumn\{\marg{column}\}\{\marg{csv list}\}} the \cmd\fillcolumn\ command, you can fill a \marg{column}. In \marg{csv list} '1' means 'fill' and '0' means 'don't fill'. Internally, \cmd\fillcolumn\ uses \cmd\fillcell\ [see: \ref{sec:fillcell}]. - -\subparagraph{\texttt{filldiagonals}} -\label{sec:filldiagonals} -With\margcs{\cmd\filldiagonals[\oarg{color}]} the \cmd\filldiagonals\ command, you can fill the diagonals with the color specified with the optional argument \oarg{color} (default: yellow!20). Furthermore, it checks for a quadratic grid, otherwise an error message is issued. - -\subparagraph{\texttt{framearea}} -\label{sec:framearea} -The command \cmd\framearea\margcs{\cmd\framearea\{\marg{color}\}\{\marg{Ti\textit{k}Z path}\}} frames the area given by \marg{Ti\textit{k}Z path} with color \marg{color}. The reference for coordinates is the bottom left corner of the cell. - -\begin{lstlisting} -\framearea{green}{(2,2)--(2,3)--(3,3)--(3,2)--(2,2)} -\end{lstlisting} - -This command will color the frame of the grid cell \texttt{(2,2)} green. You should consider using this command in the \env{puzzleforeground} [see: \ref{sec:puzzleforeground}] environment. - -\subparagraph{\texttt{fillarea}} -\label{sec:fillarea} -The command \cmd\fillarea\margcs{\cmd\fillarea\{\marg{color}\}\{\marg{Ti\textit{k}Z path}\}} fills the area given by \marg{Ti\textit{k}Z path} with color \marg{color}. The reference for coordinates is the bottom left corner of the cell. You should consider using this command in the \env{puzzlebackground} [see: \ref{sec:puzzlebackground}] environment. - -\subparagraph{\texttt{colorarea}} -\label{sec:colorarea} -The command \cmd\colorarea\margcs{\cmd\colorarea\{\marg{color}\}\{\marg{Ti\textit{k}Z path}\}} fills the area given by \marg{Ti\textit{k}Z path} with color \marg{color} -- just like \cmd\framearea\ without frame. - -\subparagraph{\texttt{framepuzzle}} -\label{sec:framepuzzle} -With\margcs{\cmd\framepuzzle[\oarg{color}]} the \cmd\framepuzzle\ command, you can frame the grid (thicker line) with the color specified with the optional argument \oarg{color} (default: black). - -\subparagraph{\texttt{tikzpath}} -\label{sec:tikzpath} -With\margcs{\cmd\tikzpath\{\marg{column}\}\{\marg{row}\}\\\{\marg{csv list}\}} the \cmd\tikzpath\ command, you can easily construct a Ti\textit{k}Z path. You just need to define a starting point \marg{column}\marg{row} (bottom left corner) and a \marg{csv list} with direction indicators relative to the current position. - -\begin{center} -\begin{tabular}{rlrlrl} -7: & up left & 8: & up & 9: & up right \\ -4: & left & 5: & no change & 6: & right \\ -1: & down left & 2: & down & 3: & down right \\ -\end{tabular} -\end{center} - -\begin{lstlisting} -\framearea{green}{\tikzpath{2}{2}{8,6,2,4}} -\end{lstlisting} - -This command will frame grid cell \texttt{(2,2)} green. - -\paragraph{Presentation} -\subparagraph{\texttt{titleformat}} -\label{sec:titleformat} -With\margcs{\cmd\titleformat\{\{\marg{format}\}} the \cmd\titleformat\ command, you can define the \marg{format} of the title. By default, the definition is as follows: - -\begin{lstlisting} -\titleformat{\centering\Large\color{blue}} -\end{lstlisting} - -\subparagraph{\texttt{puzzlecounter}} -\label{sec:puzzlecounter} -The command \cs{puzzlecounter}\margcs{\cmd\puzzlecounter} provides the general puzzle counter in textual form to use it in \cmd\definecounterstyle. - -\subparagraph{\texttt{setpuzzlecounter}} -\label{sec:setpuzzlecounter} -With the command \cs{setpuzzlecounter}\margcs{\cmd\setpuzzlecounter\{\marg{number}\}}, you can reset the puzzle counter, for example before the solutions. - -\subparagraph{\texttt{definecounterstyle}} -\label{sec:definecounterstyle} -The command \cs{definecounterstyle}\margcs{\cmd\definecounterstyle\{\marg{name}\}\\\{\marg{definition}\}} allows you to define your own styles. For example, the style \texttt{left} is defined as follows: - -\begin{lstlisting} -\definecounterstyle{left}{ - \begingroup\reversemarginpar\marginnote{ - \tikz\node[shape=rectangle,fill=yellow!40,inner sep=7pt, - draw,rounded corners=3pt,thick] - {\Huge\puzzlecounter};}[\LP@cvoffset]\endgroup} -} -\end{lstlisting} - -To typeset the counter into the margin we use the command \cmd\marginnote. We need to use the command \cmd\reversemarginpar\ to set the counter into the left margin. Of course, we must use this command in a group for local scope. Finally we use \cmd\puzzlecounter\ in a \cmd\tikz\ node with a vertical offset set with the option \envoption{cvoffset}. - -\subparagraph{\texttt{setgridlinestyle}} -\label{sec:setgridlinestyle} -The command \cs{setgridlinestyle}\margcs{\cmd\setgridlinestyle\{\marg{style}\}} sets the style of lines used in the grid. By default, the style is set to \texttt{solid}, whereas \package{slitherlink.sty} uses \texttt{dashed}. - -\subparagraph{\texttt{setnormallinewidth}} -\label{sec:setnormallinewidth} -With the command \cs{setnormallinewidth}\margcs{\cmd\setnormallinewidth\{\marg{dimension}\}}, you can set the width of the standard lines (default: \texttt{0.5pt}) - -\subparagraph{\texttt{setthicklinewidth}} -\label{sec:setthicklinewidth} -With the command \cs{setthicklinewidth}\margcs{\cmd\setthicklinewidth\{\marg{dimension}\}}, you can set the width of the 'thicker' lines (default: \texttt{1.5pt}) - - -\subsubsection{Internal commands} -\paragraph{Initialization} -\subparagraph{\texttt{LP@define@key}} -\label{sec:LPdefinekey} -With\margcs{\cmd\LP@define@key\{\marg{prefix}\}\\\{\marg{package}\}\{\marg{option}\}\{\marg{default}\}} the \cmd\LP@define@key\ command, you can define the options of the environment \marg{package}. A \marg{prefix} is needed for creating different name spaces. -\begin{lstlisting} -\LP@define@key{LP@BS}{battleship}{rows}{5} -\end{lstlisting} -This code snippet defines the option \envoption{rows} for environment \env{battleship} with the default value 5. This value is stored in \cmd\LP@BS@rows. - -\subparagraph{\texttt{LP@define@choicekey@fontsize}} -\label{sec:LPdefinechoicekeyfontsize} -With\margcs{\cmd\LP@define@choicekey@fontsize\\\{\marg{prefix}\}\{\marg{package}\}\{\marg{default}\}} this command, you can define the choice key option \envoption{fontsize} of the environment \marg{package}. Possible keys are: tiny, scriptsize, footnotesize, small, normalsize, large, Large, LARGE, huge, Huge - -\subparagraph{\texttt{LP@init@counter}} -\label{sec:LPinitcounter} -The command\margcs{\cmd\LP@init@counter\{\marg{prefix}\}} \cmd\LP@init@counter\ defines the counters \marg{prefix}@rows and \marg{prefix}@columns. Furthermore, they are initialized with \textbackslash\marg{prefix}@rows\ and \textbackslash\marg{prefix}@columns\ and steped. - -\paragraph{Drawing grids} -\subparagraph{\texttt{LP@drawgrid}} -\label{sec:LPdrawgrid} -With\margcs{\cmd\LP@drawgrid\{\marg{xmin}\}\{\marg{ymin}\}\\\{\marg{xmax}\}\{\marg{ymax}\}\{\marg{step}\}} the \cmd\LP@drawgrid\ command, you can draw the grid (\marg{xmin},\marg{ymin}) to (\marg{xmax},\marg{ymax}) with step \marg{step}. For drawing the standard puzzle grid the step must be 1cm. - -\subparagraph{\texttt{LP@drawsudokugrid}} -\label{sec:LPdrawsudokugrid} -The\margcs{\cmd\LP@drawsudokugrid} command \cmd\LP@drawsudokugrid\ draws the stnadard Sudoku grid, but just the thicker lines. You will have to overlay the standard grid to get a full Sudoku grid. - -\subparagraph{\texttt{LP@drawbackground}} -\label{sec:LPdrawbackground} -The\margcs{\cmd\LP@drawbackground\{\marg{xmin}\}\\\{\marg{ymin}\}\{\marg{xmax}\}\{\marg{ymax}\}\{\marg{color}\}} command \cmd\LP@drawbackground\ draws the background color of the grid. - -\paragraph{In the grid} -\subparagraph{\texttt{LP@setcellcontent}} -\label{sec:LPsetcellcontent} -The\margcs{\cmd\LP@LP@setcellcontent\{\marg{column}\}\\\{\marg{row}\}\{\marg{element}\}} command \cmd\LP@setcellcontent\ is the generic command to set an arbitrary \marg{element}. - -\subparagraph{\texttt{LP@setcellcontentC}} -\label{sec:LPsetcellcontentC} -The\margcs{\cmd\LP@LP@setcellcontentC\{\marg{column}\}\\\{\marg{row}\}\{\marg{element}\}} command \cmd\LP@setcellcontentC\ is the generic command to set an arbitrary \marg{element} in a centered node in the bottom left corner. - -\subparagraph{\texttt{LP@setrowcontents}} -\label{sec:LPsetrowcontents} -The\margcs{\cmd\LP@setrowcontents\{\marg{csv list}\}\\\{\marg{column}\}\{\marg{row}\}} command \cmd\LP@setrowcontents\ is the generic command to set row contents. It does not necessarily start with \marg{column} 1! - -\subparagraph{\texttt{LP@setcolumncontents}} -\label{sec:LPsetcolumncontents} -The\margcs{\cmd\LP@setcolumncontents\{\marg{csv list}\}\\\{\marg{column}\}\{\marg{row}\}} command \cmd\LP@setcolumncontents\ is the generic command to set column contents. It does not necessarily start with \marg{row} 1! - -\subparagraph{\texttt{LP@ingrid}} -\label{sec:LPingrid} -With\margcs{\cmd\LP@ingrid\\\{\marg{column}\}\{\marg{row}\}\{\marg{max column}\}\\\{\marg{max row}\}\{\marg{package}\}} the \cmd\LP@ingrid\ command, you can check if an element -- that should be placed -- is within the grid. Otherwise an error message is issued. - -\subparagraph{\texttt{LP@definecolor}} -\label{sec:LPdefinecolor} -With\margcs{\cmd\LP@definecolor\\\{\marg{name}\}\{\marg{rgb color}\}} the \cmd\LP@definecolor\ command, you can define named rgb colors, especially for defining background colors of numbers used in \cmd\setcolorrow\ [see: \ref{sec:setcolorrow}] and \cmd\setcolorcolumn\ [see: \ref{sec:setcolorcolumn}]. - -The background color names follow the pattern: \texttt{LP@c@romannumber} - -\begin{lstlisting} -\LP@definecolor{LP@c@iv}{.55,1,.88} -\end{lstlisting} - -This command will define the new background color of number \colorbox[rgb]{.55,1,.88}{4}! - -\paragraph{Around the grid} -\subparagraph{\texttt{LP@leftcolumn}} -\label{sec:LPleftcolumn} -With\margcs{\cmd\LP@leftcolumn\{\{\marg{csv list}\}} the \cmd\LP@leftcolumn\ command, you can set the contents of the column left to the grid. The \cmd\skylineL\ command for the \env{skyline} environment is for example defined as follows: - -\begin{lstlisting} -\let\skylineL\LP@leftcolumn -\end{lstlisting} - -\subparagraph{\texttt{LP@rightcolumn}} -\label{sec:LPrightcolumn} -With\margcs{\cmd\LP@rightcolumn\{\{\marg{csv list}\}} the \cmd\LP@rightcolumn\ command, you can set the contents of the column right to the grid. - -\subparagraph{\texttt{LP@toprow}} -\label{sec:LPtoprow} -With\margcs{\cmd\LP@toprow\{\{\marg{csv list}\}} the \cmd\LP@toprow\ command, you can set the contents of the row above the grid. - -\subparagraph{\texttt{LP@bottomrow}} -\label{sec:LPbottomrow} -With\margcs{\cmd\LP@bottomrow\{\{\marg{csv list}\}} the \cmd\LP@bottomrow\ command, you can set the contents of the row below the grid. - -\paragraph{Presentation} -\subparagraph{\texttt{LP@drawcounter}} -\label{sec:LPdrawcounter} -The command \cs{LP@drawcounter}\margcs{\cmd\LP@drawcounter\{\marg{name}\}} draws the puzzle counter with counter style \marg{name}. - -\section{Examples} -You\IfFileExists{qrcode.png}{\marginnote{\href{https://bitbucket.org/kleberj/logicpuzzle/}{\includegraphics[height=2cm]{qrcode.png}}}[-37pt]}{} can download application examples and their solutions from the \href{https://bitbucket.org/kleberj/logicpuzzle/}{project page}. The puzzles are originally licensed under \href{http://creativecommons.org/licenses/by-nc-sa/3.0/}{\ccbyncsa}. -{ -\clearpage -\raggedright -\nocite{*} -\bibliography{logicpuzzle} -\addcontentsline{toc}{section}{\refname} -} -\clearpage -\Headline{Index} -\printindex -\end{document} -- cgit v1.2.3