Mercurial > repos > other > adventofcode2023
diff day6.rb @ 6:9d89489bc939
Day 6 part 1 - calculate times above range
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Thu, 07 Dec 2023 08:16:30 +0000 |
parents | |
children | 51e5f26dc81e |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/day6.rb Thu Dec 07 08:16:30 2023 +0000 @@ -0,0 +1,21 @@ +#! /usr/bin/env ruby + +if ARGV.length != 1 + abort("Incorrect arguments - needs input file") +elsif not File.exist? (ARGV[0]) + abort("File #{ARGV[0]} did not exist") +end + +file = ARGV[0] + +times, distances = File.open(file, "r").each_line(chomp: true).map {|v| v.split(":")[1].split(" ").map(&:to_i)} +events = times.zip(distances) + +product = events.map do |event| + mid = (event[0].to_f / 2).floor + first_success = (1..mid).bsearch {|i| (event[0] - i) * i > event[1]} + num_success = (mid - first_success + 1) * 2 + event[0].odd? ? num_success : num_success - 1 +end.reduce(:*) + +puts product \ No newline at end of file