From 540e34d9bdb81b34eb7049074009ec108656d1fe Mon Sep 17 00:00:00 2001 From: Mark Date: Wed, 22 Jan 2025 12:29:16 -0800 Subject: [PATCH] Warm-ups --- src/Warm-Ups/A Familiar Concept/main.tex | 35 ++++ src/Warm-Ups/A Familiar Concept/meta.toml | 6 + src/Warm-Ups/Adders/main.tex | 93 ++++++++++ src/Warm-Ups/Adders/meta.toml | 6 + src/Warm-Ups/Big-Tac-Toe/main.tex | 187 ++++++++++++++++++++ src/Warm-Ups/Big-Tac-Toe/meta.toml | 6 + src/Warm-Ups/Flip-Flops/main.tex | 177 ++++++++++++++++++ src/Warm-Ups/Flip-Flops/meta.toml | 6 + src/Warm-Ups/Fuse Timers/main.tex | 31 ++++ src/Warm-Ups/Fuse Timers/meta.toml | 6 + src/Warm-Ups/Gallery/main.tex | 121 +++++++++++++ src/Warm-Ups/Gallery/meta.toml | 6 + src/Warm-Ups/Ivan the Electrician/main.tex | 170 ++++++++++++++++++ src/Warm-Ups/Ivan the Electrician/meta.toml | 6 + src/Warm-Ups/Jump Chess/main.tex | 68 +++++++ src/Warm-Ups/Jump Chess/meta.toml | 6 + src/Warm-Ups/Mario Kart/main.tex | 54 ++++++ src/Warm-Ups/Mario Kart/meta.toml | 6 + src/Warm-Ups/Odd Dice/main.tex | 132 ++++++++++++++ src/Warm-Ups/Odd Dice/meta.toml | 6 + src/Warm-Ups/Painting/main.tex | 80 +++++++++ src/Warm-Ups/Painting/meta.toml | 6 + src/Warm-Ups/Partition Products/main.tex | 57 ++++++ src/Warm-Ups/Partition Products/meta.toml | 6 + src/Warm-Ups/Passing Balls/main.tex | 47 +++++ src/Warm-Ups/Passing Balls/meta.toml | 6 + src/Warm-Ups/Passing Balls/pass-sol.png | Bin 0 -> 47753 bytes src/Warm-Ups/Prime Factors/main.tex | 34 ++++ src/Warm-Ups/Prime Factors/meta.toml | 6 + src/Warm-Ups/Regex/main.tex | 153 ++++++++++++++++ src/Warm-Ups/Regex/meta.toml | 6 + src/Warm-Ups/Rootbound/main.tex | 128 ++++++++++++++ src/Warm-Ups/Rootbound/meta.toml | 6 + src/Warm-Ups/Sysadmin/main.tex | 89 ++++++++++ src/Warm-Ups/Sysadmin/meta.toml | 6 + src/Warm-Ups/Travellers/main.tex | 30 ++++ src/Warm-Ups/Travellers/meta.toml | 6 + src/Warm-Ups/What's an AST/main.tex | 43 +++++ src/Warm-Ups/What's an AST/meta.toml | 6 + src/Warm-Ups/Wild Tic-Tac-Toe/main.tex | 66 +++++++ src/Warm-Ups/Wild Tic-Tac-Toe/meta.toml | 6 + src/Warm-Ups/Zeno's Furniture/main.tex | 150 ++++++++++++++++ src/Warm-Ups/Zeno's Furniture/meta.toml | 6 + src/Warm-Ups/fmod/main.tex | 22 +++ src/Warm-Ups/fmod/meta.toml | 6 + 45 files changed, 2099 insertions(+) create mode 100755 src/Warm-Ups/A Familiar Concept/main.tex create mode 100644 src/Warm-Ups/A Familiar Concept/meta.toml create mode 100755 src/Warm-Ups/Adders/main.tex create mode 100644 src/Warm-Ups/Adders/meta.toml create mode 100755 src/Warm-Ups/Big-Tac-Toe/main.tex create mode 100644 src/Warm-Ups/Big-Tac-Toe/meta.toml create mode 100755 src/Warm-Ups/Flip-Flops/main.tex create mode 100644 src/Warm-Ups/Flip-Flops/meta.toml create mode 100755 src/Warm-Ups/Fuse Timers/main.tex create mode 100644 src/Warm-Ups/Fuse Timers/meta.toml create mode 100755 src/Warm-Ups/Gallery/main.tex create mode 100644 src/Warm-Ups/Gallery/meta.toml create mode 100755 src/Warm-Ups/Ivan the Electrician/main.tex create mode 100644 src/Warm-Ups/Ivan the Electrician/meta.toml create mode 100755 src/Warm-Ups/Jump Chess/main.tex create mode 100644 src/Warm-Ups/Jump Chess/meta.toml create mode 100755 src/Warm-Ups/Mario Kart/main.tex create mode 100644 src/Warm-Ups/Mario Kart/meta.toml create mode 100755 src/Warm-Ups/Odd Dice/main.tex create mode 100644 src/Warm-Ups/Odd Dice/meta.toml create mode 100755 src/Warm-Ups/Painting/main.tex create mode 100644 src/Warm-Ups/Painting/meta.toml create mode 100755 src/Warm-Ups/Partition Products/main.tex create mode 100644 src/Warm-Ups/Partition Products/meta.toml create mode 100755 src/Warm-Ups/Passing Balls/main.tex create mode 100644 src/Warm-Ups/Passing Balls/meta.toml create mode 100644 src/Warm-Ups/Passing Balls/pass-sol.png create mode 100755 src/Warm-Ups/Prime Factors/main.tex create mode 100644 src/Warm-Ups/Prime Factors/meta.toml create mode 100644 src/Warm-Ups/Regex/main.tex create mode 100644 src/Warm-Ups/Regex/meta.toml create mode 100755 src/Warm-Ups/Rootbound/main.tex create mode 100644 src/Warm-Ups/Rootbound/meta.toml create mode 100755 src/Warm-Ups/Sysadmin/main.tex create mode 100644 src/Warm-Ups/Sysadmin/meta.toml create mode 100755 src/Warm-Ups/Travellers/main.tex create mode 100644 src/Warm-Ups/Travellers/meta.toml create mode 100755 src/Warm-Ups/What's an AST/main.tex create mode 100644 src/Warm-Ups/What's an AST/meta.toml create mode 100755 src/Warm-Ups/Wild Tic-Tac-Toe/main.tex create mode 100644 src/Warm-Ups/Wild Tic-Tac-Toe/meta.toml create mode 100755 src/Warm-Ups/Zeno's Furniture/main.tex create mode 100644 src/Warm-Ups/Zeno's Furniture/meta.toml create mode 100755 src/Warm-Ups/fmod/main.tex create mode 100644 src/Warm-Ups/fmod/meta.toml diff --git a/src/Warm-Ups/A Familiar Concept/main.tex b/src/Warm-Ups/A Familiar Concept/main.tex new file mode 100755 index 0000000..8a754d3 --- /dev/null +++ b/src/Warm-Ups/A Familiar Concept/main.tex @@ -0,0 +1,35 @@ +\documentclass[ + solutions, + hidewarning, + singlenumbering, + nopagenumber +]{../../../lib/tex/ormc_handout} +\usepackage{../../../lib/tex/macros} + + + +\title{Warm-Up: A Familiar Concept} +\uptitler{\smallurl{}} +\subtitle{Prepared by Mark on \today} + + +\begin{document} + + \maketitle + + + \problem{} + Let $v = [-5, -2, 0, 1, 4, 1000]$. Find all $x$ that minimize the following metric. \par + $$ + \sum_{\forall i} |v_i - x| = |v_1 - x| + |v_2 - x| + ... + |v_6 - x| + $$ + \vfill + + \problem{} + Let $v = [-5, -2, 0, 1, 4, 1000, 1001]$. Find all $x$ that minimize the metric in \ref{one}. + \vfill + + \problem{} + What is this metric usually called? + +\end{document} \ No newline at end of file diff --git a/src/Warm-Ups/A Familiar Concept/meta.toml b/src/Warm-Ups/A Familiar Concept/meta.toml new file mode 100644 index 0000000..70aa39f --- /dev/null +++ b/src/Warm-Ups/A Familiar Concept/meta.toml @@ -0,0 +1,6 @@ +[metadata] +title = "A Familiar Concept" + +[publish] +handout = true +solutions = false diff --git a/src/Warm-Ups/Adders/main.tex b/src/Warm-Ups/Adders/main.tex new file mode 100755 index 0000000..ab4f1cf --- /dev/null +++ b/src/Warm-Ups/Adders/main.tex @@ -0,0 +1,93 @@ +\documentclass[ + nosolutions, + singlenumbering, + nopagenumber +]{../../../lib/tex/ormc_handout} +\usepackage{../../../lib/tex/macros} + + +\title{Warm-Up: Adders} +\uptitler{\smallurl{}} +\subtitle{Prepared by Mark on \today} + +\begin{document} + + \maketitle + + \problem{} + Fill the following binary addition table. \par + \hint{s is \say{sum,} c is \say{carry}} + + \begin{center} + \begin{tabular}{ c c || c c } + $a$ & $b$ & s & c \\ + \hline + 0 & 0 & ? & ? \\ + 0 & 1 & ? & ? \\ + 1 & 0 & ? & ? \\ + 1 & 1 & ? & ? + \end{tabular} + \end{center} + + \vfill + + \problem{} + Draw a logic circuit that atisfies the above table. \par + This is called a \textit{half adder}. \par + \hint{You should need exactly two gates.} + + \begin{solution} + $s = a \texttt{ xor } b$ \par + $c = a \texttt{ and } b$ + \end{solution} + + \vfill + + \definition{} + A \textit{full adder} is similar to a half adder, but it has an extra input: \par + a full adder takes $a$, $b$, and $c_\text{in}$, and produces $s$ and $c_\text{out}$. \par + \hint{$c_\text{in}$ is \say{carry in}} + + \problem{} + Use two half adders to construct a full adder. + + \begin{solution} + $s_1, c_1 = \texttt{HA}(a, b)$ \par + $s_2, c_2 = \texttt{HA}(s_1, c_\text{in})$ \par + $s_\text{out} = s_2$ \par + $c_\text{out} = \texttt{OR}(c_1, c_2)$ + + \vspace{2mm} + + Of course, the class should just draw the circuit. + \end{solution} + + + \vfill + \pagebreak + + \problem{} + How can we add two four-bit binary numbers using the full adder? \par + We want a four-bit output sum and a one-bit $c_\text{out}$. + + \vfill + + \problem{} + Say that all basic logic gates need $1u$ of time to fully switch states. \par + \note[Note]{This is called \textit{gate delay}} + + \vspace{2mm} + + How much time does a full adder need to fully switch states? \par + How about your circuit from \ref{rippleadder}? + + \vfill + + \problem{Bonus} + Design a faster solution to \ref{rippleadder}. + + + \vfill + \pagebreak + +\end{document} \ No newline at end of file diff --git a/src/Warm-Ups/Adders/meta.toml b/src/Warm-Ups/Adders/meta.toml new file mode 100644 index 0000000..5d59390 --- /dev/null +++ b/src/Warm-Ups/Adders/meta.toml @@ -0,0 +1,6 @@ +[metadata] +title = "Adders" + +[publish] +handout = true +solutions = true diff --git a/src/Warm-Ups/Big-Tac-Toe/main.tex b/src/Warm-Ups/Big-Tac-Toe/main.tex new file mode 100755 index 0000000..8f735f5 --- /dev/null +++ b/src/Warm-Ups/Big-Tac-Toe/main.tex @@ -0,0 +1,187 @@ +\documentclass[ + solutions, + hidewarning, + singlenumbering, + nopagenumber +]{../../../lib/tex/ormc_handout} +\usepackage{../../../lib/tex/macros} + +% x,y,scale,style +\def\ttt#1#2#3#4{ + \draw[#4] (#1, #2+#3) -- (#1+#3+#3+#3, #2+#3); + \draw[#4] (#1, #2+#3+#3) -- (#1+#3+#3+#3, #2+#3+#3); + \draw[#4] (#1+#3, #2) -- (#1+#3, #2+#3+#3+#3); + \draw[#4] (#1+#3+#3, #2) -- (#1+#3+#3, #2+#3+#3+#3); +} + + +\geometry{ + paper = letterpaper, + top = 25mm, + bottom = 30mm, + left = 20mm, + right = 20mm, + headheight = 75mm, + footskip = 15mm +} + + +% misere ttt + +% Numerical Tic Tac Toe is a variation invented by the mathematician Ronald Graham. +% The numbers 1 to 9 are used in this game. The first player plays with the odd numbers, +% the second player plays with the even numbers. All numbers can be used only once. +% The player who puts down 15 points in a line wins (sum of 3 numbers). +% This game can be generalized to a n × n board. + + +% In Treblecross, both players play with the same symbol. +% The game is played on a 1-by-n board with k equal to 3. +% The player who makes a three in a row of Xs (or black chips) wins the game + +\title{Warm-Up: Big-Tac-Toe} +\uptitler{\smallurl{}} +\subtitle{Prepared by Mark on \today.} + +\begin{document} + + \maketitle + + + + We have large tic-tac-toe grid, each cell of which contains another. + On each turn, one player puts their glyph into a cell of a small grid. When the next player goes, + they must make their move in the small grid in the same position as the previous player's move. + \begin{itemize} + \item The first player to move may pick any small grid to start in. + \item If a player is directed to a grid that is \textit{full}, that player may go anywhere. \par + A sub-grid that is \say{won} but not full may still be played in. + \end{itemize} + + \vspace{2mm} + + The first player to complete a line of three \say{won} subgrids wins the game. + + \vfill\null\hfill + \begin{minipage}{0.48\textwidth} + \begin{center} + \begin{tikzpicture}[scale=0.65] + \ttt{0}{0}{4}{line width=0.5mm} + \ttt{0.5}{0.5}{1}{line width=0.25mm} + \ttt{0.5}{4.5}{1}{line width=0.25mm} + \ttt{0.5}{8.5}{1}{line width=0.25mm} + \ttt{4.5}{0.5}{1}{line width=0.25mm} + \ttt{4.5}{4.5}{1}{line width=0.25mm} + \ttt{4.5}{8.5}{1}{line width=0.25mm} + \ttt{8.5}{0.5}{1}{line width=0.25mm} + \ttt{8.5}{4.5}{1}{line width=0.25mm} + \ttt{8.5}{8.5}{1}{line width=0.25mm} + \end{tikzpicture} + \end{center} + \end{minipage} + \hfill + \begin{minipage}{0.48\textwidth} + \begin{center} + \begin{tikzpicture}[scale=0.65] + \ttt{0}{0}{4}{line width=0.5mm} + \ttt{0.5}{0.5}{1}{line width=0.25mm} + \ttt{0.5}{4.5}{1}{line width=0.25mm} + \ttt{0.5}{8.5}{1}{line width=0.25mm} + \ttt{4.5}{0.5}{1}{line width=0.25mm} + \ttt{4.5}{4.5}{1}{line width=0.25mm} + \ttt{4.5}{8.5}{1}{line width=0.25mm} + \ttt{8.5}{0.5}{1}{line width=0.25mm} + \ttt{8.5}{4.5}{1}{line width=0.25mm} + \ttt{8.5}{8.5}{1}{line width=0.25mm} + \end{tikzpicture} + \end{center} + \end{minipage} + \hfill\null\vfill + + \problem{} + Play a few rounds of this game with someone nearby. \par + Can either player force a win? + + \vfill + + \problem{} + Modify the rules of this game to disallow play in won subgrids. \par + How does your strategy change? + + \vfill + \pagebreak + + + \null\vfill\null\hfill + \begin{minipage}{0.48\textwidth} + \begin{center} + \begin{tikzpicture}[scale=0.65] + \ttt{0}{0}{4}{line width=0.5mm} + \ttt{0.5}{0.5}{1}{line width=0.25mm} + \ttt{0.5}{4.5}{1}{line width=0.25mm} + \ttt{0.5}{8.5}{1}{line width=0.25mm} + \ttt{4.5}{0.5}{1}{line width=0.25mm} + \ttt{4.5}{4.5}{1}{line width=0.25mm} + \ttt{4.5}{8.5}{1}{line width=0.25mm} + \ttt{8.5}{0.5}{1}{line width=0.25mm} + \ttt{8.5}{4.5}{1}{line width=0.25mm} + \ttt{8.5}{8.5}{1}{line width=0.25mm} + \end{tikzpicture} + \end{center} + \end{minipage} + \hfill + \begin{minipage}{0.48\textwidth} + \begin{center} + \begin{tikzpicture}[scale=0.65] + \ttt{0}{0}{4}{line width=0.5mm} + \ttt{0.5}{0.5}{1}{line width=0.25mm} + \ttt{0.5}{4.5}{1}{line width=0.25mm} + \ttt{0.5}{8.5}{1}{line width=0.25mm} + \ttt{4.5}{0.5}{1}{line width=0.25mm} + \ttt{4.5}{4.5}{1}{line width=0.25mm} + \ttt{4.5}{8.5}{1}{line width=0.25mm} + \ttt{8.5}{0.5}{1}{line width=0.25mm} + \ttt{8.5}{4.5}{1}{line width=0.25mm} + \ttt{8.5}{8.5}{1}{line width=0.25mm} + \end{tikzpicture} + \end{center} + \end{minipage} + \hfill\null\vfill + + \vfill\null\hfill + \begin{minipage}{0.48\textwidth} + \begin{center} + \begin{tikzpicture}[scale=0.65] + \ttt{0}{0}{4}{line width=0.5mm} + \ttt{0.5}{0.5}{1}{line width=0.25mm} + \ttt{0.5}{4.5}{1}{line width=0.25mm} + \ttt{0.5}{8.5}{1}{line width=0.25mm} + \ttt{4.5}{0.5}{1}{line width=0.25mm} + \ttt{4.5}{4.5}{1}{line width=0.25mm} + \ttt{4.5}{8.5}{1}{line width=0.25mm} + \ttt{8.5}{0.5}{1}{line width=0.25mm} + \ttt{8.5}{4.5}{1}{line width=0.25mm} + \ttt{8.5}{8.5}{1}{line width=0.25mm} + \end{tikzpicture} + \end{center} + \end{minipage} + \hfill + \begin{minipage}{0.48\textwidth} + \begin{center} + \begin{tikzpicture}[scale=0.65] + \ttt{0}{0}{4}{line width=0.5mm} + \ttt{0.5}{0.5}{1}{line width=0.25mm} + \ttt{0.5}{4.5}{1}{line width=0.25mm} + \ttt{0.5}{8.5}{1}{line width=0.25mm} + \ttt{4.5}{0.5}{1}{line width=0.25mm} + \ttt{4.5}{4.5}{1}{line width=0.25mm} + \ttt{4.5}{8.5}{1}{line width=0.25mm} + \ttt{8.5}{0.5}{1}{line width=0.25mm} + \ttt{8.5}{4.5}{1}{line width=0.25mm} + \ttt{8.5}{8.5}{1}{line width=0.25mm} + \end{tikzpicture} + \end{center} + \end{minipage} + \hfill\null\vfill + +\end{document} \ No newline at end of file diff --git a/src/Warm-Ups/Big-Tac-Toe/meta.toml b/src/Warm-Ups/Big-Tac-Toe/meta.toml new file mode 100644 index 0000000..eb2e016 --- /dev/null +++ b/src/Warm-Ups/Big-Tac-Toe/meta.toml @@ -0,0 +1,6 @@ +[metadata] +title = "Big-Tac-Toe" + +[publish] +handout = true +solutions = false diff --git a/src/Warm-Ups/Flip-Flops/main.tex b/src/Warm-Ups/Flip-Flops/main.tex new file mode 100755 index 0000000..f201103 --- /dev/null +++ b/src/Warm-Ups/Flip-Flops/main.tex @@ -0,0 +1,177 @@ +\documentclass[ + solutions, + shortwarning, + singlenumbering, + nopagenumber +]{../../../lib/tex/ormc_handout} +\usepackage{../../../lib/tex/macros} +\geometry{top = 20mm} + + +\usepackage{tikz} +\usetikzlibrary{circuits.logic.US} +\usetikzlibrary{plotmarks} + + +\title{Warm-Up: Flip-Flops} +\uptitler{\smallurl{}} +\subtitle{Prepared by Mark on \today.} + +\begin{document} + + \maketitle + + + + \problem{} + Below is a circuit of logic gates. S and R are input pins, Q is an output pin. \par + What does it do? + + \begin{center} + \begin{tikzpicture}[circuit logic US, scale=2] + % tikz notes: + % -|: Select vertical of first and horizontal of second + + % Gates + \node[or gate] (or) at (0,0) {\tiny\texttt{or}}; + \node[not gate] (not) at (0,-0.8) {\tiny\texttt{not}}; + \node[and gate] (and) at (1.4,-0.4) {\tiny\texttt{and}}; + + % Important locations + \draw (or.input 1) ++(-0.5, 0) coordinate (start); + \draw (or.input 1) ++(-0.25, 0) coordinate (startjoin); + \draw (and.output) ++(0.25, 0) coordinate (endjoin); + \draw (and.output) ++(0.75, 0) coordinate (end); + + % Connections + \draw (or.input 2) -- (or.input 2 -| start) node[anchor=east] {S}; + \draw (not.input) -- (not.input -| start) node[anchor=east] {R}; + \draw (or.output) -| (or.output -| 0.75,0) |- (and.input 1); + \draw (not.output) -| (not.output -| 0.75,0) |- (and.input 2); + \draw (and.output) -- (and.output -| endjoin) -- ++(0,0.9) -| (startjoin) -- (or.input 1); + \filldraw (and.output -| endjoin) circle[radius=0.3mm]; + \draw (endjoin) -- (end) node[anchor=west] {Q}; + \end{tikzpicture} + \end{center} + + + \begin{solution} + This is an S-R (\say{set-reset}) latch. \par + Set S to high, and Q will stay high until it is reset by R. + \end{solution} + + \vfill + + + \problem{} + Below is another circuit. How does it work? \par + \hint{\texttt{nor} = not or. It works exactly as you'd expect.} + + + \begin{center} + \begin{tikzpicture}[circuit logic US, scale=2] + + % Gates + \node[nor gate] (nora) at (0,0) {\tiny\texttt{nor}}; + \node[nor gate] (norb) at (0,-1.2) {\tiny\texttt{nor}}; + + % Important locations + \draw (nora.input 1) ++(-0.5, 0) coordinate (start); + \draw (nora.input 1) ++(-0.25, 0) coordinate (startjoin); + \draw (nora.output) ++(0.25, 0) coordinate (endjoin); + \draw (nora.output) ++(0.75, 0) coordinate (end); + + % Connections + % Input extension + \draw (nora.input 1) -- (nora.input 1 -| start) node[anchor=east] {S}; + %\draw (nora.input 2 -| start) -- (nora.input 2); + %\draw (norb.input 1 -| start) -- (norb.input 1); + \draw (norb.input 2) -- (norb.input 2 -| start) node[anchor=east] {R}; + % Output extension + \draw (norb.output) -- (norb.output -| end) node[anchor=west] {Q}; + %\draw (norb.output) -- ++(1, 0) node[anchor=west] {$\overline{\text{Q}}$}; + % Cross-connection + \draw (nora.output -| endjoin) -- (endjoin |- 0,-0.4) -- (startjoin |- 0,-0.8) -- (norb.input 1 -| startjoin) -- (norb.input 1); + \draw (norb.output -| endjoin) -- (endjoin |- 0,-0.8) -- (startjoin |- 0,-0.4) -- (nora.input 2 -| startjoin) -- (nora.input 2); + \draw (norb.output) -- (norb.output -| endjoin); + \filldraw (norb.output -| endjoin) circle[radius=0.3mm]; + \draw (nora.output) -- (nora.output -| endjoin); + + \end{tikzpicture} + \end{center} + + \begin{solution} + This is another S-R (\say{set-reset}) latch. + \end{solution} + + \vfill + \pagebreak + + + + + + \problem{} + Empty circles represent inverted inputs/outputs. + This is the reason a \texttt{nand} gate looks like an \texttt{and} gate with a dot. + Pay careful attention to the nand gate in the bottom-left. + + \vspace{2mm} + + What does this circuit do? + + + \begin{center} + \begin{tikzpicture}[circuit logic US, scale=2] + + + % Gates + \node[nand gate] (nandc) at (1.4,0) {\tiny\texttt{nand}}; + \node[nand gate] (nandd) at (1.4,-1.2) {\tiny\texttt{nand}}; + % inputs=in => 1 is inverted, 2 is normal + \node[nand gate] (nanda) at (nandc.input 1 -| 0,0) {\tiny\texttt{nand}}; + \node[nand gate,inputs=in] (nandb) at (nandd.input 2 -| 0,-1.2) {\tiny\texttt{nand}}; + + % Important locations + \draw (nanda.input 1) ++(-1, 0) coordinate (start); + \draw (nanda.input 1) ++(-0.5, 0) coordinate (startjoina); + \draw (nanda.input 1) ++(-0.25, 0) coordinate (startjoinb); + \draw (nandc.input 1) ++(-0.5, 0) coordinate (midstart); + \draw (nandc.input 1) ++(-0.25, 0) coordinate (midstartjoin); + \draw (nandc.output) ++(0.25, 0) coordinate (endjoin); + \draw (nandc.output) ++(0.75, 0) coordinate (end); + + % Connections + \draw (nanda.input 1) -- (nanda.input 1 -| start) node[anchor=east] {D}; + \draw (nandb.input 2) -- (nandb.input 2 -| start) node[anchor=east] {C}; + \draw (nanda.input 1 -| startjoinb) |- (nandb.input 1); + \draw (nandb.input 2 -| startjoina) |- (nanda.input 2); + \filldraw (nanda.input 1 -| startjoinb) circle[radius=0.3mm]; + \filldraw (nandb.input 2 -| startjoina) circle[radius=0.3mm]; + \draw (nanda.output) -- (nandc.input 1); + \draw (nandb.output) -- (nandd.input 2); + \draw (nandc.output) -- (nandc.output -| end) node[anchor=west] {Q}; + \draw (nandc.output -| endjoin) -- (endjoin |- 0,-0.4) -- (midstartjoin |- 0,-0.8) -- (nandd.input 1 -| midstartjoin) -- (nandd.input 1); + \draw (nandd.output -| endjoin) -- (endjoin |- 0,-0.8) -- (midstartjoin |- 0,-0.4) -- (nandc.input 2 -| midstartjoin) -- (nandc.input 2); + \draw (nandd.output) -- (nandd.output -| endjoin); + \draw (nandc.output) -- (nandc.output -| endjoin) circle[radius=0.3mm]; + \filldraw (nandc.output -| endjoin) circle[radius=0.3mm]; + \end{tikzpicture} + \end{center} + + + \begin{solution} + This is a D (\say{data}) flip-flop. \par + D is a \say{data} pin. When C is high, this circuit sets Q to D. \par + When C is low, Q stays at its previous value until D is set to high again. + + \vspace{2mm} + + In other words, this circuit \say{reads} D whenever C is high. + \end{solution} + + \vfill + \pagebreak + + +\end{document} \ No newline at end of file diff --git a/src/Warm-Ups/Flip-Flops/meta.toml b/src/Warm-Ups/Flip-Flops/meta.toml new file mode 100644 index 0000000..5751cb0 --- /dev/null +++ b/src/Warm-Ups/Flip-Flops/meta.toml @@ -0,0 +1,6 @@ +[metadata] +title = "Flip-Flops" + +[publish] +handout = true +solutions = true diff --git a/src/Warm-Ups/Fuse Timers/main.tex b/src/Warm-Ups/Fuse Timers/main.tex new file mode 100755 index 0000000..b0c5d1a --- /dev/null +++ b/src/Warm-Ups/Fuse Timers/main.tex @@ -0,0 +1,31 @@ +\documentclass[ + solutions, + hidewarning, + singlenumbering, + nopagenumber +]{../../../lib/tex/ormc_handout} +\usepackage{../../../lib/tex/macros} + + + +\title{Warm-Up: Fuse Timers} +\uptitler{\smallurl{}} +\subtitle{Prepared by Mark on \today.} + +\begin{document} + + \maketitle + + + \problem{} + Suppose we have two strings and a lighter. Each string takes an hour to fully burn. \par + However, we do not know how fast each part of the string burns: + half might burn in 1 minute, and the rest could take 59. + + \vspace{2mm} + + How would we measure exactly 45 minutes using these strings? + + \vfill + +\end{document} \ No newline at end of file diff --git a/src/Warm-Ups/Fuse Timers/meta.toml b/src/Warm-Ups/Fuse Timers/meta.toml new file mode 100644 index 0000000..bf3cdd8 --- /dev/null +++ b/src/Warm-Ups/Fuse Timers/meta.toml @@ -0,0 +1,6 @@ +[metadata] +title = "Fuse Timers" + +[publish] +handout = true +solutions = false diff --git a/src/Warm-Ups/Gallery/main.tex b/src/Warm-Ups/Gallery/main.tex new file mode 100755 index 0000000..e4541ac --- /dev/null +++ b/src/Warm-Ups/Gallery/main.tex @@ -0,0 +1,121 @@ +\documentclass[ + solutions, + singlenumbering, + nopagenumber +]{../../../lib/tex/ormc_handout} +\usepackage{../../../lib/tex/macros} + + +\makeatletter +\newcommand{\thisone}{ + \if@solutions + {\color{red} $\Leftarrow$ \texttt{this one}} + \else\fi +} + +\title{Warm-Up: The Gallery} +\uptitler{\smallurl{}} +\subtitle{Prepared by Mark on \today} + +\begin{document} + + \maketitle + + A museum curator is arranging seven photographs on a gallery wall in accordance with the photographer's requirements. + They are titled as follows: Fence, Gardenias, Hibiscus, Irises, Katydid, Lotus, and Magnolia. + + The photograph's requirements are as follows: + \begin{itemize} + \item Gardenias must be immediately before Katydid. + \item Hibiscus must be somewhere before Katydid but cannot be the first photograph. + \item Irises and Lotus must be next to one another. + \item Magnolia must be one of the first three photographs. + \item Fence must be either first or seventh. + \end{itemize} + + \problem{} + Which of the below could be a valid ordering? \par + \note[Note]{We denote each painting by the first letter of its title.} + \begin{itemize} + \item \texttt{FHGMKIL} + \item \texttt{HMGKILF} + \item \texttt{ILMHGKF} \thisone{} + \item \texttt{LMIHGKF} + \item \texttt{MFHGKLI} + \end{itemize} + \vfill + + \problem{} + If Irises is immediately before Gardenias, which of the following could be true? + \begin{itemize} + \item Gardenias is fourth + \item Hibiscus is fourth + \item Irises is third + \item Lotus is second + \item Magnolia is third \thisone{} + \end{itemize} + \vfill + + \problem{} + The ordering of the photographs is fully determined if... + \begin{itemize} + \item Gardenias is fourth + \item Hibiscus is second + \item Irises is second + \item Lotus is first \thisone{} + \item Magnolia is third + \end{itemize} + + \vfill + \pagebreak + + \problem{} + If Magnolia is second, what CANNOT be true? + \begin{itemize} + \item Hibiscus is third + \item Hibiscus is fourth \thisone{} + \item Hibiscus is fifth + \item Gardenias is fourth + \item Gardenias is sixth + \end{itemize} + + \vfill + + \problem{} + Katydid cannot be in which position? + \begin{itemize} + \item Third \thisone{} + \item Fourth + \item Fifth + \item Sixth + \item Seventh + \end{itemize} + \vfill + + \problem{} + If Gardenias is fourth, what must be true? + \begin{itemize} + \item Fence is first \thisone{} + \item Hibiscus is third + \item Irises is seventh + \item Magnolia is first + \item Magnolia is second + \end{itemize} + \vfill + + \problem{} + Which one of the following, + if substituted for the second condition, + would have the same effect in determining the + arrangement of the photographs? + + \begin{itemize} + \item If Fence is seventh, Hibiscus is second + \item Gardenias is somewhere after Hibiscus, and either Fence or Magnolia is first + \item Hibiscus must be somewhere between the first and sixth photographs + \item Unless Hibiscus is second, it must be somewhere between Magnolia and Gardenias \thisone{} + \item Katydid is somewhere after Hibiscus, which must be after Fence. + \end{itemize} + \vfill + \pagebreak +\end{document} \ No newline at end of file diff --git a/src/Warm-Ups/Gallery/meta.toml b/src/Warm-Ups/Gallery/meta.toml new file mode 100644 index 0000000..6e093f1 --- /dev/null +++ b/src/Warm-Ups/Gallery/meta.toml @@ -0,0 +1,6 @@ +[metadata] +title = "The Gallery" + +[publish] +handout = true +solutions = true diff --git a/src/Warm-Ups/Ivan the Electrician/main.tex b/src/Warm-Ups/Ivan the Electrician/main.tex new file mode 100755 index 0000000..1aabec0 --- /dev/null +++ b/src/Warm-Ups/Ivan the Electrician/main.tex @@ -0,0 +1,170 @@ +\documentclass[ + solutions, + hidewarning, + singlenumbering, + nopagenumber +]{../../../lib/tex/ormc_handout} +\usepackage{../../../lib/tex/macros} + + + +% We put nodes in a separate layer, so we can +% slightly overlap with paths for a perfect fit +\pgfdeclarelayer{nodes} +\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} + } +} + + +\title{The Electrician's Warm-Up} +\uptitler{\smallurl{}} +\subtitle{Prepared by Mark on \today} + + +\begin{document} + + \maketitle + + + Ivan the electician is working in an apartment. He has a box of switches, which come in three types: + \begin{center} + \begin{minipage}[t]{0.3\textwidth} + \begin{center} + Plain switch + \end{center} + \begin{center} + \begin{tikzpicture} + % A state + \node at (0.375, -1.25) {A}; + \draw[line width=1mm] (0, 0) -- (0.75, 0); + + \draw[fill=white] (0, 0) circle (1mm); + \draw[fill=white] (0.75, 0) circle (1mm); + + % B state + \node at (2.375, -1.25) {B}; + \draw[line width=1mm,cap=round] (2, 0) -- (2.6, 0.4); + + \draw[fill=white] (2, 0) circle (1mm); + \draw[fill=white] (2.75, 0) circle (1mm); + \end{tikzpicture} + \end{center} + \end{minipage} + \begin{minipage}[t]{0.3\textwidth} + \begin{center} + Three-way switch + \end{center} + \begin{center} + \begin{tikzpicture} + % A state + \node at (0.375, -1) {A}; + \draw[line width=1mm] (0, 0) -- (0.75, 0.5); + + \draw[fill=white] (0, 0) circle (1mm); + \draw[fill=white] (0.75, 0.5) circle (1mm); + \draw[fill=white] (0.75, -0.5) circle (1mm); + + % B state + \node at (2.375, -1) {B}; + \draw[line width=1mm] (2, 0) -- (2.75, -0.5); + + \draw[fill=white] (2, 0) circle (1mm); + \draw[fill=white] (2.75, 0.5) circle (1mm); + \draw[fill=white] (2.75, -0.5) circle (1mm); + \end{tikzpicture} + \end{center} + \end{minipage} + \hfill + \begin{minipage}[t]{0.3\textwidth} + \begin{center} + Four-way switch + \end{center} + \begin{center} + \begin{tikzpicture} + % A state + \node at (0.375, -0.5) {A}; + \draw[line width=1mm] (0, 0) -- (0.75, 1); + \draw[line width=1mm] (0, 1) -- (0.75, 0); + + \draw[fill=white] (0, 0) circle (1mm); + \draw[fill=white] (0.75, 0) circle (1mm); + \draw[fill=white] (0, 1) circle (1mm); + \draw[fill=white] (0.75, 1) circle (1mm); + + % B state + \node at (2.375, -0.5) {B}; + \draw[line width=1mm] (2, 0) -- (2.75, 0); + \draw[line width=1mm] (2, 1) -- (2.75, 1); + + \draw[fill=white] (2, 0) circle (1mm); + \draw[fill=white] (2.75, 0) circle (1mm); + \draw[fill=white] (2, 1) circle (1mm); + \draw[fill=white] (2.75, 1) circle (1mm); + \end{tikzpicture} + \end{center} + \end{minipage} + \end{center} + + A switch is always in the \say{A} or \say{B} state. Its state changes when you toggle the switch on the wall. Each circle represents a terminal on the switch, and lines represent electrical connections. \par + The two crossing wires in the A state of the four-way switch are \textbf{not} connected. + + \example{} + First, Ivan wires a simple light in the kitchen: one switch, one lamp. The result is the following circuit: + + \begin{center} + \begin{tikzpicture} + + \begin{scope}[layer = nodes] + + \draw[fill=white] (-1.5, 0) circle (1mm); + + \node (h) at (-2, 0) {\texttt{Hot}}; + + \draw[fill=white] (0, 0) circle (1mm); + \draw[fill=white] (0.75, 0) circle (1mm); + + \node[ + circle, + draw = black, + fill = white, + label = below:\texttt{Lamp} + ] (l) at (2,0) {$\circledast$}; + + \draw[fill=white] (3.5, 0) circle (1mm); + + \node (n) at (4.5, 0) {\texttt{Neutral}}; + + \end{scope} + + \draw[line width=1mm,cap=round] (-1.5, 0) -- (0, 0); + \draw[line width=1mm,cap=round] (0, 0) -- (0.6, 0.4); + \draw[line width=1mm,cap=round] (0.75, 0) -- (l); + \draw[line width=1mm,cap=round] (l) -- (3.5,0); + \end{tikzpicture} + \end{center} + + \problem{} + Ivan now needs to wire a hallway. It has two switches, one at each end. \par + Toggling either switch should toggle the single lamp in the middle. \par + Which switches should Ivan use, and how should he connect their terminals? \par + \hint{There are two solutions. One is clever, the other is deadly.} + + \vfill + + + \problem{} + Next, Ivan goes to the bedroom. There is one switch by the door and one on each side of the bed. How can he make these three switches control one lamp? + + \vfill + + \problem{Bonus} + Is it possible to do the same with four or more switches? If so, how? +\end{document} \ No newline at end of file diff --git a/src/Warm-Ups/Ivan the Electrician/meta.toml b/src/Warm-Ups/Ivan the Electrician/meta.toml new file mode 100644 index 0000000..d94781b --- /dev/null +++ b/src/Warm-Ups/Ivan the Electrician/meta.toml @@ -0,0 +1,6 @@ +[metadata] +title = "Ivan the Electrician" + +[publish] +handout = true +solutions = false diff --git a/src/Warm-Ups/Jump Chess/main.tex b/src/Warm-Ups/Jump Chess/main.tex new file mode 100755 index 0000000..c1d3658 --- /dev/null +++ b/src/Warm-Ups/Jump Chess/main.tex @@ -0,0 +1,68 @@ +\documentclass[ + solutions, + hidewarning, + singlenumbering, + nopagenumber +]{../../../lib/tex/ormc_handout} +\usepackage{../../../lib/tex/macros} + + + +\usepackage{chessboard} +\usepackage{xskak} + +\title{Warm Up: Jump Chess} +\uptitler{\smallurl{}} +\subtitle{Prepared by Mark on \today} + + +\begin{document} + + \maketitle + + Consider a normal game of chess with the following modification: + we allow queens and rooks to jump as far across the board as they want, + within their usual range of movement. + As a result, queens and rooks may check the opposing + king from a distance, ignoring any pieces in between. + + \vspace{2mm} + + With these modified rules, the outcome of a game can be determined. \par + Who wins, or do black and white draw with ideal play? \par + (As in regulation chess, white moves first.) + + \begin{center} + \newchessgame + \chessboard[normalboard,showmover=false] + \end{center} + + \begin{solution} + Win for white in 5 moves. + + \vspace{2mm} + + Trap black in the top row. If Black is kept in check + every move, his ability to respond is limited and the game tree + remains small. + + \vspace{2mm} + + Capture an opposing rook with Rxa8+. + The king is in check and can't move, so black must capture this rook. + If black recaptures with his other rook, respond with Qh5\#. + + Otherwise, black must recapture Qxa8. Now go Qa4+. + If black captures with his queen Qxa4, then Rxh8\#. + So, black must move Kd8. + + \vspace{2mm} + + Finish with the following: \par + Qd4+ Ke8 \par + Rxh8+ Qxh8 \par + Qxh8\# + + \end{solution} + +\end{document} \ No newline at end of file diff --git a/src/Warm-Ups/Jump Chess/meta.toml b/src/Warm-Ups/Jump Chess/meta.toml new file mode 100644 index 0000000..789e618 --- /dev/null +++ b/src/Warm-Ups/Jump Chess/meta.toml @@ -0,0 +1,6 @@ +[metadata] +title = "Jump Chess" + +[publish] +handout = true +solutions = true diff --git a/src/Warm-Ups/Mario Kart/main.tex b/src/Warm-Ups/Mario Kart/main.tex new file mode 100755 index 0000000..f5af8a0 --- /dev/null +++ b/src/Warm-Ups/Mario Kart/main.tex @@ -0,0 +1,54 @@ +\documentclass[ + solutions, + hidewarning, + singlenumbering, + nopagenumber +]{../../../lib/tex/ormc_handout} +\usepackage{../../../lib/tex/macros} + + +\title{Warm-Up: Mario Kart} +\uptitler{\smallurl{}} +\subtitle{Prepared by Mark on \today} + + +\begin{document} + + \maketitle + + \problem{} + A standard Mario Kart cup consists of 12 players and four races. \par + Each race is scored as follows: + \begin{itemize} + \item 15 points are awarded for first place; + \item 12 for second; + \item and $(13 - \text{place})$ otherwise. + \end{itemize} + In any one race, no players may tie. + A player's score at the end of a cup is the sum of their scores for each of the four races. + + \vspace{2mm} + + An $n$-way tie occurs when the top $n$ players have the same score at the end of a round. \par + What is the largest possible $n$, and how is it achieved? + + \begin{solution} + A 12-way tie is impossible, since the total number of point is not divisible by 12. + + \vspace{2mm} + + A 11-way tie is possible, with a top score of 28: + \begin{itemize} + \item Four players finish $1^\text{st}$, $3^\text{ed}$, $11^\text{th}$, and $12^\text{th}$; + + % spell:off + \item Four players finish $2^\text{nd}$, $4^\text{th}$, $9^\text{th}$, and $10^\text{th}$; + % spell:on + + \item Two players finish fifth twice and seventh twice, + \item One player finishes sixth in each race. + \end{itemize} + The final player always finishes eighth, with a non-tie score of 20. + \end{solution} + +\end{document} \ No newline at end of file diff --git a/src/Warm-Ups/Mario Kart/meta.toml b/src/Warm-Ups/Mario Kart/meta.toml new file mode 100644 index 0000000..717d963 --- /dev/null +++ b/src/Warm-Ups/Mario Kart/meta.toml @@ -0,0 +1,6 @@ +[metadata] +title = "Mario Kart" + +[publish] +handout = true +solutions = true diff --git a/src/Warm-Ups/Odd Dice/main.tex b/src/Warm-Ups/Odd Dice/main.tex new file mode 100755 index 0000000..270936d --- /dev/null +++ b/src/Warm-Ups/Odd Dice/main.tex @@ -0,0 +1,132 @@ +\documentclass[ + nosolutions, + hidewarning, + singlenumbering, + nopagenumber +]{../../../lib/tex/ormc_handout} +\usepackage{../../../lib/tex/macros} + + + +\usepackage{tikz} +\usetikzlibrary{arrows.meta} +\usetikzlibrary{shapes.geometric} + +% 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 ]}, + % + % Nodes + main/.style = { + draw, + circle, + fill = white, + line width = 0.35mm + } +} + +\title{Warm Up: Odd Dice} +\uptitler{\smallurl{}} +\subtitle{Prepared by Mark on \today} + + +\begin{document} + + \maketitle + + \problem{} + + We say a set of dice $\{A, B, C\}$ is \textit{nontransitive} + if, on average, $A$ beats $B$, $B$ beats $C$, and $C$ beats $A$. + In other words, we get a counterintuitive \say{rock - paper - scissors} effect. + + \vspace{2mm} + + Create a set of nontransitive six-sided dice. \par + \hint{All sides should be numbered with positive integers less than 10.} + + \begin{solution} + One possible set can be numbered as follows: + \begin{itemize} + \item Die $A$: $2, 2, 4, 4, 9, 9$ + \item Die $B$: $1, 1, 6, 6, 8, 8$ + \item Die $C$: $3, 3, 5, 5, 7, 7$ + \end{itemize} + + \vspace{4mm} + + Another solution is below: + \begin{itemize} + \item Die $A$: $3, 3, 3, 3, 3, 6$ + \item Die $B$: $2, 2, 2, 5, 5, 5$ + \item Die $C$: $1, 4, 4, 4, 4, 4$ + \end{itemize} + \end{solution} + + \vfill + + \problem{} + Now, consider the set of six-sided dice below: + \begin{itemize} + \item Die $A$: $4, 4, 4, 4, 4, 9$ + \item Die $B$: $3, 3, 3, 3, 8, 8$ + \item Die $C$: $2, 2, 2, 7, 7, 7$ + \item Die $D$: $1, 1, 6, 6, 6, 6$ + \item Die $E$: $0, 5, 5, 5, 5, 5$ + \end{itemize} + On average, which die beats each of the others? Draw a graph. \par + + \begin{solution} + \begin{center} + \begin{tikzpicture}[scale = 0.5] + \begin{scope}[layer = nodes] + \node[main] (a) at (-2, 0.2) {$a$}; + \node[main] (b) at (0, 2) {$b$}; + \node[main] (c) at (2, 0.2) {$c$}; + \node[main] (d) at (1, -2) {$d$}; + \node[main] (e) at (-1, -2) {$e$}; + \end{scope} + + \draw[->] + (a) edge (b) + (b) edge (c) + (c) edge (d) + (d) edge (e) + (e) edge (a) + + (a) edge (c) + (b) edge (d) + (c) edge (e) + (d) edge (a) + (e) edge (b) + ; + \end{tikzpicture} + \end{center} + \end{solution} + + \vfill + + Now, say we roll each die twice. What happens to the graph above? + + \begin{solution} + The direction of each edge is reversed! + \end{solution} + + \vfill + \pagebreak + +\end{document} \ No newline at end of file diff --git a/src/Warm-Ups/Odd Dice/meta.toml b/src/Warm-Ups/Odd Dice/meta.toml new file mode 100644 index 0000000..93cc543 --- /dev/null +++ b/src/Warm-Ups/Odd Dice/meta.toml @@ -0,0 +1,6 @@ +[metadata] +title = "Odd Dice" + +[publish] +handout = true +solutions = true diff --git a/src/Warm-Ups/Painting/main.tex b/src/Warm-Ups/Painting/main.tex new file mode 100755 index 0000000..93f0bd4 --- /dev/null +++ b/src/Warm-Ups/Painting/main.tex @@ -0,0 +1,80 @@ +\documentclass[ + solutions, + singlenumbering, + nopagenumber +]{../../../lib/tex/ormc_handout} +\usepackage{../../../lib/tex/macros} + +\title{Warm-Up: The Painting} +\uptitler{\smallurl{}} +\subtitle{Prepared by Mark on \today.} + +\begin{document} + + \maketitle + + \problem{} + You have a painting on a string. \par + Hang the painting on two nails so that if either is removed, the painting falls. \par + + \vspace{2mm} + You may detach the string as you hang the painting, but it must be re-attached once you're done. + + \note{The solution to this problem isn't a \say{think outside the box} trick, it's a clever wrapping of the string.} + + + \begin{center} + \begin{tikzpicture}[scale=2.0] + \draw[line width = 0.5mm] + (0, 1) -- + (2, 1) -- + (2, 0) -- + (0, 0) -- + cycle + ; + + \draw[line width = 0.5mm, dotted] + (0.1, 1) -- + (1, 1.5) -- + (1.9, 1) + ; + + \fill (1, 1.5) circle[radius = 0.25mm]; + + + \draw[line width = 0.2mm] + (0.66, 0.66) -- + (0.66, 0.35) -- + (0.60, 0.1) + (0.72, 0.1)--(0.66, 0.35) + ; + + \draw[line width = 0.2mm] + (0.66, 0.575) -- + (0.6, 0.475) -- + (0.525, 0.575) + (0.66, 0.575) -- + (0.72, 0.475) -- + (0.795, 0.575) + ; + + \fill[color=white] (0.66, 0.66) circle[radius = 0.8mm]; + \draw (0.66, 0.66) circle[radius = 0.8mm]; + \end{tikzpicture} + \end{center} + + + \begin{solution} + + Say we have a left nail and a right nail. The path of the string is as follows: + \begin{itemize} + \item Start on the left + \item Move over both nails, wrap right nail cw + \item Wrap left nail ccw + \item Wrap right nail ccw + \item Exit downwards, in between both nails + \end{itemize} + + \end{solution} + +\end{document} \ No newline at end of file diff --git a/src/Warm-Ups/Painting/meta.toml b/src/Warm-Ups/Painting/meta.toml new file mode 100644 index 0000000..85587d2 --- /dev/null +++ b/src/Warm-Ups/Painting/meta.toml @@ -0,0 +1,6 @@ +[metadata] +title = "The Painting" + +[publish] +handout = true +solutions = true diff --git a/src/Warm-Ups/Partition Products/main.tex b/src/Warm-Ups/Partition Products/main.tex new file mode 100755 index 0000000..a440b7e --- /dev/null +++ b/src/Warm-Ups/Partition Products/main.tex @@ -0,0 +1,57 @@ +\documentclass[ + solutions, + singlenumbering, + nopagenumber +]{../../../lib/tex/ormc_handout} +\usepackage{../../../lib/tex/macros} + + +\title{Warm-Up: Partition Products} +\uptitler{\smallurl{}} +\subtitle{Prepared by Mark on \today.} + +\begin{document} + + \maketitle + + \problem{} + Take any positive integer $n$. \par + Now, write it as sum of smaller positive integers: $n = a_1 + a_2 + ... + a_k$ \par + Maximize the product $a_1 \times a_2 \times ... \times a_k$ + + + + \begin{solution} + + \textbf{Interesting Solution:} + + Of course, all $a_i$ should be greater than $1$. \par + Also, all $a_i$ should be smaller than four, since $x \leq x(x-2)$ if $x \geq 4$. \par + Thus, we're left with sequences that only contain 2 and 3. \par + \note{Note that two twos are the same as one four, but we exclude fours for simplicity.} + + \vspace{2mm} + + Finally, we see that $3^2 > 2^3$, so any three twos are better repackaged as two threes. \par + The best sequence $a_i$ thus consists of a maximal number of threes followed by 0, 1, or 2 twos. + + \linehack{} + + + + \textbf{Calculus Solution:} + + First, solve this problem for equal, non-integer $a_i$: + + \vspace{2mm} + + We know $n = \prod{a_i}$, thus $\ln(n) = \sum{\ln(a_i)}$. \par + If all $a_i$ are equal, we get $\ln(n) = k \times \ln(n / k)$. \par + Derive wrt $k$ and set to zero to get $\ln(n / k) = 1$ \par + So $k = n / e$ and $n / k = e \approx 2.7$ + + \vspace{2mm} + + If we try to approximate this with integers, we get the same solution as above. + \end{solution} +\end{document} \ No newline at end of file diff --git a/src/Warm-Ups/Partition Products/meta.toml b/src/Warm-Ups/Partition Products/meta.toml new file mode 100644 index 0000000..7ce2d2c --- /dev/null +++ b/src/Warm-Ups/Partition Products/meta.toml @@ -0,0 +1,6 @@ +[metadata] +title = "Partition Products" + +[publish] +handout = true +solutions = true diff --git a/src/Warm-Ups/Passing Balls/main.tex b/src/Warm-Ups/Passing Balls/main.tex new file mode 100755 index 0000000..4a57dc1 --- /dev/null +++ b/src/Warm-Ups/Passing Balls/main.tex @@ -0,0 +1,47 @@ +\documentclass[ + solutions, + singlenumbering, + nopagenumber +]{../../../lib/tex/ormc_handout} +\usepackage{../../../lib/tex/macros} + +\usepackage{graphicx} + +\title{Warm-Up: Passing Balls} +\uptitler{\smallurl{}} +\subtitle{Prepared by Mark on \today} + +\begin{document} + + \maketitle + + \problem{} + + Twelve people are standing in a circle. Each is assigned a number between 1 and 12. \par + Participants numbered 1, 2, 3, and 4 hold red, green, yellow, and black balls, respectively. \par + Everyone else is empty-handed. + + \vspace{2mm} + + Each participant can pass their ball to any student that is exactly 5 positions away. \par + Balls cannot be passed to someone who has one in hand. + + \vspace{2mm} + + After a number of passes, the first four participants again hold all the balls. \par + Participant 1 has a black ball. Which balls are held by participants 2, 3, and 4? + + \begin{solution} + \begin{itemize} + \item the graph of possible moves is isomorphic to a circle (since 5 and 12 are coprime), + \item but the balls get passed around, so swapping the place of any two balls is not allowed. \\ + Therefore, the balls will stay in their initial (cyclic) order: + \end{itemize} + + \begin{center} + \includegraphics[width=\textwidth]{pass-sol.png} + \end{center} + \end{solution} + + +\end{document} \ No newline at end of file diff --git a/src/Warm-Ups/Passing Balls/meta.toml b/src/Warm-Ups/Passing Balls/meta.toml new file mode 100644 index 0000000..4027d2b --- /dev/null +++ b/src/Warm-Ups/Passing Balls/meta.toml @@ -0,0 +1,6 @@ +[metadata] +title = "Passing Balls" + +[publish] +handout = true +solutions = true diff --git a/src/Warm-Ups/Passing Balls/pass-sol.png b/src/Warm-Ups/Passing Balls/pass-sol.png new file mode 100644 index 0000000000000000000000000000000000000000..b052142aa90877f1b1d2153de59d8cfed13848e5 GIT binary patch literal 47753 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 QWD9)GDQn=emCSwq3tBUxUH||9 literal 0 HcmV?d00001 diff --git a/src/Warm-Ups/Prime Factors/main.tex b/src/Warm-Ups/Prime Factors/main.tex new file mode 100755 index 0000000..4f5a400 --- /dev/null +++ b/src/Warm-Ups/Prime Factors/main.tex @@ -0,0 +1,34 @@ +\documentclass[ + solutions, + singlenumbering, + nopagenumber, + hidewarning +]{../../../lib/tex/ormc_handout} +\usepackage{../../../lib/tex/macros} + +\title{Warm-Up: Prime Factors} +\uptitler{\smallurl{}} +\subtitle{Prepared by Mark on \today.} + +\begin{document} + + \maketitle + + \problem{} + What proportion of integers have $2$ as their smallest prime factor? + % 1^2 + \vfill + + + \problem{} + What proportion of integers have $3$ as their second-smallest prime factor? + % 1/6 + \vfill + + + \problem{} + What is the median second-smallest prime factor? + % 37 + \vfill + +\end{document} \ No newline at end of file diff --git a/src/Warm-Ups/Prime Factors/meta.toml b/src/Warm-Ups/Prime Factors/meta.toml new file mode 100644 index 0000000..dd92f66 --- /dev/null +++ b/src/Warm-Ups/Prime Factors/meta.toml @@ -0,0 +1,6 @@ +[metadata] +title = "Prime Factors" + +[publish] +handout = true +solutions = false diff --git a/src/Warm-Ups/Regex/main.tex b/src/Warm-Ups/Regex/main.tex new file mode 100644 index 0000000..a8f48e7 --- /dev/null +++ b/src/Warm-Ups/Regex/main.tex @@ -0,0 +1,153 @@ +\documentclass[ + solutions, + hidewarning, +]{../../../lib/tex/ormc_handout} +\usepackage{../../../lib/tex/macros} + + +\usepackage{xcolor} +\usepackage{soul} +\usepackage{hyperref} + +\definecolor{Light}{gray}{.90} +\sethlcolor{Light} +\newcommand{\htexttt}[1]{\texttt{\hl{#1}}} + + +\title{The Regex Warm-Up} +\uptitler{\smallurl{}} +\subtitle{Prepared by Mark on \today} + +\begin{document} + + \maketitle + + + Last time, we discussed Deterministic Finite Automata. One interesting application of these mathematical objects is found in computer science: Regular Expressions. \par + This is often abbreviated \say{regex}, which is pronounced like \say{gif.} + + \vspace{2mm} + + Regex is a language used to specify patterns in a string. You can think of it as a concise way to define a DFA, using text instead of a huge graph. \par + + Often enough, a clever regex pattern can do the work of a few hundred lines of code. + + \vspace{2mm} + + Like the DFAs we've studied, a regex pattern \textit{accepts} or \textit{rejects} a string. However, we don't usually use this terminology with regex, and instead say that a string \textit{matches} or \textit{doesn't match} a pattern. + + \vspace{5mm} + + Regex strings consist of characters, quantifiers, sets, and groups. + + \vspace{5mm} + + \textbf{Quantifiers} \par + Quantifiers specify how many of a character to match. \par + There are four of these: \htexttt{+}, \htexttt{*}, \htexttt{?}, and \htexttt{\{ \}} + + \vspace{2mm} + + \htexttt{+} means \say{match one or more of the preceding token} \par + \htexttt{*} means \say{match zero or more of the preceding token} + + For example, the pattern \htexttt{ca+t} will match the following strings: + \begin{itemize} + \item \texttt{cat} + \item \texttt{caat} + \item \texttt{caaaaaaaat} + \end{itemize} + \htexttt{ca+t} will \textbf{not} match the string \texttt{ct}. \par + The pattern \htexttt{ca*t} will match all the strings above, including \texttt{ct}. + \vspace{2mm} + + + \htexttt{?} means \say{match one or none of the preceding token} \par + The pattern \htexttt{linea?r} will match only \texttt{linear} and \texttt{liner}. + \vspace{2mm} + + Brackets \htexttt{\{min, max\}} are the most flexible quantifier. \par + They specify exactly how many tokens to match: \par + \htexttt{ab\{2\}a} will match only \texttt{abba}. \par + \htexttt{ab\{1,3\}a} will match only \texttt{aba}, \texttt{abba}, and \texttt{abbba}. \par + % spell:off + \htexttt{ab\{2,\}a} will match any \texttt{ab...ba} with at least two \texttt{b}s. + % spell:on + + \vspace{5mm} + + \problem{} + Write the patterns \htexttt{a*} and \htexttt{a+} using only \htexttt{\{ \}}. + \vfill + + \problem{} + Draw a DFA equivalent to the regex pattern \htexttt{01*0}. + \vfill + + \pagebreak + + + + + + + \textbf{Characters, Sets, and Groups} \par + In the previous section, we saw how we can specify characters literally: \par + \texttt{a+} means \say{one or more \texttt{a} character} + + \vspace{2mm} + + There are, of course, other ways we can specify characters. + + \vspace{2mm} + + The first such way is the \textit{set}, denoted \htexttt{[ ]}. A set can pretend to be any character inside it. \par + For example, \htexttt{m[aoy]th} will match \texttt{math}, \texttt{moth}, or \texttt{myth}. \par + \htexttt{a[01]+b} will match \texttt{a0b}, \texttt{a111b}, \texttt{a1100110b}, and any other similar string. \par + You may negate a set with a \htexttt{\textasciicircum}. \par + \htexttt{[\textasciicircum abc]} will match any character except \texttt{a}, \texttt{b}, or \texttt{c}, including symbols and spaces. + + \vspace{2mm} + + If we want to keep characters together, we can use the \textit{group}, denoted \htexttt{( )}. \par + + Groups work exactly as you'd expect, representing an atomic\footnotemark{} group of characters. \par + \htexttt{a(01)+b} will match \texttt{a01b} and \texttt{a010101b}, but will \textbf{not} match \texttt{a0b}, \texttt{a1b}, or \texttt{a1100110b}. + + \footnotetext{In other words, \say{unbreakable}} + + + \problem{} + You are now familiar with most of the tools regex has to offer. \par + Write patterns that match the following strings: + \begin{enumerate}[itemsep=1mm] + \item An ISO-8601 date, like \texttt{2022-10-29}. \par + \hint{Invalid dates like \texttt{2022-13-29} should also be matched.} + + \item An email address. \par + \hint{Don't forget about subdomains, like \texttt{math.ucla.edu}.} + + \item A UCLA room number, like \texttt{MS 5118} or \texttt{Kinsey 1220B}. + + \item Any ISBN-10 of the form \texttt{0-316-00395-7}. \par + \hint{Remember that the check digit may be an \texttt{X}. Dashes are optional.} + + \item A word of even length. \par + \hint{The set \texttt{[A-z]} contains every english letter, capitalized and lowercase. \\ + \texttt{[a-z]} will only match lowercase letters.} + + \item A word with exactly 3 vowels. \par + \hint{The special token \texttt{\textbackslash w} will match any word character. It is equivalent to \texttt{[A-z0-9\_]} \\ \texttt{\_} stands for a literal underscore.} + + \item A word that has even length and exactly 3 vowels. + + \item A sentence that does not start with a capital letter. + \end{enumerate} + + \vfill + + \problem{} + If you'd like to know more, check out \url{https://regexr.com}. It offers an interactive regex prompt, as well as a cheatsheet that explains every other regex token there is. \par + You will find a nice set of challenges at \url{https://alf.nu/RegexGolf}. + I especially encourage you to look into this if you are interested in computer science. +\end{document} \ No newline at end of file diff --git a/src/Warm-Ups/Regex/meta.toml b/src/Warm-Ups/Regex/meta.toml new file mode 100644 index 0000000..960db9d --- /dev/null +++ b/src/Warm-Ups/Regex/meta.toml @@ -0,0 +1,6 @@ +[metadata] +title = "Regex" + +[publish] +handout = true +solutions = false diff --git a/src/Warm-Ups/Rootbound/main.tex b/src/Warm-Ups/Rootbound/main.tex new file mode 100755 index 0000000..185dadf --- /dev/null +++ b/src/Warm-Ups/Rootbound/main.tex @@ -0,0 +1,128 @@ +\documentclass[ + solutions, + hidewarning, + singlenumbering, + nopagenumber +]{../../../lib/tex/ormc_handout} +\usepackage{../../../lib/tex/macros} + +\def\utri#1#2{ + \draw (#1,#2) -- ++(60:1) -- ++(-60:1) -- cycle; +} +\def\dtri#1#2{ + \draw (#1,#2) -- (#1+1, #2) -- ++(-120:1) -- cycle; +} + +\def\board#1{ + \begin{center} + \begin{tikzpicture}[scale=#1] + \draw (0,0) -- (6, 0); + \foreach \y in {0,...,5} { + \foreach[expand list] \x in {-6,-5,...,\y} { + \utri{\x + 6 - 0.5 - \y * 0.5}{\y * -0.86603 - 0.86603} + } + } + \foreach \y in {5,...,0} { + \foreach[expand list] \x in {-5,-4,...,\y} { + \utri{\x + 5 - \y * 0.5}{\y * 0.86603 - 12 * 0.86603} + } + } + \draw (-3, -6 * 0.86603) -- (0, -12 * 0.86603); + \draw (9, -6 * 0.86603) -- (6, -12 * 0.86603); + \end{tikzpicture} + \end{center} +} + + +\geometry{ + paper = letterpaper, + top = 20mm, + bottom = 20mm, + left = 20mm, + right = 20mm, + headheight = 75mm, + footskip = 15mm +} + +\title{Rootbound} +\uptitler{\smallurl{}} +\uptitlel{Warm-ups} +\subtitle{ + Prepared by Mark on \today. \par + Based on \url{https://cjffield.com/rules/rootbound.pdf} +} + +\begin{document} + + \maketitle + + \generic{Playing the game:} + % Official size is 7 spaces per side, but variations work. + You will need a pencil, an eraser, and a printed hexagonal board. \par + Draw your pieces lightly---you may need to erase them. \par + Turns alternate. Each player draws distinct pieces (for example, circles and squares). + + \vspace{2mm} + + An example board is drawn below. \say{Spaces} are the corners of the triangular cells, \textit{not} the cells themselves. + Points on the edge of the board are also spaces. + + \board{0.4} + + During the first turn of the game, the first player must place one piece onto any empty space. + From then on, each player may place either one or two pieces onto empty spaces, respecting the restrictions below. + Players may not skip their turn unless they have no legal move. + + + \generic{Claimed regions:} + A \textit{claimed region} is an area of empty spaces that is only adjacent to pieces of a single color. \par + No regions are considered \say{claimed} until both players have had a turn. + + + \generic{Dead groups:} + A group of pieces is considered \textit{dead} if it is cut off from all other same-colored groups and is not + adjacent to a claimed region. At the end of each turn (except each player's first), erase all + dead pieces that belong to the inactive player. + + \generic{Restrictions:} + \begin{itemize}[itemsep=1mm] + \item A piece may not be placed inside a claimed region. + \item A piece may not be placed adjacent to two (or more) same-colored pieces if those pieces are also + neighbors of each other. In other words, you may not form small triangles of one color. + + \item When placing two pieces adjacent to each other in a tun, they may not form a + straight line with a third pre-existing piece of their color. + \end{itemize} + + + \generic{Ending the game:} + The game ends when both players run out of legal moves. + Each player's score is calculated by counting the number of empty spaces in regions they have claimed. \par + The player with the highest score wins. + + \vfill + + \begin{ORMCbox}{Notes}{ogrape!10!white}{ogrape} + \begin{itemize} + \item + Each player needs to make multiple groups before the first player's second turn. \par + Otherwise, all their pieces will be removed from the game, resulting in an early loss. \par + Do not make your first moves next to each other! + + \item Groups are easiest to secure near the corners or along the edges. Play there first. \par + \end{itemize} + \end{ORMCbox} + + + + + \pagebreak + + \board{1.1} + \vfill + \board{1.1} + + + \pagebreak + +\end{document} \ No newline at end of file diff --git a/src/Warm-Ups/Rootbound/meta.toml b/src/Warm-Ups/Rootbound/meta.toml new file mode 100644 index 0000000..0206584 --- /dev/null +++ b/src/Warm-Ups/Rootbound/meta.toml @@ -0,0 +1,6 @@ +[metadata] +title = "Rootbound" + +[publish] +handout = true +solutions = false diff --git a/src/Warm-Ups/Sysadmin/main.tex b/src/Warm-Ups/Sysadmin/main.tex new file mode 100755 index 0000000..850ff53 --- /dev/null +++ b/src/Warm-Ups/Sysadmin/main.tex @@ -0,0 +1,89 @@ +\documentclass[ + solutions, + hidewarning, + singlenumbering, + nopagenumber +]{../../../lib/tex/ormc_handout} +\usepackage{../../../lib/tex/macros} + + + +\usepackage{tikz} + + +\title{The Sysadmin's Warm-Up} +\uptitler{\smallurl{}} +\subtitle{Prepared by Mark on \today} + + +\begin{document} + + \maketitle + + + Most of you have seen a hard drive. Many have touched one, and a lucky few have poked around inside one. These devices have two interesting properties: + + \begin{enumerate} + \item They hold valuable data + \item They eventually fail + \end{enumerate} + + Needless to say, this is a problem. \par + We need to design a system that allows hard drives to fail without data loss. + + \definition{} + You can think of a hard drive as a long string of bits. \par + Assume all hard drives can store 1 TiB of data. + + \begin{center} + \begin{tikzpicture} + + \node[above] at (1/2, 0) {Drive A}; + \draw (0cm, 0cm) -- (0cm, -3cm); + \draw (1cm, 0cm) -- (1cm, -3cm); + \foreach \i in {0,...,-6} { + \draw (0cm,\i cm / 2) -- (1cm ,\i cm / 2); + } + + \node at (1/2, - 1 / 4) {1}; + \node at (1/2, - 3 / 4) {1}; + \node at (1/2, - 5 / 4) {0}; + \node at (1/2, - 7 / 4) {...}; + \node at (1/2, - 9 / 4) {1}; + \node at (1/2, -11 / 4) {0}; + + + \node[above] at (5/2, 0) {Drive B}; + \draw (2cm, 0cm) -- (2cm, -3cm); + \draw (3cm, 0cm) -- (3cm, -3cm); + \foreach \i in {0,...,-6} { + \draw (2cm,\i cm / 2) -- (3cm ,\i cm / 2); + } + + \node at (5/2, - 1 / 4) {0}; + \node at (5/2, - 3 / 4) {1}; + \node at (5/2, - 5 / 4) {0}; + \node at (5/2, - 7 / 4) {...}; + \node at (5/2, - 9 / 4) {0}; + \node at (5/2, -11 / 4) {1}; + \end{tikzpicture} + \end{center} + + \problem{} + Suppose we have two hard drives. How can we arrange our data so that... + \begin{enumerate} + \item We get 1 TiB of usable storage + \item We lose no data if any one drive fails + \end{enumerate} + + \vfill + + \problem{} + Suppose we have three hard drives. How can we arrange our data so that... + \begin{enumerate} + \item We get 2 TiB of usable storage + \item We lose no data if any one drive fails + \end{enumerate} + + \vfill +\end{document} \ No newline at end of file diff --git a/src/Warm-Ups/Sysadmin/meta.toml b/src/Warm-Ups/Sysadmin/meta.toml new file mode 100644 index 0000000..e7dabe0 --- /dev/null +++ b/src/Warm-Ups/Sysadmin/meta.toml @@ -0,0 +1,6 @@ +[metadata] +title = "The Sysadmin's Warm-Up" + +[publish] +handout = true +solutions = false diff --git a/src/Warm-Ups/Travellers/main.tex b/src/Warm-Ups/Travellers/main.tex new file mode 100755 index 0000000..cc38713 --- /dev/null +++ b/src/Warm-Ups/Travellers/main.tex @@ -0,0 +1,30 @@ +\documentclass[ + solutions, + singlenumbering, + nopagenumber +]{../../../lib/tex/ormc_handout} +\usepackage{../../../lib/tex/macros} + +\title{Warm-Up: Travellers} +\uptitler{\smallurl{}} +\subtitle{Prepared by Mark on \today} + +\begin{document} + + \maketitle + + \problem{} + Four travellers are on a plane, each moving along a straight line at an arbitrary constant speed. \par + No two of their paths are parallel, and no three intersect at the same point. \par + We know that traveller A has met travelers B, C, and D, \par + and that traveller B has met C and D (and A). Show that C and D must also have met. \par + + \begin{solution} + When a body travels at a constant speed, its graph with respect to time is a straight line. \par + So, we add time axis in the third dimension, perpendicular to our plane. \par + Naturally, the projection of each of these onto the plane corresponds to a road. + + Now, note that two intersecting lines define a plane and use the conditions in the problem to show that no two lines are parallel. + \end{solution} + +\end{document} \ No newline at end of file diff --git a/src/Warm-Ups/Travellers/meta.toml b/src/Warm-Ups/Travellers/meta.toml new file mode 100644 index 0000000..6da7493 --- /dev/null +++ b/src/Warm-Ups/Travellers/meta.toml @@ -0,0 +1,6 @@ +[metadata] +title = "Travellers" + +[publish] +handout = true +solutions = true diff --git a/src/Warm-Ups/What's an AST/main.tex b/src/Warm-Ups/What's an AST/main.tex new file mode 100755 index 0000000..39dd677 --- /dev/null +++ b/src/Warm-Ups/What's an AST/main.tex @@ -0,0 +1,43 @@ +\documentclass[ + solutions, + hidewarning, + singlenumbering, + nopagenumber +]{../../../lib/tex/ormc_handout} +\usepackage{../../../lib/tex/macros} + + +\usepackage[linguistics]{forest} + + + +\title{Warm-Up: What's an AST?} +\uptitler{\smallurl{}} +\subtitle{Prepared by Mark on \today. \\ Based on a true story.} + +\begin{document} + + \maketitle + + Say you have a valid string of simple arithmetic that contains no unary operators (like $3!$ or $-4$) and no parenthesis: + $$ + 3 + 9 \times 8 \div 5 \land 6 + $$ + + You may assume that all numbers and operators in this string consist of exactly one character. \\ + + Devise an algorithm that turns this string into a tree (as shown below), respecting the order of operations $[\land, \times, \div, +, -]$. + + \begin{center} + \begin{forest} + [$+$ + [3] + [$\div$ + [$\times$[9][8]] + [$\land$[5][6]] + ] + ] + \end{forest} + \end{center} + +\end{document} \ No newline at end of file diff --git a/src/Warm-Ups/What's an AST/meta.toml b/src/Warm-Ups/What's an AST/meta.toml new file mode 100644 index 0000000..ee63eb3 --- /dev/null +++ b/src/Warm-Ups/What's an AST/meta.toml @@ -0,0 +1,6 @@ +[metadata] +title = "What's an AST?" + +[publish] +handout = true +solutions = false diff --git a/src/Warm-Ups/Wild Tic-Tac-Toe/main.tex b/src/Warm-Ups/Wild Tic-Tac-Toe/main.tex new file mode 100755 index 0000000..b006ae0 --- /dev/null +++ b/src/Warm-Ups/Wild Tic-Tac-Toe/main.tex @@ -0,0 +1,66 @@ +\documentclass[ + solutions, + hidewarning, + singlenumbering, + nopagenumber +]{../../../lib/tex/ormc_handout} +\usepackage{../../../lib/tex/macros} + +% x,y,scale,style +\def\ttt#1#2#3#4{ + \draw[#4] (#1, #2+#3) -- (#1+#3+#3+#3, #2+#3); + \draw[#4] (#1, #2+#3+#3) -- (#1+#3+#3+#3, #2+#3+#3); + \draw[#4] (#1+#3, #2) -- (#1+#3, #2+#3+#3+#3); + \draw[#4] (#1+#3+#3, #2) -- (#1+#3+#3, #2+#3+#3+#3); +} + + +\title{Warm-Up: Wild Tic-Tac-Toe} +\uptitler{\smallurl{}} +\subtitle{Prepared by Mark on \today.} + +\begin{document} + + \maketitle + + + \problem{} + In wild tic-tac-toe, players may place either an X or O on each move. The player that first completes a + row of any three symbols wins. Show that the first player always has a winning strategy. + + \vfill + \begin{center} + \begin{tikzpicture}[scale=0.60] + \ttt{0}{0}{2}{line width=0.3mm} + \ttt{7}{0}{2}{line width=0.3mm} + \ttt{14}{0}{2}{line width=0.3mm} + + \ttt{0}{7}{2}{line width=0.3mm} + \ttt{7}{7}{2}{line width=0.3mm} + \ttt{14}{7}{2}{line width=0.3mm} + \end{tikzpicture} + \end{center} + + \vfill + + \problem{} + Now, say the first player to complete a row loses. Who has a winning strategy now? + + \vfill + \begin{center} + \begin{tikzpicture}[scale=0.60] + \ttt{0}{0}{2}{line width=0.3mm} + \ttt{7}{0}{2}{line width=0.3mm} + \ttt{14}{0}{2}{line width=0.3mm} + + \ttt{0}{7}{2}{line width=0.3mm} + \ttt{7}{7}{2}{line width=0.3mm} + \ttt{14}{7}{2}{line width=0.3mm} + \end{tikzpicture} + \end{center} + + + \vfill + \pagebreak + +\end{document} \ No newline at end of file diff --git a/src/Warm-Ups/Wild Tic-Tac-Toe/meta.toml b/src/Warm-Ups/Wild Tic-Tac-Toe/meta.toml new file mode 100644 index 0000000..be38d96 --- /dev/null +++ b/src/Warm-Ups/Wild Tic-Tac-Toe/meta.toml @@ -0,0 +1,6 @@ +[metadata] +title = "Wild Tic-Tac-Toe" + +[publish] +handout = true +solutions = false diff --git a/src/Warm-Ups/Zeno's Furniture/main.tex b/src/Warm-Ups/Zeno's Furniture/main.tex new file mode 100755 index 0000000..5b696d4 --- /dev/null +++ b/src/Warm-Ups/Zeno's Furniture/main.tex @@ -0,0 +1,150 @@ +\documentclass[ + solutions, + singlenumbering, + nopagenumber +]{../../../lib/tex/ormc_handout} +\usepackage{../../../lib/tex/macros} + + +\makeatletter +\newcommand{\thisone}{ + \if@solutions + {\color{red} $\Leftarrow$ \texttt{this one}} + \else\fi +} + +\title{Zeno's Furniture} +\uptitlel{Warm Ups} +\uptitler{\smallurl{}} +\subtitle{Prepared by Mark on \today} + +\begin{document} + + \maketitle + + Zeno Furniture sells exactly five types of furniture: + \begin{itemize} + \item Footstools + \item Hutches + \item Sideboards + \item Tables + \item Vanities + \end{itemize} + Irene buys four items, each of a different type, + and each made of exactly one kind of wood: + \begin{itemize} + \item Maple + \item Oak + \item Pine + \item Rosewood + \end{itemize} + + The following conditions govern Irene's purchases: + \begin{itemize} + \item Any vanity she buys is Maple. + \item Any rosewood item she buys is a sideboard. + \item If she buys a vanity, she does not buy a footstool. + \item If she buys a footstool, she also buys a table made of the same material. + \item Irene does not buy an oak table. + \item Exactly two of the items she buys are made of the same kind of wood. + \end{itemize} + + + + + \problem{} + Which one of the following could be an accurate + list of the items Irene buys? \par + \begin{itemize} + \item maple footstool, maple hutch, rosewood sideboard, maple table + \item oak hutch, rosewood sideboard, pine table, oak vanity + \item rosewood hutch, maple sideboard, oak table, maple vanity + \item pine footstool, rosewood sideboard, pine table, maple vanity + \item maple footstool, pine hutch, oak sideboard, maple table \thisone{} + \end{itemize} + \vfill + + + \problem{} + If Irene buys one item made of rosewood and two items made + of maple, then which one of the following pairs could be two + of the items she buys? + \begin{itemize} + \item a rosewood sideboard and an oak footstool + \item an oak hutch and a pine sideboard + \item an oak hutch and a maple table \thisone{} + \item a maple sideboard and a maple vanity + \item a maple hutch and a maple table + \end{itemize} + \vfill + \pagebreak + + + \problem{} + Which one of the following is a complete and accurate list + of all the woods any footstool that Irene buys could be made of? + \begin{itemize} + \item maple, oak + \item maple, pine \thisone{} + \item maple, rosewood + \item maple, oak, pine + \item maple, oak, pine, rosewood + \end{itemize} + \vfill + + + \problem{} + Suppose Irene buys a footstool. Then which one of the following + is a complete and accurate list of items and any one of which she + could buy in maple? + \begin{itemize} + \item footstool, hutch, sideboard, table, vanity + \item footstool, hutch, sideboard, table \thisone{} + \item footstool, hutch, sideboard + \item footstool, hutch + \item footstool + \end{itemize} + \vfill + + \problem{} + Which one of the following cannot be the two items Irene + buys that are made of the same wood as each other? + \begin{itemize} + \item footstool, hutch \thisone{} + \item hutch, sideboard + \item hutch, table + \item sideboard, vanity + \item table, vanity + \end{itemize} + \vfill + \pagebreak + + \problem{} + If Irene does not buy an item made of maple, then each of the + following must be true except... + \begin{itemize} + \item Irene buys a footstool + \item Irene buys a pine hutch \thisone{} + \item Irene buys a rosewood sideboard + \item Irene buys exactly one item made of oak + \item Irene buys exactly two items made of pine + \end{itemize} + \vfill + + + \problem{} + Suppose the condition that Irene does not buy an oak table is + replaced with the condition that she does not buy a pine table. + If all the other conditions hold as originally given, which of the + following cannot be true? + \begin{itemize} + \item Irene buys an oak footstool. + \item Irene buys a hutch and a table made of the same wood. + \item Irene buys a vanity, but she does not buy an oak table. + \item Irene buys a maple table and an oak hutch. + \item Irene buys a rosewood sideboard and exactly two items made of pine. \thisone{} + \end{itemize} + \vfill + \pagebreak + +\end{document} \ No newline at end of file diff --git a/src/Warm-Ups/Zeno's Furniture/meta.toml b/src/Warm-Ups/Zeno's Furniture/meta.toml new file mode 100644 index 0000000..7fd5552 --- /dev/null +++ b/src/Warm-Ups/Zeno's Furniture/meta.toml @@ -0,0 +1,6 @@ +[metadata] +title = "Zeno's Furniture" + +[publish] +handout = true +solutions = true diff --git a/src/Warm-Ups/fmod/main.tex b/src/Warm-Ups/fmod/main.tex new file mode 100755 index 0000000..693d94e --- /dev/null +++ b/src/Warm-Ups/fmod/main.tex @@ -0,0 +1,22 @@ +\documentclass[ + solutions, + hidewarning, + singlenumbering, + nopagenumber +]{../../../lib/tex/ormc_handout} +\usepackage{../../../lib/tex/macros} + + +\title{Warm-Up: \texttt{fmod}} +\uptitler{\smallurl{}} +\subtitle{Prepared by Mark on \today.} + +\begin{document} + + \maketitle + + \problem{} + I'm sure you're all familiar with how \texttt{mod(a, b)} and \texttt{remainder(a, b)} work with integers. \par + Devise an equivalent for floats (i.e, real numbers). + +\end{document} \ No newline at end of file diff --git a/src/Warm-Ups/fmod/meta.toml b/src/Warm-Ups/fmod/meta.toml new file mode 100644 index 0000000..f031491 --- /dev/null +++ b/src/Warm-Ups/fmod/meta.toml @@ -0,0 +1,6 @@ +[metadata] +title = "fmod" + +[publish] +handout = true +solutions = false