Skip to content

Instantly share code, notes, and snippets.

@carlwiedemann
Created December 7, 2024 09:41
Show Gist options
  • Save carlwiedemann/8498eb2ad658bb8a7e83f5c4e5b18053 to your computer and use it in GitHub Desktop.
Save carlwiedemann/8498eb2ad658bb8a7e83f5c4e5b18053 to your computer and use it in GitHub Desktop.
Advent of Code 2024 day007.rb
require_relative "main"
module Day007
INPUT = File.read('INPUT.txt')
DATA = INPUT.split("\n").map do |line|
parts = line.split(":")
[
parts[0].to_i,
parts[1].split(" ").map(&:to_i)
]
end
##########
# Part 1 #
##########
dfs1 = ->(n, l) do
return n == l[0] * l[-1] || n == l[0] + l[-1] if l.count == 2
n % l[-1] == 0 && dfs1.call(n / l[-1], l[0...-1]) || \
n >= l[-1] && dfs1.call(n - l[-1], l[0...-1])
end
answer1 = DATA.sum { dfs1.call(_1[0], _1[1]) ? _1[0] : 0 }
pp answer1
##########
# Part 2 #
##########
dfs2 = ->(n, l) do
return n == l[0] * l[-1] || n == l[0] + l[-1] || n.to_s == l[0].to_s + l[-1].to_s if l.count == 2
n % l[-1] == 0 && dfs2.call(n / l[-1], l[0...-1]) || \
n >= l[-1] && dfs2.call(n - l[-1], l[0...-1]) || \
n.to_s.end_with?(l[-1].to_s) && dfs2.call(n.to_s[0...-l[-1].to_s.length].to_i, l[0...-1])
end
answer2 = DATA.sum { dfs2.call(_1[0], _1[1]) ? _1[0] : 0 }
pp answer2
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment