diff --git a/2023/day9/p1.rb b/2023/day9/p1.rb new file mode 100644 index 0000000..ff852be --- /dev/null +++ b/2023/day9/p1.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +inputs = [] +File.foreach('./2023/day9/data') do |line| + inputs << line.split(' ').map(&:to_i) +end + +def add_derivative(inputs) + return 0 if inputs.all?(&:zero?) + inputs[-1] + add_derivative(inputs.map.with_index { |x, i| i.zero? ? x : x - inputs[i - 1] }[1..inputs.length]) +end + +puts inputs.map { |input| add_derivative input }.sum diff --git a/2023/day9/p2.rb b/2023/day9/p2.rb new file mode 100644 index 0000000..3339ba2 --- /dev/null +++ b/2023/day9/p2.rb @@ -0,0 +1,11 @@ +inputs = [] +File.foreach('./2023/day9/data') do |line| + inputs << line.split(' ').map(&:to_i) +end + +def add_derivative(inputs) + return 0 if inputs.all?(&:zero?) + inputs[-1] - add_derivative(inputs.map.with_index { |x, i| i.zero? ? x : inputs[i - 1] - x }[1..inputs.length]) +end + +puts inputs.map { |input| add_derivative input.reverse }.sum