Update cetz & ci
This commit is contained in:
@ -26,7 +26,7 @@ jobs:
|
|||||||
|
|
||||||
- name: "Download Typstyle"
|
- name: "Download Typstyle"
|
||||||
run: |
|
run: |
|
||||||
wget -q "https://github.com/Enter-tainer/typstyle/releases/download/v0.12.14/typstyle-x86_64-unknown-linux-musl"
|
wget -q "https://github.com/Enter-tainer/typstyle/releases/download/v0.13.17/typstyle-x86_64-unknown-linux-musl"
|
||||||
chmod +x typstyle-x86_64-unknown-linux-musl
|
chmod +x typstyle-x86_64-unknown-linux-musl
|
||||||
|
|
||||||
- name: Check typst formatting
|
- name: Check typst formatting
|
||||||
@ -62,7 +62,7 @@ jobs:
|
|||||||
# more control anyway.
|
# more control anyway.
|
||||||
- name: "Download Typst"
|
- name: "Download Typst"
|
||||||
run: |
|
run: |
|
||||||
wget -q "https://github.com/typst/typst/releases/download/v0.12.0/typst-x86_64-unknown-linux-musl.tar.xz"
|
wget -q "https://github.com/typst/typst/releases/download/v0.13.1/typst-x86_64-unknown-linux-musl.tar.xz"
|
||||||
tar -xf "typst-x86_64-unknown-linux-musl.tar.xz"
|
tar -xf "typst-x86_64-unknown-linux-musl.tar.xz"
|
||||||
mv "typst-x86_64-unknown-linux-musl/typst" .
|
mv "typst-x86_64-unknown-linux-musl/typst" .
|
||||||
rm "typst-x86_64-unknown-linux-musl.tar.xz"
|
rm "typst-x86_64-unknown-linux-musl.tar.xz"
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#import "@local/handout:0.1.0": *
|
#import "@local/handout:0.1.0": *
|
||||||
#import "@preview/cetz:0.3.1"
|
#import "@preview/cetz:0.4.2"
|
||||||
|
|
||||||
= Floats
|
= Floats
|
||||||
#definition()
|
#definition()
|
||||||
@ -33,72 +33,66 @@ Another way we can interpret a bit string is as a _signed floating-point decimal
|
|||||||
Floats represent a subset of the real numbers, and are interpreted as follows: \
|
Floats represent a subset of the real numbers, and are interpreted as follows: \
|
||||||
#note([The following only applies to floats that consist of 32 bits. We won't encounter any others today.])
|
#note([The following only applies to floats that consist of 32 bits. We won't encounter any others today.])
|
||||||
|
|
||||||
#align(
|
#align(center, box(inset: 2mm, cetz.canvas({
|
||||||
center,
|
import cetz.draw: *
|
||||||
box(
|
|
||||||
inset: 2mm,
|
|
||||||
cetz.canvas({
|
|
||||||
import cetz.draw: *
|
|
||||||
|
|
||||||
let chars = (
|
let chars = (
|
||||||
`0`,
|
`0`,
|
||||||
`b`,
|
`b`,
|
||||||
`0`,
|
`0`,
|
||||||
`_`,
|
`_`,
|
||||||
`0`,
|
`0`,
|
||||||
`0`,
|
`0`,
|
||||||
`0`,
|
`0`,
|
||||||
`0`,
|
`0`,
|
||||||
`0`,
|
`0`,
|
||||||
`0`,
|
`0`,
|
||||||
`0`,
|
`0`,
|
||||||
`0`,
|
`0`,
|
||||||
`_`,
|
`_`,
|
||||||
`0`,
|
`0`,
|
||||||
`0`,
|
`0`,
|
||||||
`0`,
|
`0`,
|
||||||
`0`,
|
`0`,
|
||||||
`0`,
|
`0`,
|
||||||
`0`,
|
`0`,
|
||||||
`0`,
|
`0`,
|
||||||
`_`,
|
`_`,
|
||||||
`0`,
|
`0`,
|
||||||
`0`,
|
`0`,
|
||||||
`0`,
|
`0`,
|
||||||
`0`,
|
`0`,
|
||||||
`0`,
|
`0`,
|
||||||
`0`,
|
`0`,
|
||||||
`0`,
|
`0`,
|
||||||
`0`,
|
`0`,
|
||||||
`_`,
|
`_`,
|
||||||
`0`,
|
`0`,
|
||||||
`0`,
|
`0`,
|
||||||
`0`,
|
`0`,
|
||||||
`0`,
|
`0`,
|
||||||
`0`,
|
`0`,
|
||||||
`0`,
|
`0`,
|
||||||
`0`,
|
`0`,
|
||||||
`0`,
|
`0`,
|
||||||
)
|
)
|
||||||
|
|
||||||
let x = 0
|
let x = 0
|
||||||
for c in chars {
|
for c in chars {
|
||||||
content((x, 0), c)
|
content((x, 0), c)
|
||||||
x += 0.25
|
x += 0.25
|
||||||
}
|
}
|
||||||
|
|
||||||
let y = -0.4
|
let y = -0.4
|
||||||
line((0.3, y), (0.65, y))
|
line((0.3, y), (0.65, y))
|
||||||
content((0.45, y - 0.2), [s])
|
content((0.45, y - 0.2), [s])
|
||||||
|
|
||||||
line((0.85, y), (2.9, y))
|
line((0.85, y), (2.9, y))
|
||||||
content((1.9, y - 0.2), [exponent])
|
content((1.9, y - 0.2), [exponent])
|
||||||
|
|
||||||
line((3.10, y), (9.4, y))
|
line((3.10, y), (9.4, y))
|
||||||
content((6.3, y - 0.2), [fraction])
|
content((6.3, y - 0.2), [fraction])
|
||||||
}),
|
})))
|
||||||
),
|
|
||||||
)
|
|
||||||
|
|
||||||
- The first bit denotes the sign of the float's value
|
- The first bit denotes the sign of the float's value
|
||||||
We'll label it $s$. \
|
We'll label it $s$. \
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#import "@local/handout:0.1.0": *
|
#import "@local/handout:0.1.0": *
|
||||||
#import "@preview/cetz:0.3.1"
|
#import "@preview/cetz:0.4.2"
|
||||||
#import "@preview/cetz-plot:0.1.0": plot, chart
|
#import "@preview/cetz-plot:0.1.2": chart, plot
|
||||||
|
|
||||||
= Integers and Floats
|
= Integers and Floats
|
||||||
|
|
||||||
@ -44,19 +44,11 @@ This allows us to improve the average error of our linear approximation:
|
|||||||
{
|
{
|
||||||
let domain = (0, 1)
|
let domain = (0, 1)
|
||||||
|
|
||||||
plot.add(
|
plot.add(f1, domain: domain, label: $log(1+x)$, style: (
|
||||||
f1,
|
stroke: ogrape,
|
||||||
domain: domain,
|
))
|
||||||
label: $log(1+x)$,
|
|
||||||
style: (stroke: ogrape),
|
|
||||||
)
|
|
||||||
|
|
||||||
plot.add(
|
plot.add(f2, domain: domain, label: $x$, style: (stroke: oblue))
|
||||||
f2,
|
|
||||||
domain: domain,
|
|
||||||
label: $x$,
|
|
||||||
style: (stroke: oblue),
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
@ -90,19 +82,11 @@ This allows us to improve the average error of our linear approximation:
|
|||||||
{
|
{
|
||||||
let domain = (0, 1)
|
let domain = (0, 1)
|
||||||
|
|
||||||
plot.add(
|
plot.add(f1, domain: domain, label: $log(1+x)$, style: (
|
||||||
f1,
|
stroke: ogrape,
|
||||||
domain: domain,
|
))
|
||||||
label: $log(1+x)$,
|
|
||||||
style: (stroke: ogrape),
|
|
||||||
)
|
|
||||||
|
|
||||||
plot.add(
|
plot.add(f2, domain: domain, label: $x$, style: (stroke: oblue))
|
||||||
f2,
|
|
||||||
domain: domain,
|
|
||||||
label: $x$,
|
|
||||||
style: (stroke: oblue),
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
@ -120,16 +104,13 @@ We won't bother with this---we'll simply leave the correction term as an opaque
|
|||||||
|
|
||||||
#v(1fr)
|
#v(1fr)
|
||||||
|
|
||||||
#note(
|
#note(type: "Note", [
|
||||||
type: "Note",
|
"Average error" above is simply the area of the region between the two graphs:
|
||||||
[
|
$
|
||||||
"Average error" above is simply the area of the region between the two graphs:
|
integral_0^1 abs(#v(1mm) log(1+x)_2 - (x+epsilon) #v(1mm))
|
||||||
$
|
$
|
||||||
integral_0^1 abs( #v(1mm) log(1+x)_2 - (x+epsilon) #v(1mm))
|
Feel free to ignore this note, it isn't a critical part of this handout.
|
||||||
$
|
])
|
||||||
Feel free to ignore this note, it isn't a critical part of this handout.
|
|
||||||
],
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
#pagebreak()
|
#pagebreak()
|
||||||
@ -149,12 +130,11 @@ $
|
|||||||
Let $E$ and $F$ be the exponent and float bits of $x_f$. \
|
Let $E$ and $F$ be the exponent and float bits of $x_f$. \
|
||||||
We then have:
|
We then have:
|
||||||
$
|
$
|
||||||
log_2(x_f)
|
log_2(x_f) & = log_2 ( 2^(E-127) times (1 + (F) / (2^23)) ) \
|
||||||
&= log_2 ( 2^(E-127) times (1 + (F) / (2^23)) ) \
|
& = E - 127 + log_2(1 + F / (2^23)) \
|
||||||
&= E - 127 + log_2(1 + F / (2^23)) \
|
& approx E-127 + F / (2^23) + epsilon \
|
||||||
& approx E-127 + F / (2^23) + epsilon \
|
& = 1 / (2^23)(2^23 E + F) - 127 + epsilon \
|
||||||
&= 1 / (2^23)(2^23 E + F) - 127 + epsilon \
|
& = 1 / (2^23)(x_i) - 127 + epsilon
|
||||||
&= 1 / (2^23)(x_i) - 127 + epsilon
|
|
||||||
$
|
$
|
||||||
])
|
])
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#import "@local/handout:0.1.0": *
|
#import "@local/handout:0.1.0": *
|
||||||
#import "@preview/cetz:0.3.1"
|
#import "@preview/cetz:0.4.2"
|
||||||
|
|
||||||
|
|
||||||
// Shorthand, we'll be using these a lot.
|
// Shorthand, we'll be using these a lot.
|
||||||
@ -7,35 +7,31 @@
|
|||||||
#let tm = sym.times.circle
|
#let tm = sym.times.circle
|
||||||
|
|
||||||
#let graphgrid(inner_content) = {
|
#let graphgrid(inner_content) = {
|
||||||
align(
|
align(center, box(inset: 3mm, cetz.canvas({
|
||||||
center,
|
import cetz.draw: *
|
||||||
box(
|
let x = 5.25
|
||||||
inset: 3mm,
|
|
||||||
cetz.canvas({
|
|
||||||
import cetz.draw: *
|
|
||||||
let x = 5.25
|
|
||||||
|
|
||||||
grid(
|
grid(
|
||||||
(0, 0), (x, x), step: 0.75,
|
(0, 0),
|
||||||
stroke: luma(100) + 0.3mm
|
(x, x),
|
||||||
)
|
step: 0.75,
|
||||||
|
stroke: luma(100) + 0.3mm,
|
||||||
|
)
|
||||||
|
|
||||||
if (inner_content != none) {
|
if (inner_content != none) {
|
||||||
inner_content
|
inner_content
|
||||||
}
|
}
|
||||||
|
|
||||||
mark((0, x + 0.5), (0, x + 1), symbol: ">", fill: black, scale: 1)
|
mark((0, x + 0.5), (0, x + 1), symbol: ">", fill: black, scale: 1)
|
||||||
mark((x + 0.5, 0), (x + 1, 0), symbol: ">", fill: black, scale: 1)
|
mark((x + 0.5, 0), (x + 1, 0), symbol: ">", fill: black, scale: 1)
|
||||||
|
|
||||||
line(
|
line(
|
||||||
(0, x + 0.25),
|
(0, x + 0.25),
|
||||||
(0, 0),
|
(0, 0),
|
||||||
(x + 0.25, 0),
|
(x + 0.25, 0),
|
||||||
stroke: 0.75mm + black,
|
stroke: 0.75mm + black,
|
||||||
)
|
)
|
||||||
}),
|
})))
|
||||||
),
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Adds extra padding to an equation.
|
/// Adds extra padding to an equation.
|
||||||
@ -48,23 +44,16 @@
|
|||||||
/// Note that there are newlines between the $ and content,
|
/// Note that there are newlines between the $ and content,
|
||||||
/// this gives us display math (which is what we want when using this macro)
|
/// this gives us display math (which is what we want when using this macro)
|
||||||
#let eqnbox(eqn) = {
|
#let eqnbox(eqn) = {
|
||||||
align(
|
align(center, box(
|
||||||
center,
|
inset: 3mm,
|
||||||
box(
|
eqn,
|
||||||
inset: 3mm,
|
))
|
||||||
eqn,
|
|
||||||
),
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#let dotline(a, b) = {
|
#let dotline(a, b) = {
|
||||||
cetz.draw.line(
|
cetz.draw.line(a, b, stroke: (
|
||||||
a,
|
dash: "dashed",
|
||||||
b,
|
thickness: 0.5mm,
|
||||||
stroke: (
|
paint: ored,
|
||||||
dash: "dashed",
|
))
|
||||||
thickness: 0.5mm,
|
|
||||||
paint: ored,
|
|
||||||
),
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
@ -1,21 +1,18 @@
|
|||||||
#import "@local/handout:0.1.0": *
|
#import "@local/handout:0.1.0": *
|
||||||
#import "../macros.typ": *
|
#import "../macros.typ": *
|
||||||
#import "@preview/cetz:0.3.1"
|
#import "@preview/cetz:0.4.2"
|
||||||
|
|
||||||
= Tropical Polynomials
|
= Tropical Polynomials
|
||||||
|
|
||||||
#definition()
|
#definition()
|
||||||
A _polynomial_ is an expression formed by adding and multiplying numbers and a variable $x$. \
|
A _polynomial_ is an expression formed by adding and multiplying numbers and a variable $x$. \
|
||||||
Every polynomial can be written as
|
Every polynomial can be written as
|
||||||
#align(
|
#align(center, box(
|
||||||
center,
|
inset: 3mm,
|
||||||
box(
|
$
|
||||||
inset: 3mm,
|
c_0 + c_1 x + c_2 x^2 + ... + c_n x^n
|
||||||
$
|
$,
|
||||||
c_0 + c_1 x + c_2 x^2 + ... + c_n x^n
|
))
|
||||||
$,
|
|
||||||
),
|
|
||||||
)
|
|
||||||
for some nonnegative integer $n$ and coefficients $c_0, c_1, ..., c_n$. \
|
for some nonnegative integer $n$ and coefficients $c_0, c_1, ..., c_n$. \
|
||||||
The _degree_ of a polynomial is the largest $n$ for which $c_n$ is nonzero.
|
The _degree_ of a polynomial is the largest $n$ for which $c_n$ is nonzero.
|
||||||
|
|
||||||
@ -43,15 +40,12 @@ In this section, we will analyze tropical polynomials:
|
|||||||
#definition()
|
#definition()
|
||||||
A _tropical_ polynomial is a polynomial that uses tropical addition and multiplication. \
|
A _tropical_ polynomial is a polynomial that uses tropical addition and multiplication. \
|
||||||
In other words, it is an expression of the form
|
In other words, it is an expression of the form
|
||||||
#align(
|
#align(center, box(
|
||||||
center,
|
inset: 3mm,
|
||||||
box(
|
$
|
||||||
inset: 3mm,
|
c_0 #tp (c_1 #tm x) #tp (c_2 #tm x^2) #tp ... #tp (c_n #tm x^n)
|
||||||
$
|
$,
|
||||||
c_0 #tp (c_1 #tm x) #tp (c_2 #tm x^2) #tp ... #tp (c_n #tm x^n)
|
))
|
||||||
$,
|
|
||||||
),
|
|
||||||
)
|
|
||||||
where all exponents represent repeated tropical multiplication.
|
where all exponents represent repeated tropical multiplication.
|
||||||
|
|
||||||
#pagebreak() // MARK: page
|
#pagebreak() // MARK: page
|
||||||
@ -66,7 +60,7 @@ Draw a graph of the tropical polynomial $f(x) = x^2 #tp 1x #tp 4$. \
|
|||||||
#if_no_solutions(graphgrid(none))
|
#if_no_solutions(graphgrid(none))
|
||||||
|
|
||||||
#solution([
|
#solution([
|
||||||
$f(x) = min(2x , 1+x, 4)$, which looks like:
|
$f(x) = min(2x, 1+x, 4)$, which looks like:
|
||||||
|
|
||||||
#graphgrid({
|
#graphgrid({
|
||||||
import cetz.draw: *
|
import cetz.draw: *
|
||||||
@ -90,15 +84,12 @@ Draw a graph of the tropical polynomial $f(x) = x^2 #tp 1x #tp 4$. \
|
|||||||
#problem()
|
#problem()
|
||||||
Now, factor $f(x) = x^2 #tp 1x #tp 4$ into two polynomials with degree 1. \
|
Now, factor $f(x) = x^2 #tp 1x #tp 4$ into two polynomials with degree 1. \
|
||||||
In other words, find $r$ and $s$ so that
|
In other words, find $r$ and $s$ so that
|
||||||
#align(
|
#align(center, box(
|
||||||
center,
|
inset: 3mm,
|
||||||
box(
|
$
|
||||||
inset: 3mm,
|
x^2 #tp 1x #tp 4 = (x #tp r)(x #tp s)
|
||||||
$
|
$,
|
||||||
x^2 #tp 1x #tp 4 = (x #tp r)(x #tp s)
|
))
|
||||||
$,
|
|
||||||
),
|
|
||||||
)
|
|
||||||
|
|
||||||
we will call $r$ and $s$ the _roots_ of $f$.
|
we will call $r$ and $s$ the _roots_ of $f$.
|
||||||
|
|
||||||
@ -159,15 +150,19 @@ Find a factorization of $f$ in the form $a(x #tp r)(x#tp s)$.
|
|||||||
#solution([
|
#solution([
|
||||||
We (tropically) factor out $-2$ to get
|
We (tropically) factor out $-2$ to get
|
||||||
|
|
||||||
#eqnbox($
|
#eqnbox(
|
||||||
f(x) = -2(x^2 #tp 2x #tp 10)
|
$
|
||||||
$)
|
f(x) = -2(x^2 #tp 2x #tp 10)
|
||||||
|
$,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
by the same process as the previous problem, we get
|
by the same process as the previous problem, we get
|
||||||
#eqnbox($
|
#eqnbox(
|
||||||
f(x) = -2(x #tp 2)(x #tp 8)
|
$
|
||||||
$)
|
f(x) = -2(x #tp 2)(x #tp 8)
|
||||||
|
$,
|
||||||
|
)
|
||||||
])
|
])
|
||||||
|
|
||||||
#v(1fr)
|
#v(1fr)
|
||||||
@ -236,11 +231,11 @@ Graph $f(x) = 1x^2 #tp 3x #tp 5$.
|
|||||||
#problem()
|
#problem()
|
||||||
Find a factorization of $f$ in the form $a(x #tp r)(x#tp s)$.
|
Find a factorization of $f$ in the form $a(x #tp r)(x#tp s)$.
|
||||||
|
|
||||||
#solution(
|
#solution(eqnbox(
|
||||||
eqnbox($
|
$
|
||||||
f(x) = 1x^2 #tp 3 x #tp 5 = 1(x #tp 2)^2
|
f(x) = 1x^2 #tp 3 x #tp 5 = 1(x #tp 2)^2
|
||||||
$),
|
$,
|
||||||
)
|
))
|
||||||
|
|
||||||
#v(1fr)
|
#v(1fr)
|
||||||
|
|
||||||
@ -263,23 +258,21 @@ Graph $f(x) = 2x^2 #tp 4x #tp 4$.
|
|||||||
|
|
||||||
#if_no_solutions(graphgrid(none))
|
#if_no_solutions(graphgrid(none))
|
||||||
|
|
||||||
#solution(
|
#solution(graphgrid({
|
||||||
graphgrid({
|
import cetz.draw: *
|
||||||
import cetz.draw: *
|
let step = 0.75
|
||||||
let step = 0.75
|
|
||||||
|
|
||||||
dotline((0, 2 * step), (3 * step, 8 * step))
|
dotline((0, 2 * step), (3 * step, 8 * step))
|
||||||
dotline((0, 4 * step), (5 * step, 8 * step))
|
dotline((0, 4 * step), (5 * step, 8 * step))
|
||||||
dotline((0, 4 * step), (8 * step, 4 * step))
|
dotline((0, 4 * step), (8 * step, 4 * step))
|
||||||
|
|
||||||
line(
|
line(
|
||||||
(0, 2 * step),
|
(0, 2 * step),
|
||||||
(1 * step, 4 * step),
|
(1 * step, 4 * step),
|
||||||
(7.5 * step, 4 * step),
|
(7.5 * step, 4 * step),
|
||||||
stroke: 1mm + oblue,
|
stroke: 1mm + oblue,
|
||||||
)
|
)
|
||||||
}),
|
}))
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
#problem()
|
#problem()
|
||||||
@ -325,7 +318,7 @@ Find a formula for $B$ in terms of $a$, $b$, and $c$. \
|
|||||||
|
|
||||||
#solution([
|
#solution([
|
||||||
If we want to factor $a(x^2 #tp (b-a)x #tp (c-a))$, we need to find $r$ and $s$ so that
|
If we want to factor $a(x^2 #tp (b-a)x #tp (c-a))$, we need to find $r$ and $s$ so that
|
||||||
- $min(r,s) = b-a$, and
|
- $min(r, s) = b-a$, and
|
||||||
- $r + s = c - a$
|
- $r + s = c - a$
|
||||||
|
|
||||||
#v(2mm)
|
#v(2mm)
|
||||||
@ -341,9 +334,8 @@ Find a formula for $B$ in terms of $a$, $b$, and $c$. \
|
|||||||
|
|
||||||
*Case 2:* If $b > (a + c #sym.div) 2$, then
|
*Case 2:* If $b > (a + c #sym.div) 2$, then
|
||||||
$
|
$
|
||||||
accent(f, macron)(x)
|
accent(f, macron)(x) & = a x^2 #tp ((a+c)/2)x #tp c \
|
||||||
&= a x^2 #tp ((a+c)/2)x #tp c \
|
& = a(x #tp (c-a)/2)^2
|
||||||
&= a(x #tp (c-a)/2)^2
|
|
||||||
$
|
$
|
||||||
has the same graph as $f$, and thus $B = (a+c) #sym.div 2$
|
has the same graph as $f$, and thus $B = (a+c) #sym.div 2$
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#import "@local/handout:0.1.0": *
|
#import "@local/handout:0.1.0": *
|
||||||
#import "../macros.typ": *
|
#import "../macros.typ": *
|
||||||
#import "@preview/cetz:0.3.1"
|
#import "@preview/cetz:0.4.2"
|
||||||
|
|
||||||
= Tropical Cubic Polynomials
|
= Tropical Cubic Polynomials
|
||||||
|
|
||||||
@ -131,15 +131,12 @@ Using the last three problems, find formulas for $B$ and $C$ in terms of $a$, $b
|
|||||||
#problem()
|
#problem()
|
||||||
What are the roots of the following polynomial?
|
What are the roots of the following polynomial?
|
||||||
|
|
||||||
#align(
|
#align(center, box(
|
||||||
center,
|
inset: 3mm,
|
||||||
box(
|
$
|
||||||
inset: 3mm,
|
3 x^6 #tp 4 x^5 #tp 2 x^4 #tp x^3 #tp x^2 #tp 4 x #tp 5
|
||||||
$
|
$,
|
||||||
3 x^6 #tp 4 x^5 #tp 2 x^4 #tp x^3 #tp x^2 #tp 4 x #tp 5
|
))
|
||||||
$,
|
|
||||||
),
|
|
||||||
)
|
|
||||||
|
|
||||||
#solution([
|
#solution([
|
||||||
We have
|
We have
|
||||||
@ -169,9 +166,8 @@ Find a formula for each $C_i$ in terms of $c_0, c_1, ..., c_n$.
|
|||||||
|
|
||||||
#solution([
|
#solution([
|
||||||
$
|
$
|
||||||
A_j
|
A_j & = min_(l<=j<k)( (a_l - a_k) / (k-l) (k-j) + a_k ) \
|
||||||
&= min_(l<=j<k)( (a_l - a_k) / (k-l) (k-j) + a_k ) \
|
& = min_(l<=j<k)( a_l (k-j) / (k-l) + a_k (j-l) / (k-l) )
|
||||||
&= min_(l<=j<k)( a_l (k-j) / (k-l) + a_k (j-l) / (k-l) )
|
|
||||||
$
|
$
|
||||||
|
|
||||||
#v(2mm)
|
#v(2mm)
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#import "@local/handout:0.1.0": *
|
#import "@local/handout:0.1.0": *
|
||||||
#import "@preview/cetz:0.3.1"
|
#import "@preview/cetz:0.4.2"
|
||||||
|
|
||||||
= Wallpaper Symmetries
|
= Wallpaper Symmetries
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#import "@local/handout:0.1.0": *
|
#import "@local/handout:0.1.0": *
|
||||||
#import "@preview/cetz:0.3.1"
|
#import "@preview/cetz:0.4.2"
|
||||||
|
|
||||||
= Mirror Symmetry
|
= Mirror Symmetry
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#import "@local/handout:0.1.0": *
|
#import "@local/handout:0.1.0": *
|
||||||
#import "@preview/cetz:0.3.1"
|
#import "@preview/cetz:0.4.2"
|
||||||
|
|
||||||
= Rotational Symmetry
|
= Rotational Symmetry
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#import "@local/handout:0.1.0": *
|
#import "@local/handout:0.1.0": *
|
||||||
#import "@preview/cetz:0.3.1"
|
#import "@preview/cetz:0.4.2"
|
||||||
|
|
||||||
#let pat(img, sol) = {
|
#let pat(img, sol) = {
|
||||||
problem()
|
problem()
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#import "@local/handout:0.1.0": *
|
#import "@local/handout:0.1.0": *
|
||||||
#import "@preview/cetz:0.3.1"
|
#import "@preview/cetz:0.4.2"
|
||||||
|
|
||||||
= The Signature-Cost Theorem
|
= The Signature-Cost Theorem
|
||||||
|
|
||||||
@ -7,23 +7,20 @@
|
|||||||
First, we'll associate a _cost_ to each type of symmetry in orbifold notation:
|
First, we'll associate a _cost_ to each type of symmetry in orbifold notation:
|
||||||
|
|
||||||
#v(4mm)
|
#v(4mm)
|
||||||
#align(
|
#align(center, table(
|
||||||
center,
|
stroke: (1pt, 1pt),
|
||||||
table(
|
align: center,
|
||||||
stroke: (1pt, 1pt),
|
columns: (auto, auto, auto, auto),
|
||||||
align: center,
|
[*Symbol*], [*Cost*], [*Symbol*], [*Cost*],
|
||||||
columns: (auto, auto, auto, auto),
|
[#sym.circle.small], [2], [#sym.times or #sym.convolve], [1],
|
||||||
[*Symbol*], [*Cost*], [*Symbol*], [*Cost*],
|
[#sym.diamond.stroked.small`2`], [1/2], [#sym.convolve`2`], [1/4],
|
||||||
[#sym.circle.small], [2], [#sym.times or #sym.convolve], [1],
|
[#sym.diamond.stroked.small`3`], [2/3], [#sym.convolve`3`], [1/3],
|
||||||
[#sym.diamond.stroked.small`2`], [1/2], [#sym.convolve`2`], [1/4],
|
[#sym.dots], [#sym.dots], [#sym.dots], [#sym.dots],
|
||||||
[#sym.diamond.stroked.small`3`], [2/3], [#sym.convolve`3`], [1/3],
|
[#sym.diamond.stroked.small`n`],
|
||||||
[#sym.dots], [#sym.dots], [#sym.dots], [#sym.dots],
|
[$(n-1) / n$],
|
||||||
[#sym.diamond.stroked.small`n`],
|
[#sym.convolve`n`],
|
||||||
[$(n-1) / n$],
|
[$(n-1) / (2n)$],
|
||||||
[#sym.convolve`n`],
|
))
|
||||||
[$(n-1) / (2n)$],
|
|
||||||
),
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
We then calculate the total "cost" of a signature by adding up the costs of each component.
|
We then calculate the total "cost" of a signature by adding up the costs of each component.
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#import "@local/handout:0.1.0": *
|
#import "@local/handout:0.1.0": *
|
||||||
#import "@preview/cetz:0.3.1"
|
#import "@preview/cetz:0.4.2"
|
||||||
|
|
||||||
#show: handout.with(
|
#show: handout.with(
|
||||||
title: [Warm-Up: Big-Tac-Toe],
|
title: [Warm-Up: Big-Tac-Toe],
|
||||||
@ -75,16 +75,13 @@ How does your strategy change? \
|
|||||||
#if extra_boards {
|
#if extra_boards {
|
||||||
pagebreak()
|
pagebreak()
|
||||||
|
|
||||||
align(
|
align(center, grid(
|
||||||
center,
|
stroke: none,
|
||||||
grid(
|
align: center,
|
||||||
stroke: none,
|
columns: (1fr, 1fr),
|
||||||
align: center,
|
rows: (1fr, 1fr, 1fr),
|
||||||
columns: (1fr, 1fr),
|
btt(0.35), btt(0.35),
|
||||||
rows: (1fr, 1fr, 1fr),
|
btt(0.35), btt(0.35),
|
||||||
btt(0.35), btt(0.35),
|
btt(0.35), btt(0.35),
|
||||||
btt(0.35), btt(0.35),
|
))
|
||||||
btt(0.35), btt(0.35),
|
|
||||||
),
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#import "@local/handout:0.1.0": *
|
#import "@local/handout:0.1.0": *
|
||||||
#import "@preview/cetz:0.3.1"
|
#import "@preview/cetz:0.4.2"
|
||||||
|
|
||||||
|
|
||||||
#show: handout.with(
|
#show: handout.with(
|
||||||
@ -43,61 +43,56 @@ Now, consider the set of six-sided dice below:
|
|||||||
- Die $E$: $0, 5, 5, 5, 5, 5$
|
- Die $E$: $0, 5, 5, 5, 5, 5$
|
||||||
On average, which die beats each of the others? Draw a diagram.
|
On average, which die beats each of the others? Draw a diagram.
|
||||||
|
|
||||||
#solution(
|
#solution(align(center, cetz.canvas({
|
||||||
align(
|
import cetz.draw: *
|
||||||
center,
|
|
||||||
cetz.canvas({
|
|
||||||
import cetz.draw: *
|
|
||||||
|
|
||||||
let s = 0.8 // Scale
|
let s = 0.8 // Scale
|
||||||
let t = 13pt * s // text size
|
let t = 13pt * s // text size
|
||||||
let radius = 0.3 * s
|
let radius = 0.3 * s
|
||||||
|
|
||||||
// Points
|
// Points
|
||||||
let a = (-2 * s, 0.2 * s)
|
let a = (-2 * s, 0.2 * s)
|
||||||
let b = (0 * s, 2 * s)
|
let b = (0 * s, 2 * s)
|
||||||
let c = (2 * s, 0.2 * s)
|
let c = (2 * s, 0.2 * s)
|
||||||
let d = (1.2 * s, -2.1 * s)
|
let d = (1.2 * s, -2.1 * s)
|
||||||
let e = (-1.2 * s, -2.1 * s)
|
let e = (-1.2 * s, -2.1 * s)
|
||||||
|
|
||||||
set-style(
|
set-style(
|
||||||
stroke: (thickness: 0.6mm * s),
|
stroke: (thickness: 0.6mm * s),
|
||||||
mark: (
|
mark: (
|
||||||
end: (
|
end: (
|
||||||
symbol: ">",
|
symbol: ">",
|
||||||
fill: black,
|
fill: black,
|
||||||
offset: radius + (0.025 * s),
|
offset: radius + (0.025 * s),
|
||||||
width: 1.2mm * s,
|
width: 1.2mm * s,
|
||||||
length: 1.2mm * s,
|
length: 1.2mm * s,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
line(a, b)
|
line(a, b)
|
||||||
line(b, c)
|
line(b, c)
|
||||||
line(c, d)
|
line(c, d)
|
||||||
line(d, e)
|
line(d, e)
|
||||||
line(e, a)
|
line(e, a)
|
||||||
line(a, c)
|
line(a, c)
|
||||||
line(b, d)
|
line(b, d)
|
||||||
line(c, e)
|
line(c, e)
|
||||||
line(d, a)
|
line(d, a)
|
||||||
line(e, b)
|
line(e, b)
|
||||||
|
|
||||||
circle(a, radius: radius, fill: oblue, stroke: none)
|
circle(a, radius: radius, fill: oblue, stroke: none)
|
||||||
circle(b, radius: radius, fill: oblue, stroke: none)
|
circle(b, radius: radius, fill: oblue, stroke: none)
|
||||||
circle(c, radius: radius, fill: oblue, stroke: none)
|
circle(c, radius: radius, fill: oblue, stroke: none)
|
||||||
circle(d, radius: radius, fill: oblue, stroke: none)
|
circle(d, radius: radius, fill: oblue, stroke: none)
|
||||||
circle(e, radius: radius, fill: oblue, stroke: none)
|
circle(e, radius: radius, fill: oblue, stroke: none)
|
||||||
|
|
||||||
content(a, text(fill: white, size: t, [*A*]))
|
content(a, text(fill: white, size: t, [*A*]))
|
||||||
content(b, text(fill: white, size: t, [*B*]))
|
content(b, text(fill: white, size: t, [*B*]))
|
||||||
content(c, text(fill: white, size: t, [*C*]))
|
content(c, text(fill: white, size: t, [*C*]))
|
||||||
content(d, text(fill: white, size: t, [*D*]))
|
content(d, text(fill: white, size: t, [*D*]))
|
||||||
content(e, text(fill: white, size: t, [*E*]))
|
content(e, text(fill: white, size: t, [*E*]))
|
||||||
}),
|
})))
|
||||||
),
|
|
||||||
)
|
|
||||||
|
|
||||||
#v(1fr)
|
#v(1fr)
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#import "@local/handout:0.1.0": *
|
#import "@local/handout:0.1.0": *
|
||||||
#import "@preview/cetz:0.3.1"
|
#import "@preview/cetz:0.4.2"
|
||||||
|
|
||||||
#show: handout.with(
|
#show: handout.with(
|
||||||
title: [Warm-Up: What's an AST?],
|
title: [Warm-Up: What's an AST?],
|
||||||
@ -18,59 +18,56 @@ You may detach the string as you hang the painting, but it must be re-attached o
|
|||||||
|
|
||||||
#v(2mm)
|
#v(2mm)
|
||||||
|
|
||||||
#align(
|
#align(center, cetz.canvas({
|
||||||
center,
|
import cetz.draw: *
|
||||||
cetz.canvas({
|
let s = 2.5
|
||||||
import cetz.draw: *
|
|
||||||
let s = 2.5
|
|
||||||
|
|
||||||
|
|
||||||
line(
|
line(
|
||||||
(0 * s, 1 * s),
|
(0 * s, 1 * s),
|
||||||
(2 * s, 1 * s),
|
(2 * s, 1 * s),
|
||||||
(2 * s, 0 * s),
|
(2 * s, 0 * s),
|
||||||
(0 * s, 0 * s),
|
(0 * s, 0 * s),
|
||||||
close: true,
|
close: true,
|
||||||
stroke: (thickness: 0.8mm),
|
stroke: (thickness: 0.8mm),
|
||||||
)
|
)
|
||||||
|
|
||||||
line(
|
line(
|
||||||
(0.1 * s, 1 * s),
|
(0.1 * s, 1 * s),
|
||||||
(0.5 * s, 1.5 * s),
|
(0.5 * s, 1.5 * s),
|
||||||
(1.5 * s, 1.5 * s),
|
(1.5 * s, 1.5 * s),
|
||||||
(1.9 * s, 1 * s),
|
(1.9 * s, 1 * s),
|
||||||
stroke: (thickness: 0.5mm, dash: "dotted"),
|
stroke: (thickness: 0.5mm, dash: "dotted"),
|
||||||
)
|
)
|
||||||
|
|
||||||
circle((0.5 * s, 1.5 * s), radius: 0.04 * s, fill: black, stroke: none)
|
circle((0.5 * s, 1.5 * s), radius: 0.04 * s, fill: black, stroke: none)
|
||||||
circle((1.5 * s, 1.5 * s), radius: 0.04 * s, fill: black, stroke: none)
|
circle((1.5 * s, 1.5 * s), radius: 0.04 * s, fill: black, stroke: none)
|
||||||
|
|
||||||
line(
|
line(
|
||||||
(0.66 * s, 0.66 * s),
|
(0.66 * s, 0.66 * s),
|
||||||
(0.66 * s, 0.35 * s),
|
(0.66 * s, 0.35 * s),
|
||||||
(0.60 * s, 0.1 * s),
|
(0.60 * s, 0.1 * s),
|
||||||
)
|
)
|
||||||
|
|
||||||
line(
|
line(
|
||||||
(0.72 * s, 0.1 * s),
|
(0.72 * s, 0.1 * s),
|
||||||
(0.66 * s, 0.35 * s),
|
(0.66 * s, 0.35 * s),
|
||||||
)
|
)
|
||||||
|
|
||||||
line(
|
line(
|
||||||
(0.66 * s, 0.575 * s),
|
(0.66 * s, 0.575 * s),
|
||||||
(0.6 * s, 0.475 * s),
|
(0.6 * s, 0.475 * s),
|
||||||
(0.525 * s, 0.575 * s),
|
(0.525 * s, 0.575 * s),
|
||||||
)
|
)
|
||||||
|
|
||||||
line(
|
line(
|
||||||
(0.66 * s, 0.575 * s),
|
(0.66 * s, 0.575 * s),
|
||||||
(0.72 * s, 0.475 * s),
|
(0.72 * s, 0.475 * s),
|
||||||
(0.795 * s, 0.575 * s),
|
(0.795 * s, 0.575 * s),
|
||||||
)
|
)
|
||||||
|
|
||||||
circle((0.66 * s, 0.66 * s), radius: 0.07 * s, fill: white)
|
circle((0.66 * s, 0.66 * s), radius: 0.07 * s, fill: white)
|
||||||
}),
|
}))
|
||||||
)
|
|
||||||
|
|
||||||
#solution([
|
#solution([
|
||||||
Say we have a left nail and a right nail. The path of the string is as follows:
|
Say we have a left nail and a right nail. The path of the string is as follows:
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#import "@local/handout:0.1.0": *
|
#import "@local/handout:0.1.0": *
|
||||||
#import "@preview/cetz:0.3.1"
|
#import "@preview/cetz:0.4.2"
|
||||||
|
|
||||||
#show: handout.with(
|
#show: handout.with(
|
||||||
title: [Warm-Up: Passing Balls],
|
title: [Warm-Up: Passing Balls],
|
||||||
@ -78,32 +78,25 @@ Participant 1 has a black ball. Which balls are held by participants 2, 3, and 4
|
|||||||
|
|
||||||
let i = 1
|
let i = 1
|
||||||
for p in pts {
|
for p in pts {
|
||||||
circle(
|
circle(p, radius: radius * s, fill: if i == 1 {
|
||||||
p,
|
ored
|
||||||
radius: radius * s,
|
} else if i == 2 {
|
||||||
fill: if i == 1 {
|
ogreen
|
||||||
ored
|
} else if i == 3 {
|
||||||
} else if i == 2 {
|
oorange
|
||||||
ogreen
|
} else if i == 4 {
|
||||||
} else if i == 3 {
|
oblue
|
||||||
oorange
|
} else { white })
|
||||||
} else if i == 4 {
|
|
||||||
oblue
|
|
||||||
} else { white },
|
|
||||||
)
|
|
||||||
|
|
||||||
content(
|
content(p, text(
|
||||||
p,
|
fill: if i <= 4 {
|
||||||
text(
|
white
|
||||||
fill: if i <= 4 {
|
} else {
|
||||||
white
|
black
|
||||||
} else {
|
},
|
||||||
black
|
size: t,
|
||||||
},
|
[*#i*],
|
||||||
size: t,
|
))
|
||||||
[*#i*],
|
|
||||||
),
|
|
||||||
)
|
|
||||||
i = i + 1
|
i = i + 1
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
@ -118,32 +111,25 @@ Participant 1 has a black ball. Which balls are held by participants 2, 3, and 4
|
|||||||
let l = calc.rem(((i - 1) * 5), 12) + 1
|
let l = calc.rem(((i - 1) * 5), 12) + 1
|
||||||
|
|
||||||
|
|
||||||
circle(
|
circle(p, radius: radius * s, fill: if l == 1 {
|
||||||
p,
|
ored
|
||||||
radius: radius * s,
|
} else if l == 2 {
|
||||||
fill: if l == 1 {
|
ogreen
|
||||||
ored
|
} else if l == 3 {
|
||||||
} else if l == 2 {
|
oorange
|
||||||
ogreen
|
} else if l == 4 {
|
||||||
} else if l == 3 {
|
oblue
|
||||||
oorange
|
} else { white })
|
||||||
} else if l == 4 {
|
|
||||||
oblue
|
|
||||||
} else { white },
|
|
||||||
)
|
|
||||||
|
|
||||||
content(
|
content(p, text(
|
||||||
p,
|
fill: if l <= 4 {
|
||||||
text(
|
white
|
||||||
fill: if l <= 4 {
|
} else {
|
||||||
white
|
black
|
||||||
} else {
|
},
|
||||||
black
|
size: t,
|
||||||
},
|
[*#l*],
|
||||||
size: t,
|
))
|
||||||
[*#l*],
|
|
||||||
),
|
|
||||||
)
|
|
||||||
i = i + 1
|
i = i + 1
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
@ -158,32 +144,25 @@ Participant 1 has a black ball. Which balls are held by participants 2, 3, and 4
|
|||||||
let l = calc.rem(((i - 1) * 5), 12) + 1
|
let l = calc.rem(((i - 1) * 5), 12) + 1
|
||||||
|
|
||||||
|
|
||||||
circle(
|
circle(p, radius: radius * s, fill: if l == 1 {
|
||||||
p,
|
oblue
|
||||||
radius: radius * s,
|
} else if l == 2 {
|
||||||
fill: if l == 1 {
|
oorange
|
||||||
oblue
|
} else if l == 3 {
|
||||||
} else if l == 2 {
|
ored
|
||||||
oorange
|
} else if l == 4 {
|
||||||
} else if l == 3 {
|
ogreen
|
||||||
ored
|
} else { white })
|
||||||
} else if l == 4 {
|
|
||||||
ogreen
|
|
||||||
} else { white },
|
|
||||||
)
|
|
||||||
|
|
||||||
content(
|
content(p, text(
|
||||||
p,
|
fill: if l <= 4 {
|
||||||
text(
|
white
|
||||||
fill: if l <= 4 {
|
} else {
|
||||||
white
|
black
|
||||||
} else {
|
},
|
||||||
black
|
size: t,
|
||||||
},
|
[*#l*],
|
||||||
size: t,
|
))
|
||||||
[*#l*],
|
|
||||||
),
|
|
||||||
)
|
|
||||||
i = i + 1
|
i = i + 1
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#import "@local/handout:0.1.0": *
|
#import "@local/handout:0.1.0": *
|
||||||
#import "@preview/cetz:0.3.1"
|
#import "@preview/cetz:0.4.2"
|
||||||
|
|
||||||
#show: handout.with(
|
#show: handout.with(
|
||||||
title: [Warm-Up: What's an AST?],
|
title: [Warm-Up: What's an AST?],
|
||||||
@ -24,51 +24,48 @@ respecting the order of operations $[and, times, div, +, -]$.
|
|||||||
|
|
||||||
#v(2mm)
|
#v(2mm)
|
||||||
|
|
||||||
#align(
|
#align(center, cetz.canvas({
|
||||||
center,
|
import cetz.draw: *
|
||||||
cetz.canvas({
|
|
||||||
import cetz.draw: *
|
|
||||||
|
|
||||||
// spell:off
|
// spell:off
|
||||||
content((0, 0), $+$, name: "r")
|
content((0, 0), $+$, name: "r")
|
||||||
content((-0.5, -1), $3$, name: "a")
|
content((-0.5, -1), $3$, name: "a")
|
||||||
content((0.5, -1), $div$, name: "b")
|
content((0.5, -1), $div$, name: "b")
|
||||||
content((-0.3, -2), $times$, name: "ba")
|
content((-0.3, -2), $times$, name: "ba")
|
||||||
content((1.3, -2), $and$, name: "bb")
|
content((1.3, -2), $and$, name: "bb")
|
||||||
content((-0.8, -3), $9$, name: "baa")
|
content((-0.8, -3), $9$, name: "baa")
|
||||||
content((0.2, -3), $8$, name: "bab")
|
content((0.2, -3), $8$, name: "bab")
|
||||||
content((0.8, -3), $5$, name: "bba")
|
content((0.8, -3), $5$, name: "bba")
|
||||||
content((1.8, -3), $6$, name: "bbb")
|
content((1.8, -3), $6$, name: "bbb")
|
||||||
// spell:on
|
// spell:on
|
||||||
|
|
||||||
// Zero-sized arrows are a hack for offset.
|
// Zero-sized arrows are a hack for offset.
|
||||||
set-style(
|
set-style(
|
||||||
stroke: (thickness: 0.3mm),
|
stroke: (thickness: 0.3mm),
|
||||||
mark: (
|
mark: (
|
||||||
start: (
|
start: (
|
||||||
symbol: "|",
|
symbol: "|",
|
||||||
offset: 0.25,
|
offset: 0.25,
|
||||||
width: 0mm,
|
width: 0mm,
|
||||||
length: 0mm,
|
length: 0mm,
|
||||||
),
|
|
||||||
end: (
|
|
||||||
symbol: "|",
|
|
||||||
offset: 0.25,
|
|
||||||
width: 0mm,
|
|
||||||
length: 0mm,
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
)
|
end: (
|
||||||
|
symbol: "|",
|
||||||
|
offset: 0.25,
|
||||||
|
width: 0mm,
|
||||||
|
length: 0mm,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
// spell:off
|
// spell:off
|
||||||
line("r", "a")
|
line("r", "a")
|
||||||
line("r", "b")
|
line("r", "b")
|
||||||
line("b", "ba")
|
line("b", "ba")
|
||||||
line("b", "bb")
|
line("b", "bb")
|
||||||
line("ba", "baa")
|
line("ba", "baa")
|
||||||
line("ba", "bab")
|
line("ba", "bab")
|
||||||
line("bb", "bba")
|
line("bb", "bba")
|
||||||
line("bb", "bbb")
|
line("bb", "bbb")
|
||||||
// spell:on
|
// spell:on
|
||||||
}),
|
}))
|
||||||
)
|
|
||||||
|
@ -1,24 +1,21 @@
|
|||||||
#import "@local/handout:0.1.0": *
|
#import "@local/handout:0.1.0": *
|
||||||
#import "@preview/cetz:0.3.1"
|
#import "@preview/cetz:0.4.2"
|
||||||
|
|
||||||
#show: handout.with(
|
#show: handout.with(
|
||||||
title: [Warm-Up: Wild Tic-Tac-Toe],
|
title: [Warm-Up: Wild Tic-Tac-Toe],
|
||||||
by: "Mark",
|
by: "Mark",
|
||||||
)
|
)
|
||||||
|
|
||||||
#let ttt = align(
|
#let ttt = align(center, cetz.canvas({
|
||||||
center,
|
import cetz.draw: *
|
||||||
cetz.canvas({
|
let s = 0.7 // scale
|
||||||
import cetz.draw: *
|
|
||||||
let s = 0.7 // scale
|
|
||||||
|
|
||||||
set-style(stroke: (thickness: 0.5mm * s))
|
set-style(stroke: (thickness: 0.5mm * s))
|
||||||
line((-1 * s, 3 * s), (-1 * s, -3 * s))
|
line((-1 * s, 3 * s), (-1 * s, -3 * s))
|
||||||
line((1 * s, 3 * s), (1 * s, -3 * s))
|
line((1 * s, 3 * s), (1 * s, -3 * s))
|
||||||
line((3 * s, -1 * s), (-3 * s, -1 * s))
|
line((3 * s, -1 * s), (-3 * s, -1 * s))
|
||||||
line((3 * s, 1 * s), (-3 * s, 1 * s))
|
line((3 * s, 1 * s), (-3 * s, 1 * s))
|
||||||
}),
|
}))
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
#problem()
|
#problem()
|
||||||
|
Reference in New Issue
Block a user