Mercurial > repos > other > adventofcode2023
comparison 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 |
comparison
equal
deleted
inserted
replaced
5:a14f6eca67db | 6:9d89489bc939 |
---|---|
1 #! /usr/bin/env ruby | |
2 | |
3 if ARGV.length != 1 | |
4 abort("Incorrect arguments - needs input file") | |
5 elsif not File.exist? (ARGV[0]) | |
6 abort("File #{ARGV[0]} did not exist") | |
7 end | |
8 | |
9 file = ARGV[0] | |
10 | |
11 times, distances = File.open(file, "r").each_line(chomp: true).map {|v| v.split(":")[1].split(" ").map(&:to_i)} | |
12 events = times.zip(distances) | |
13 | |
14 product = events.map do |event| | |
15 mid = (event[0].to_f / 2).floor | |
16 first_success = (1..mid).bsearch {|i| (event[0] - i) * i > event[1]} | |
17 num_success = (mid - first_success + 1) * 2 | |
18 event[0].odd? ? num_success : num_success - 1 | |
19 end.reduce(:*) | |
20 | |
21 puts product |