Code for the Advent of Code event
aoc
advent-of-code
1#!/usr/bin/env ruby
2# frozen_string_literal: true
3
4MAZE = {} # rubocop:disable Style/MutableConstant
5ARGF.readlines.map { _1.strip.split('-') }.each do |a, b|
6 MAZE[a] ||= []
7 MAZE[a] << b
8 next if a == 'start' || b == 'end'
9 MAZE[b] ||= []
10 MAZE[b] << a
11end
12
13def solve(current, visited, twice)
14 visited.add current if current =~ /^[a-z]+$/
15 return 1 if current == 'end'
16 MAZE[current].sum do |node|
17 seen = visited.include? node
18 next 0 if seen && (twice || node == 'start' || node == 'end')
19 solve(node, visited.dup, twice || seen)
20 end
21end
22
23puts solve('start', Set.new, true)
24puts solve('start', Set.new, false)