50 lines
		
	
	
		
			928 B
		
	
	
	
		
			Typst
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			928 B
		
	
	
	
		
			Typst
		
	
	
	
	
	
| #import "/src/utils.typ": *
 | |
| 
 | |
| #let solve(input) = {
 | |
|   let links = input.split("\n")
 | |
| 
 | |
|   let links-dict = (:)
 | |
| 
 | |
|   let to-test = ()
 | |
|   for link in links {
 | |
|     let (a, b) = link.split("-")
 | |
|     if a not in links-dict {
 | |
|       links-dict.insert(a, ())
 | |
|     }
 | |
|     if b not in links-dict {
 | |
|       links-dict.insert(b, ())
 | |
|     }
 | |
|     links-dict.at(a).push(b)
 | |
|     links-dict.at(b).push(a)
 | |
|     if a.starts-with("t") {
 | |
|       to-test.push(a)
 | |
|     }
 | |
|     if b.starts-with("t") {
 | |
|       to-test.push(b)
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   let total = 0
 | |
|   let groups = ()
 | |
|   for comp1 in to-test.dedup() {
 | |
|     for comp2 in links-dict.at(comp1) {
 | |
|       for comp3 in links-dict.at(comp2) {
 | |
|         if comp1 in links-dict.at(comp3) {
 | |
|           let group = (comp1, comp2, comp3).sorted()
 | |
|           if group not in groups {
 | |
|             total += 1
 | |
|             groups.push(group)
 | |
|           }
 | |
|         }
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   return total
 | |
| }
 | |
| 
 | |
| #show-puzzle(
 | |
|   23, 1,
 | |
|   solve,
 | |
|   example: 7
 | |
| ) |