Update cetz & ci
This commit is contained in:
@ -26,7 +26,7 @@ jobs:
|
||||
|
||||
- name: "Download Typstyle"
|
||||
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
|
||||
|
||||
- name: Check typst formatting
|
||||
@ -62,7 +62,7 @@ jobs:
|
||||
# more control anyway.
|
||||
- name: "Download Typst"
|
||||
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"
|
||||
mv "typst-x86_64-unknown-linux-musl/typst" .
|
||||
rm "typst-x86_64-unknown-linux-musl.tar.xz"
|
||||
|
@ -1,5 +1,5 @@
|
||||
#import "@local/handout:0.1.0": *
|
||||
#import "@preview/cetz:0.3.1"
|
||||
#import "@preview/cetz:0.4.2"
|
||||
|
||||
= Floats
|
||||
#definition()
|
||||
@ -33,11 +33,7 @@ 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: \
|
||||
#note([The following only applies to floats that consist of 32 bits. We won't encounter any others today.])
|
||||
|
||||
#align(
|
||||
center,
|
||||
box(
|
||||
inset: 2mm,
|
||||
cetz.canvas({
|
||||
#align(center, box(inset: 2mm, cetz.canvas({
|
||||
import cetz.draw: *
|
||||
|
||||
let chars = (
|
||||
@ -96,9 +92,7 @@ Floats represent a subset of the real numbers, and are interpreted as follows: \
|
||||
|
||||
line((3.10, y), (9.4, y))
|
||||
content((6.3, y - 0.2), [fraction])
|
||||
}),
|
||||
),
|
||||
)
|
||||
})))
|
||||
|
||||
- The first bit denotes the sign of the float's value
|
||||
We'll label it $s$. \
|
||||
|
@ -1,6 +1,6 @@
|
||||
#import "@local/handout:0.1.0": *
|
||||
#import "@preview/cetz:0.3.1"
|
||||
#import "@preview/cetz-plot:0.1.0": plot, chart
|
||||
#import "@preview/cetz:0.4.2"
|
||||
#import "@preview/cetz-plot:0.1.2": chart, plot
|
||||
|
||||
= Integers and Floats
|
||||
|
||||
@ -44,19 +44,11 @@ This allows us to improve the average error of our linear approximation:
|
||||
{
|
||||
let domain = (0, 1)
|
||||
|
||||
plot.add(
|
||||
f1,
|
||||
domain: domain,
|
||||
label: $log(1+x)$,
|
||||
style: (stroke: ogrape),
|
||||
)
|
||||
plot.add(f1, domain: domain, label: $log(1+x)$, style: (
|
||||
stroke: ogrape,
|
||||
))
|
||||
|
||||
plot.add(
|
||||
f2,
|
||||
domain: domain,
|
||||
label: $x$,
|
||||
style: (stroke: oblue),
|
||||
)
|
||||
plot.add(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)
|
||||
|
||||
plot.add(
|
||||
f1,
|
||||
domain: domain,
|
||||
label: $log(1+x)$,
|
||||
style: (stroke: ogrape),
|
||||
)
|
||||
plot.add(f1, domain: domain, label: $log(1+x)$, style: (
|
||||
stroke: ogrape,
|
||||
))
|
||||
|
||||
plot.add(
|
||||
f2,
|
||||
domain: domain,
|
||||
label: $x$,
|
||||
style: (stroke: oblue),
|
||||
)
|
||||
plot.add(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)
|
||||
|
||||
#note(
|
||||
type: "Note",
|
||||
[
|
||||
#note(type: "Note", [
|
||||
"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))
|
||||
$
|
||||
Feel free to ignore this note, it isn't a critical part of this handout.
|
||||
],
|
||||
)
|
||||
])
|
||||
|
||||
|
||||
#pagebreak()
|
||||
@ -149,8 +130,7 @@ $
|
||||
Let $E$ and $F$ be the exponent and float bits of $x_f$. \
|
||||
We then have:
|
||||
$
|
||||
log_2(x_f)
|
||||
&= log_2 ( 2^(E-127) times (1 + (F) / (2^23)) ) \
|
||||
log_2(x_f) & = log_2 ( 2^(E-127) times (1 + (F) / (2^23)) ) \
|
||||
& = E - 127 + log_2(1 + F / (2^23)) \
|
||||
& approx E-127 + F / (2^23) + epsilon \
|
||||
& = 1 / (2^23)(2^23 E + F) - 127 + epsilon \
|
||||
|
@ -1,5 +1,5 @@
|
||||
#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.
|
||||
@ -7,17 +7,15 @@
|
||||
#let tm = sym.times.circle
|
||||
|
||||
#let graphgrid(inner_content) = {
|
||||
align(
|
||||
center,
|
||||
box(
|
||||
inset: 3mm,
|
||||
cetz.canvas({
|
||||
align(center, box(inset: 3mm, cetz.canvas({
|
||||
import cetz.draw: *
|
||||
let x = 5.25
|
||||
|
||||
grid(
|
||||
(0, 0), (x, x), step: 0.75,
|
||||
stroke: luma(100) + 0.3mm
|
||||
(0, 0),
|
||||
(x, x),
|
||||
step: 0.75,
|
||||
stroke: luma(100) + 0.3mm,
|
||||
)
|
||||
|
||||
if (inner_content != none) {
|
||||
@ -33,9 +31,7 @@
|
||||
(x + 0.25, 0),
|
||||
stroke: 0.75mm + black,
|
||||
)
|
||||
}),
|
||||
),
|
||||
)
|
||||
})))
|
||||
}
|
||||
|
||||
/// Adds extra padding to an equation.
|
||||
@ -48,23 +44,16 @@
|
||||
/// Note that there are newlines between the $ and content,
|
||||
/// this gives us display math (which is what we want when using this macro)
|
||||
#let eqnbox(eqn) = {
|
||||
align(
|
||||
center,
|
||||
box(
|
||||
align(center, box(
|
||||
inset: 3mm,
|
||||
eqn,
|
||||
),
|
||||
)
|
||||
))
|
||||
}
|
||||
|
||||
#let dotline(a, b) = {
|
||||
cetz.draw.line(
|
||||
a,
|
||||
b,
|
||||
stroke: (
|
||||
cetz.draw.line(a, b, stroke: (
|
||||
dash: "dashed",
|
||||
thickness: 0.5mm,
|
||||
paint: ored,
|
||||
),
|
||||
)
|
||||
))
|
||||
}
|
||||
|
@ -1,21 +1,18 @@
|
||||
#import "@local/handout:0.1.0": *
|
||||
#import "../macros.typ": *
|
||||
#import "@preview/cetz:0.3.1"
|
||||
#import "@preview/cetz:0.4.2"
|
||||
|
||||
= Tropical Polynomials
|
||||
|
||||
#definition()
|
||||
A _polynomial_ is an expression formed by adding and multiplying numbers and a variable $x$. \
|
||||
Every polynomial can be written as
|
||||
#align(
|
||||
center,
|
||||
box(
|
||||
#align(center, box(
|
||||
inset: 3mm,
|
||||
$
|
||||
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$. \
|
||||
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()
|
||||
A _tropical_ polynomial is a polynomial that uses tropical addition and multiplication. \
|
||||
In other words, it is an expression of the form
|
||||
#align(
|
||||
center,
|
||||
box(
|
||||
#align(center, box(
|
||||
inset: 3mm,
|
||||
$
|
||||
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.
|
||||
|
||||
#pagebreak() // MARK: page
|
||||
@ -90,15 +84,12 @@ Draw a graph of the tropical polynomial $f(x) = x^2 #tp 1x #tp 4$. \
|
||||
#problem()
|
||||
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
|
||||
#align(
|
||||
center,
|
||||
box(
|
||||
#align(center, box(
|
||||
inset: 3mm,
|
||||
$
|
||||
x^2 #tp 1x #tp 4 = (x #tp r)(x #tp s)
|
||||
$,
|
||||
),
|
||||
)
|
||||
))
|
||||
|
||||
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([
|
||||
We (tropically) factor out $-2$ to get
|
||||
|
||||
#eqnbox($
|
||||
#eqnbox(
|
||||
$
|
||||
f(x) = -2(x^2 #tp 2x #tp 10)
|
||||
$)
|
||||
$,
|
||||
)
|
||||
|
||||
|
||||
by the same process as the previous problem, we get
|
||||
#eqnbox($
|
||||
#eqnbox(
|
||||
$
|
||||
f(x) = -2(x #tp 2)(x #tp 8)
|
||||
$)
|
||||
$,
|
||||
)
|
||||
])
|
||||
|
||||
#v(1fr)
|
||||
@ -236,11 +231,11 @@ Graph $f(x) = 1x^2 #tp 3x #tp 5$.
|
||||
#problem()
|
||||
Find a factorization of $f$ in the form $a(x #tp r)(x#tp s)$.
|
||||
|
||||
#solution(
|
||||
eqnbox($
|
||||
#solution(eqnbox(
|
||||
$
|
||||
f(x) = 1x^2 #tp 3 x #tp 5 = 1(x #tp 2)^2
|
||||
$),
|
||||
)
|
||||
$,
|
||||
))
|
||||
|
||||
#v(1fr)
|
||||
|
||||
@ -263,8 +258,7 @@ Graph $f(x) = 2x^2 #tp 4x #tp 4$.
|
||||
|
||||
#if_no_solutions(graphgrid(none))
|
||||
|
||||
#solution(
|
||||
graphgrid({
|
||||
#solution(graphgrid({
|
||||
import cetz.draw: *
|
||||
let step = 0.75
|
||||
|
||||
@ -278,8 +272,7 @@ Graph $f(x) = 2x^2 #tp 4x #tp 4$.
|
||||
(7.5 * step, 4 * step),
|
||||
stroke: 1mm + oblue,
|
||||
)
|
||||
}),
|
||||
)
|
||||
}))
|
||||
|
||||
|
||||
#problem()
|
||||
@ -341,8 +334,7 @@ Find a formula for $B$ in terms of $a$, $b$, and $c$. \
|
||||
|
||||
*Case 2:* If $b > (a + c #sym.div) 2$, then
|
||||
$
|
||||
accent(f, macron)(x)
|
||||
&= a x^2 #tp ((a+c)/2)x #tp c \
|
||||
accent(f, macron)(x) & = a x^2 #tp ((a+c)/2)x #tp c \
|
||||
& = a(x #tp (c-a)/2)^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 "../macros.typ": *
|
||||
#import "@preview/cetz:0.3.1"
|
||||
#import "@preview/cetz:0.4.2"
|
||||
|
||||
= Tropical Cubic Polynomials
|
||||
|
||||
@ -131,15 +131,12 @@ Using the last three problems, find formulas for $B$ and $C$ in terms of $a$, $b
|
||||
#problem()
|
||||
What are the roots of the following polynomial?
|
||||
|
||||
#align(
|
||||
center,
|
||||
box(
|
||||
#align(center, 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
|
||||
$,
|
||||
),
|
||||
)
|
||||
))
|
||||
|
||||
#solution([
|
||||
We have
|
||||
@ -169,8 +166,7 @@ Find a formula for each $C_i$ in terms of $c_0, c_1, ..., c_n$.
|
||||
|
||||
#solution([
|
||||
$
|
||||
A_j
|
||||
&= min_(l<=j<k)( (a_l - a_k) / (k-l) (k-j) + a_k ) \
|
||||
A_j & = 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) )
|
||||
$
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
#import "@local/handout:0.1.0": *
|
||||
#import "@preview/cetz:0.3.1"
|
||||
#import "@preview/cetz:0.4.2"
|
||||
|
||||
= Wallpaper Symmetries
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
#import "@local/handout:0.1.0": *
|
||||
#import "@preview/cetz:0.3.1"
|
||||
#import "@preview/cetz:0.4.2"
|
||||
|
||||
= Mirror Symmetry
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
#import "@local/handout:0.1.0": *
|
||||
#import "@preview/cetz:0.3.1"
|
||||
#import "@preview/cetz:0.4.2"
|
||||
|
||||
= Rotational Symmetry
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
#import "@local/handout:0.1.0": *
|
||||
#import "@preview/cetz:0.3.1"
|
||||
#import "@preview/cetz:0.4.2"
|
||||
|
||||
#let pat(img, sol) = {
|
||||
problem()
|
||||
|
@ -1,5 +1,5 @@
|
||||
#import "@local/handout:0.1.0": *
|
||||
#import "@preview/cetz:0.3.1"
|
||||
#import "@preview/cetz:0.4.2"
|
||||
|
||||
= The Signature-Cost Theorem
|
||||
|
||||
@ -7,9 +7,7 @@
|
||||
First, we'll associate a _cost_ to each type of symmetry in orbifold notation:
|
||||
|
||||
#v(4mm)
|
||||
#align(
|
||||
center,
|
||||
table(
|
||||
#align(center, table(
|
||||
stroke: (1pt, 1pt),
|
||||
align: center,
|
||||
columns: (auto, auto, auto, auto),
|
||||
@ -22,8 +20,7 @@ First, we'll associate a _cost_ to each type of symmetry in orbifold notation:
|
||||
[$(n-1) / n$],
|
||||
[#sym.convolve`n`],
|
||||
[$(n-1) / (2n)$],
|
||||
),
|
||||
)
|
||||
))
|
||||
|
||||
|
||||
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 "@preview/cetz:0.3.1"
|
||||
#import "@preview/cetz:0.4.2"
|
||||
|
||||
#show: handout.with(
|
||||
title: [Warm-Up: Big-Tac-Toe],
|
||||
@ -75,9 +75,7 @@ How does your strategy change? \
|
||||
#if extra_boards {
|
||||
pagebreak()
|
||||
|
||||
align(
|
||||
center,
|
||||
grid(
|
||||
align(center, grid(
|
||||
stroke: none,
|
||||
align: center,
|
||||
columns: (1fr, 1fr),
|
||||
@ -85,6 +83,5 @@ How does your strategy change? \
|
||||
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 "@preview/cetz:0.3.1"
|
||||
#import "@preview/cetz:0.4.2"
|
||||
|
||||
|
||||
#show: handout.with(
|
||||
@ -43,10 +43,7 @@ Now, consider the set of six-sided dice below:
|
||||
- Die $E$: $0, 5, 5, 5, 5, 5$
|
||||
On average, which die beats each of the others? Draw a diagram.
|
||||
|
||||
#solution(
|
||||
align(
|
||||
center,
|
||||
cetz.canvas({
|
||||
#solution(align(center, cetz.canvas({
|
||||
import cetz.draw: *
|
||||
|
||||
let s = 0.8 // Scale
|
||||
@ -95,9 +92,7 @@ On average, which die beats each of the others? Draw a diagram.
|
||||
content(c, text(fill: white, size: t, [*C*]))
|
||||
content(d, text(fill: white, size: t, [*D*]))
|
||||
content(e, text(fill: white, size: t, [*E*]))
|
||||
}),
|
||||
),
|
||||
)
|
||||
})))
|
||||
|
||||
#v(1fr)
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
#import "@local/handout:0.1.0": *
|
||||
#import "@preview/cetz:0.3.1"
|
||||
#import "@preview/cetz:0.4.2"
|
||||
|
||||
#show: handout.with(
|
||||
title: [Warm-Up: What's an AST?],
|
||||
@ -18,9 +18,7 @@ You may detach the string as you hang the painting, but it must be re-attached o
|
||||
|
||||
#v(2mm)
|
||||
|
||||
#align(
|
||||
center,
|
||||
cetz.canvas({
|
||||
#align(center, cetz.canvas({
|
||||
import cetz.draw: *
|
||||
let s = 2.5
|
||||
|
||||
@ -69,8 +67,7 @@ You may detach the string as you hang the painting, but it must be re-attached o
|
||||
)
|
||||
|
||||
circle((0.66 * s, 0.66 * s), radius: 0.07 * s, fill: white)
|
||||
}),
|
||||
)
|
||||
}))
|
||||
|
||||
#solution([
|
||||
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 "@preview/cetz:0.3.1"
|
||||
#import "@preview/cetz:0.4.2"
|
||||
|
||||
#show: handout.with(
|
||||
title: [Warm-Up: Passing Balls],
|
||||
@ -78,10 +78,7 @@ Participant 1 has a black ball. Which balls are held by participants 2, 3, and 4
|
||||
|
||||
let i = 1
|
||||
for p in pts {
|
||||
circle(
|
||||
p,
|
||||
radius: radius * s,
|
||||
fill: if i == 1 {
|
||||
circle(p, radius: radius * s, fill: if i == 1 {
|
||||
ored
|
||||
} else if i == 2 {
|
||||
ogreen
|
||||
@ -89,12 +86,9 @@ Participant 1 has a black ball. Which balls are held by participants 2, 3, and 4
|
||||
oorange
|
||||
} else if i == 4 {
|
||||
oblue
|
||||
} else { white },
|
||||
)
|
||||
} else { white })
|
||||
|
||||
content(
|
||||
p,
|
||||
text(
|
||||
content(p, text(
|
||||
fill: if i <= 4 {
|
||||
white
|
||||
} else {
|
||||
@ -102,8 +96,7 @@ Participant 1 has a black ball. Which balls are held by participants 2, 3, and 4
|
||||
},
|
||||
size: t,
|
||||
[*#i*],
|
||||
),
|
||||
)
|
||||
))
|
||||
i = i + 1
|
||||
}
|
||||
}),
|
||||
@ -118,10 +111,7 @@ 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
|
||||
|
||||
|
||||
circle(
|
||||
p,
|
||||
radius: radius * s,
|
||||
fill: if l == 1 {
|
||||
circle(p, radius: radius * s, fill: if l == 1 {
|
||||
ored
|
||||
} else if l == 2 {
|
||||
ogreen
|
||||
@ -129,12 +119,9 @@ Participant 1 has a black ball. Which balls are held by participants 2, 3, and 4
|
||||
oorange
|
||||
} else if l == 4 {
|
||||
oblue
|
||||
} else { white },
|
||||
)
|
||||
} else { white })
|
||||
|
||||
content(
|
||||
p,
|
||||
text(
|
||||
content(p, text(
|
||||
fill: if l <= 4 {
|
||||
white
|
||||
} else {
|
||||
@ -142,8 +129,7 @@ Participant 1 has a black ball. Which balls are held by participants 2, 3, and 4
|
||||
},
|
||||
size: t,
|
||||
[*#l*],
|
||||
),
|
||||
)
|
||||
))
|
||||
i = i + 1
|
||||
}
|
||||
}),
|
||||
@ -158,10 +144,7 @@ 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
|
||||
|
||||
|
||||
circle(
|
||||
p,
|
||||
radius: radius * s,
|
||||
fill: if l == 1 {
|
||||
circle(p, radius: radius * s, fill: if l == 1 {
|
||||
oblue
|
||||
} else if l == 2 {
|
||||
oorange
|
||||
@ -169,12 +152,9 @@ Participant 1 has a black ball. Which balls are held by participants 2, 3, and 4
|
||||
ored
|
||||
} else if l == 4 {
|
||||
ogreen
|
||||
} else { white },
|
||||
)
|
||||
} else { white })
|
||||
|
||||
content(
|
||||
p,
|
||||
text(
|
||||
content(p, text(
|
||||
fill: if l <= 4 {
|
||||
white
|
||||
} else {
|
||||
@ -182,8 +162,7 @@ Participant 1 has a black ball. Which balls are held by participants 2, 3, and 4
|
||||
},
|
||||
size: t,
|
||||
[*#l*],
|
||||
),
|
||||
)
|
||||
))
|
||||
i = i + 1
|
||||
}
|
||||
}),
|
||||
|
@ -1,5 +1,5 @@
|
||||
#import "@local/handout:0.1.0": *
|
||||
#import "@preview/cetz:0.3.1"
|
||||
#import "@preview/cetz:0.4.2"
|
||||
|
||||
#show: handout.with(
|
||||
title: [Warm-Up: What's an AST?],
|
||||
@ -24,9 +24,7 @@ respecting the order of operations $[and, times, div, +, -]$.
|
||||
|
||||
#v(2mm)
|
||||
|
||||
#align(
|
||||
center,
|
||||
cetz.canvas({
|
||||
#align(center, cetz.canvas({
|
||||
import cetz.draw: *
|
||||
|
||||
// spell:off
|
||||
@ -70,5 +68,4 @@ respecting the order of operations $[and, times, div, +, -]$.
|
||||
line("bb", "bba")
|
||||
line("bb", "bbb")
|
||||
// spell:on
|
||||
}),
|
||||
)
|
||||
}))
|
||||
|
@ -1,14 +1,12 @@
|
||||
#import "@local/handout:0.1.0": *
|
||||
#import "@preview/cetz:0.3.1"
|
||||
#import "@preview/cetz:0.4.2"
|
||||
|
||||
#show: handout.with(
|
||||
title: [Warm-Up: Wild Tic-Tac-Toe],
|
||||
by: "Mark",
|
||||
)
|
||||
|
||||
#let ttt = align(
|
||||
center,
|
||||
cetz.canvas({
|
||||
#let ttt = align(center, cetz.canvas({
|
||||
import cetz.draw: *
|
||||
let s = 0.7 // scale
|
||||
|
||||
@ -17,8 +15,7 @@
|
||||
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))
|
||||
}),
|
||||
)
|
||||
}))
|
||||
|
||||
|
||||
#problem()
|
||||
|
Reference in New Issue
Block a user