Mercurial > repos > other > adventofcode2023
diff day1b.rb @ 0:76cc43966538
Start https://adventofcode.com/2023/day/1 in Ruby
Part B was nasty because it didn't explain how to handle
overlapping numbers, which was occasionally important for
the last number.
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Fri, 01 Dec 2023 20:00:22 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/day1b.rb Fri Dec 01 20:00:22 2023 +0000 @@ -0,0 +1,49 @@ +#! /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 \ No newline at end of file