#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 painting on a string. \ Hang the painting on two nails so that if either is removed, the painting falls. \ #v(2mm) You may detach the string as you hang the painting, but it must be re-attached once you're done. \ #hint[The solution to this problem isn't a "think outside the box" trick, it's a clever wrapping of the string.] #v(2mm) #align( center, cetz.canvas({ import cetz.draw: * let s = 2.5 line( (0 * s, 1 * s), (2 * s, 1 * s), (2 * s, 0 * s), (0 * s, 0 * s), close: true, stroke: (thickness: 0.8mm), ) line( (0.1 * s, 1 * s), (0.5 * s, 1.5 * s), (1.5 * s, 1.5 * s), (1.9 * s, 1 * s), stroke: (thickness: 0.5mm, dash: "dotted"), ) 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) line( (0.66 * s, 0.66 * s), (0.66 * s, 0.35 * s), (0.60 * s, 0.1 * s), ) line( (0.72 * s, 0.1 * s), (0.66 * s, 0.35 * s), ) line( (0.66 * s, 0.575 * s), (0.6 * s, 0.475 * s), (0.525 * s, 0.575 * s), ) line( (0.66 * s, 0.575 * s), (0.72 * s, 0.475 * s), (0.795 * s, 0.575 * s), ) 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: - Start on the left - Move over both nails, wrap right nail cw - Wrap left nail ccw - Wrap right nail ccw - Exit downwards, in between both nails ])