added visualization + minor fixes
This commit is contained in:
		@@ -1,4 +1,5 @@
 | 
			
		||||
#import "/src/utils.typ": *
 | 
			
		||||
#import "@preview/cetz:0.3.1": canvas, draw
 | 
			
		||||
 | 
			
		||||
#let solve(input) = {
 | 
			
		||||
  let lines = input.split("\n")
 | 
			
		||||
@@ -29,8 +30,57 @@
 | 
			
		||||
  return total
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#let visualize(input) = {
 | 
			
		||||
  let lines = input.split("\n")
 | 
			
		||||
  let (l1, l2) = ((), ())
 | 
			
		||||
  let reg = regex("^(\d+)\s+(\d+)$")
 | 
			
		||||
  for line in lines {
 | 
			
		||||
    let digits = line.match(reg)
 | 
			
		||||
    l1.push(digits.captures.first())
 | 
			
		||||
    l2.push(digits.captures.last())
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  let unique = l1.dedup()
 | 
			
		||||
  let colors = (red,green)
 | 
			
		||||
  canvas({
 | 
			
		||||
    for (i, n) in l1.enumerate() {
 | 
			
		||||
      let y = -0.9 * i
 | 
			
		||||
      draw.circle(
 | 
			
		||||
        (0, y),
 | 
			
		||||
        radius: 0.35,
 | 
			
		||||
        stroke: black,
 | 
			
		||||
        name: "l" + str(i)
 | 
			
		||||
      )
 | 
			
		||||
      draw.content((0, y), n)
 | 
			
		||||
    }
 | 
			
		||||
    for (i, n) in l2.enumerate() {
 | 
			
		||||
      let y = -0.9 * i
 | 
			
		||||
      draw.circle(
 | 
			
		||||
        (4, y),
 | 
			
		||||
        radius: 0.35,
 | 
			
		||||
        stroke: black,
 | 
			
		||||
        name: "r" + str(i)
 | 
			
		||||
      )
 | 
			
		||||
      draw.content((4, y), n)
 | 
			
		||||
    }
 | 
			
		||||
    for (i, a) in l1.enumerate() {
 | 
			
		||||
      for (j, b) in l2.enumerate() {
 | 
			
		||||
        if a == b {
 | 
			
		||||
          draw.line(
 | 
			
		||||
            "l" + str(i),
 | 
			
		||||
            "r" + str(j),
 | 
			
		||||
            stroke: colors.at(unique.position(n => n == a)) + 1.5pt,
 | 
			
		||||
            mark: (end: "straight")
 | 
			
		||||
          )
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  })
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#show-puzzle(
 | 
			
		||||
  1,
 | 
			
		||||
  1, 2,
 | 
			
		||||
  solve,
 | 
			
		||||
  example: 31
 | 
			
		||||
  example: 31,
 | 
			
		||||
  visualize: visualize
 | 
			
		||||
)
 | 
			
		||||
		Reference in New Issue
	
	Block a user