aoc_source(day =11, part =1)input=aoc_read(day =11)aoc_run(solve_day11_part1(input))
Elapsed: 0.026 seconds
Memory: 17414 KB
— R Day 11 Part 2 —
solve_day11_part2<-function(input){lookup<-stringi::stri_extract_all_regex(input, r"{(?<= )\w+}")names(lookup)<-stringi::stri_extract_all_regex(input, r"{.+?(?=:)}")n_devices<-length(input)prod(count_paths("svr", "fft", lookup),count_paths("fft", "dac", lookup),count_paths("dac", "out", lookup))}count_paths<-function(from, to, lookup){if(from==to)return(1L)if(from=="out")return(0L)next_nodes<-lookup[[from]]dfs<-vapply(next_nodes, \(node)count_paths(node, to, lookup),integer(1))sum(dfs)}# the golden ticketcount_paths<-memoise::memoise(count_paths)
Run
aoc_source(day =11, part =2)input=aoc_read(day =11)aoc_run(solve_day11_part2(input))
Elapsed: 0.008 seconds
Memory: 32573 KB
— Python Day 11 Part 1 —
def solve_day11_part1(text): first ="you" last ="out" keys = [line[:3] for line in text] outs = [line[4:].split() for line in text] devices =dict(zip(keys, outs))return(search(first, last, devices))def search(first, last, devices):if first == last:return(1) next_devices = devices[first] paths = [search(next, last, devices) fornextin next_devices]return(sum(paths))
Run
aoc_source(day =11, part =1)input= aoc_read(day =11)result = aoc_run("solve_day11_part1(input)")
Elapsed: < 0.001 seconds
Memory: 265 KB
— Python Day 11 Part 2 —
def solve_day11_part2(text): keys = [line[:3] for line in text] outs = [line[4:].split() for line in text] devices =dict(zip(keys, outs)) svr = search("svr", "fft", devices) fft = search("fft", "dac", devices) dac = search("dac", "out", devices)return(svr * fft * dac)def search(first, last, devices): curr_layer = {first:1} last_count =0whilelen(curr_layer) >0: next_layer = {}for dev in curr_layer: curr_count = curr_layer[dev]if dev == last: last_count += curr_countcontinueif dev =="out":continue next_devs = devices[dev]for next_dev in next_devs:if next_dev in next_layer: next_layer[next_dev] += curr_countelse: next_layer[next_dev] = curr_count curr_layer = next_layerreturn(last_count)
Run
aoc_source(day =11, part =2)input= aoc_read(day =11)result = aoc_run("solve_day11_part2(input)")