annotate day1.rb @ 39:0e17e4bd97a9 default tip

Rewrite as four-dimensional route finding The grid isn't just a 2D grid. The constraints make it 4D: * X * Y * Last direction * Number of steps in that direction By tracking all four dimensions, we can find the shortest route for _all_ combinations of the constraint. Previously, we were dropping routes that were currently longer but ended up shorter because they could take subsequent steps that other routes couldn't.
author IBBoard <dev@ibboard.co.uk>
date Sun, 22 Sep 2024 11:30:53 +0100
parents 76cc43966538
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
76cc43966538 Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
1 #! /usr/bin/env ruby
76cc43966538 Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
2
76cc43966538 Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
3 if ARGV.length != 1
76cc43966538 Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
4 abort("Incorrect arguments - pass a single file")
76cc43966538 Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
5 elsif not File.exist? (ARGV[0])
76cc43966538 Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
6 abort ("File #{ARGV[0]} did not exist")
76cc43966538 Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
7 end
76cc43966538 Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
8
76cc43966538 Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
9 file = ARGV[0]
76cc43966538 Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
10 sum = 0
76cc43966538 Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
11 File.open(file, "r").each_line do |line|
76cc43966538 Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
12 match = /^[^0-9]*([0-9]).*?(([0-9])[^0-9]*)?$/.match(line)
76cc43966538 Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
13 if match
76cc43966538 Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
14 first_num = match[1].to_i
76cc43966538 Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
15 second_num = match[3].nil? ? first_num : match[3].to_i
76cc43966538 Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
16 sum += (first_num * 10) + second_num
76cc43966538 Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
17 end
76cc43966538 Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
18 end
76cc43966538 Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
19
76cc43966538 Start https://adventofcode.com/2023/day/1 in Ruby
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
20 puts sum