handouts/Warm-Ups/snake.tex
2025-01-21 17:02:42 -08:00

233 lines
6.8 KiB
TeX
Executable File

\documentclass[
solutions,
singlenumbering,
nopagenumber
]{../../resources/ormc_handout}
\usepackage{../../resources/macros}
\usepackage{ifthen}
\usetikzlibrary{arrows.meta}
\usetikzlibrary{shapes.geometric}
\usetikzlibrary{patterns}
% We put nodes in a separate layer, so we can
% slightly overlap with paths for a perfect fit
\pgfdeclarelayer{nodes}
\pgfdeclarelayer{path}
\pgfsetlayers{main,nodes}
% Layer settings
\tikzset{
% Layer hack, lets us write
% later = * in scopes.
layer/.style = {
execute at begin scope={\pgfonlayer{#1}},
execute at end scope={\endpgfonlayer}
},
%
% Arrowhead tweak
>={Latex[ width=2mm, length=2mm ]},
%
% Labels inside edges
label/.style = {
rectangle,
% For automatic red background in solutions
fill = \ORMCbgcolor,
draw = none,
rounded corners = 0mm
},
%
% Nodes
main/.style = {
draw,
circle,
fill = white,
line width = 0.4mm,
text width = 5mm,
align = center
},
accept/.style = {
draw,
circle,
fill = white,
double,
double distance = 0.5mm,
line width = 0.4mm,
text width = 5mm,
align = center
},
}
\title{Warm-Up: Snakes}
\uptitler{\smallurl{}}
\subtitle{Prepared by Mark on \today}
\begin{document}
\maketitle
\newcounter{mycounter}
\setcounter{mycounter}{0}
\newif\iftmp
\begin{center}
\begin{tikzpicture}[scale = 0.6]
\begin{scope}[layer = nodes]
\foreach \r in {1,3,5,7,9} {
\foreach \i in {1,...,10} {
\pgfmathparse{Mod(\i-1,10)}
\let\x\pgfmathresult
\pgfmathparse{div(\i-1,10) + \r}
\let\y\pgfmathresult
\pgfmathparse{(\r-1)*10+\i}
\let\z\pgfmathresult
\tmpfalse
\pgfmathapproxequalto{\z}{4}
\ifpgfmathcomparison\tmptrue
\else\pgfmathapproxequalto{\z}{5}
\ifpgfmathcomparison\tmptrue
\else\pgfmathapproxequalto{\z}{19}
\ifpgfmathcomparison\tmptrue
\else\pgfmathapproxequalto{\z}{21}
\ifpgfmathcomparison\tmptrue
\else\pgfmathapproxequalto{\z}{28}
\ifpgfmathcomparison\tmptrue
\else\pgfmathapproxequalto{\z}{31}
\ifpgfmathcomparison\tmptrue
\else\pgfmathapproxequalto{\z}{35}
\ifpgfmathcomparison\tmptrue
\else\pgfmathapproxequalto{\z}{44}
\ifpgfmathcomparison\tmptrue
\else\pgfmathapproxequalto{\z}{47}
\ifpgfmathcomparison\tmptrue
\else\pgfmathapproxequalto{\z}{52}
\ifpgfmathcomparison\tmptrue
\else\pgfmathapproxequalto{\z}{53}
\ifpgfmathcomparison\tmptrue
\else\pgfmathapproxequalto{\z}{59}
\ifpgfmathcomparison\tmptrue
\else\pgfmathapproxequalto{\z}{70}
\ifpgfmathcomparison\tmptrue
\else\pgfmathapproxequalto{\z}{76}
\ifpgfmathcomparison\tmptrue
\else\pgfmathapproxequalto{\z}{81}
\ifpgfmathcomparison\tmptrue
\else\pgfmathapproxequalto{\z}{88}
\ifpgfmathcomparison\tmptrue
\else\pgfmathapproxequalto{\z}{98}
\ifpgfmathcomparison\tmptrue
\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
\stepcounter{mycounter}
\iftmp
\node[accept] (\arabic{mycounter}) at (2*\x, 2*\y) {
$\pgfmathprintnumber{\z}$
};
\else
\node[main] (\arabic{mycounter}) at (2*\x, 2*\y) {
$\pgfmathprintnumber{\z}$
};
\fi
}
\foreach \i in {1,...,10} {
\pgfmathparse{9 - Mod(\i-1,10)}
\let\x\pgfmathresult
\pgfmathparse{div(\i-1,10) + \r + 1}
\let\y\pgfmathresult
\pgfmathparse{\r*10+\i}
\let\z\pgfmathresult
\tmpfalse
\pgfmathapproxequalto{\z}{4}
\ifpgfmathcomparison\tmptrue
\else\pgfmathapproxequalto{\z}{5}
\ifpgfmathcomparison\tmptrue
\else\pgfmathapproxequalto{\z}{19}
\ifpgfmathcomparison\tmptrue
\else\pgfmathapproxequalto{\z}{21}
\ifpgfmathcomparison\tmptrue
\else\pgfmathapproxequalto{\z}{28}
\ifpgfmathcomparison\tmptrue
\else\pgfmathapproxequalto{\z}{31}
\ifpgfmathcomparison\tmptrue
\else\pgfmathapproxequalto{\z}{35}
\ifpgfmathcomparison\tmptrue
\else\pgfmathapproxequalto{\z}{44}
\ifpgfmathcomparison\tmptrue
\else\pgfmathapproxequalto{\z}{47}
\ifpgfmathcomparison\tmptrue
\else\pgfmathapproxequalto{\z}{52}
\ifpgfmathcomparison\tmptrue
\else\pgfmathapproxequalto{\z}{53}
\ifpgfmathcomparison\tmptrue
\else\pgfmathapproxequalto{\z}{59}
\ifpgfmathcomparison\tmptrue
\else\pgfmathapproxequalto{\z}{70}
\ifpgfmathcomparison\tmptrue
\else\pgfmathapproxequalto{\z}{76}
\ifpgfmathcomparison\tmptrue
\else\pgfmathapproxequalto{\z}{81}
\ifpgfmathcomparison\tmptrue
\else\pgfmathapproxequalto{\z}{88}
\ifpgfmathcomparison\tmptrue
\else\pgfmathapproxequalto{\z}{98}
\ifpgfmathcomparison\tmptrue
\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
\stepcounter{mycounter}
\iftmp
\node[accept] (\arabic{mycounter}) at (2*\x, 2*\y) {
$\pgfmathprintnumber{\z}$
};
\else
\node[main] (\arabic{mycounter}) at (2*\x, 2*\y) {
$\pgfmathprintnumber{\z}$
};
\fi
}
}
\end{scope}
\draw[->, line width = 0.6mm, rounded corners = 2mm]
(4) -- +(1,0) -- +(1, 13) -- +(3, 13) -> (75);
\draw[->, line width = 0.6mm, rounded corners = 2mm]
(5) -- +(0,-1) -- +(1,-1) -- +(1,1) -- (15);
\draw[->, line width = 0.6mm, rounded corners = 2mm]
(19) -- +(1, 0) -- +(1, 5) -- + (-1, 5) -- (41);
\draw[->, line width = 0.6mm, rounded corners = 2mm]
(21) -- +(1, 0) -- +(1,-5) -- +(3, -5) -- (3);
\draw[->, line width = 0.6mm, rounded corners = 2mm]
(28) -- +(1,0) -- +(1,3) -- +(3,3) -- (50);
\draw[->, line width = 0.6mm, rounded corners = 2mm]
(31) -- +(1,0) -- +(1,-7) -- +(-3, -7) -- (8);
\draw[->, line width = 0.6mm, rounded corners = 2mm]
(35) -- +(-1,0) -- +(-1,11) -- (96);
\draw[->, line width = 0.6mm, rounded corners = 2mm]
(44) -- +(-1,0) -- +(-1,7) -- +(-3,7) -- (82);
\draw[->, line width = 0.6mm, rounded corners = 2mm]
(47) -- +(1,0) -- +(1,-3) -- +(5,-3) -- (30);
\draw[->, line width = 0.6mm, rounded corners = 2mm]
(52) -- +(-1, 0) -- +(-1, -1) -- +(-5,-1) -- +(-5,-5) -- +(-11,-5) -- (23);
\draw[->, line width = 0.6mm, rounded corners = 2mm]
(53) -- +(-1,0) -- +(-1,7) -- (94);
\draw[->, line width = 0.6mm, rounded corners = 2mm]
(59) -- +(-1, 0) -- +(-1,1) -- +(-3,1) -- +(-3,9) -- +(7, 9) -- (95);
\draw[->, line width = 0.6mm, rounded corners = 2mm]
(70) -- +(-1, 0) -- +(-1, 5) -- (91);
\draw[->, line width = 0.6mm, rounded corners = 2mm]
(76) -- +(-1, 0) -- +(-1,-1) -- +(-5,-1) -- +(-5,-5) -- +(-7,-5) -- (41);
\draw[->, line width = 0.6mm, rounded corners = 2mm]
(81) -- +(0, -1) -- +(3, -1) -- +(3, -3) -- (62);
\draw[->, line width = 0.6mm, rounded corners = 2mm]
(88) -- +(1, 0) -- +(1, -3) -- +(-1,-3) -- (67);
\draw[->, line width = 0.6mm, rounded corners = 2mm]
(98) -- +(0, 1.5) -- +(15.5, 1.5) -- +(15.5,-15) -- +(13, -15) -- (12);
\end{tikzpicture}
\end{center}
\end{document}