view day1b.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
line wrap: on
line source

#! /usr/bin/env ruby

if ARGV.length != 1
        abort("Incorrect arguments - pass a single file")
elsif not File.exist? (ARGV[0])
        abort ("File #{ARGV[0]} did not exist")
end

file = ARGV[0]
sum = 0

number_map = {
	"one" => 1,
	"two" => 2,
	"three" => 3,
	"four" => 4,
	"five" => 5,
	"six" => 6,
	"seven" => 7,
	"eight" => 8,
	"nine" => 9
}

(1..9).each {|i| number_map[i.to_s] = i}

File.open(file, "r").each_line do |line|
	pos = line.length
	value_1 = 0
	number_map.each do |k,v| 
		index = line.index(k)
		if index and index < pos
			value_1 = v
			pos = index
		end
	end
	pos = line.length
	line.reverse!
	value_2 = 0
	number_map.each do |k,v| 
		index = line.index(k.reverse)
		if index and index < pos
			value_2 = v
			pos = index
		end
	end
	sum += (value_1 * 10) + value_2
end

puts sum