diff --git a/src/Warm-Ups/What's an AST/main.tex b/src/Warm-Ups/What's an AST/main.tex deleted file mode 100755 index 39dd677..0000000 --- a/src/Warm-Ups/What's an AST/main.tex +++ /dev/null @@ -1,43 +0,0 @@ -\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/main.typ b/src/Warm-Ups/What's an AST/main.typ new file mode 100644 index 0000000..6c32b92 --- /dev/null +++ b/src/Warm-Ups/What's an AST/main.typ @@ -0,0 +1,74 @@ +#import "@local/handout:0.1.0": * +#import "@preview/cetz:0.3.1" + +#show: handout.with( + title: [Warm-Up: What's an AST?], + by: "Mark", + subtitle: "Based on a true story.", +) + +#problem() +Say we have a valid string of simple arithmetic that contains \ +no unary operators (like $3!$ or $-4$) and no parenthesis: + +#v(2mm) +$ + 3 + 9 times 8 div 5 and 6 +$ +#v(2mm) + +You may assume that all numbers and operators in this string consist of exactly one character. \ + +Devise an algorithm that turns such strings into a tree (as shown below), \ +respecting the order of operations $[and, times, div, +, -]$. + +#v(2mm) + +#align( + center, + cetz.canvas({ + import cetz.draw: * + + // spell:off + content((0, 0), $+$, name: "r") + content((-0.5, -1), $3$, name: "a") + content((0.5, -1), $div$, name: "b") + content((-0.3, -2), $times$, name: "ba") + content((1.3, -2), $and$, name: "bb") + content((-0.8, -3), $9$, name: "baa") + content((0.2, -3), $8$, name: "bab") + content((0.8, -3), $5$, name: "bba") + content((1.8, -3), $6$, name: "bbb") + // spell:on + + // Zero-sized arrows are a hack for offset. + set-style( + stroke: (thickness: 0.3mm), + mark: ( + start: ( + symbol: "|", + offset: 0.25, + width: 0mm, + length: 0mm, + ), + end: ( + symbol: "|", + offset: 0.25, + width: 0mm, + length: 0mm, + ), + ), + ) + + // spell:off + line("r", "a") + line("r", "b") + line("b", "ba") + line("b", "bb") + line("ba", "baa") + line("ba", "bab") + line("bb", "bba") + line("bb", "bbb") + // spell:on + }), +)