-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path05.rb
37 lines (28 loc) · 1.45 KB
/
05.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# https://adventofcode.com/2024/day/5
input_lines = File.readlines('input05.txt')
sep_index = input_lines.index("\n")
rules = input_lines[..sep_index - 1].map { |line| line.split('|').map(&:to_i) }
updates = input_lines[sep_index..].map { |line| line.split(',').map(&:to_i) }
@rule_hash = Hash.new { |h, k| h[k] = Set.new }
rules.each { |page1, page2| @rule_hash[page1] << page2 }
########################################################################################################################
# 1
########################################################################################################################
def ordered_update?(update)
update == update.sort do |page1, page2|
@rule_hash[page1].include?(page2) ? -1 : (@rule_hash[page2].include?(page1) ? 1 : 0)
end
end
puts updates.select { |update| ordered_update?(update) }.sum { |update| update[update.length / 2] }
# 5091
########################################################################################################################
# 2
########################################################################################################################
def order_update(update)
sorted_update = update.sort do |page1, page2|
@rule_hash[page1].include?(page2) ? -1 : (@rule_hash[page2].include?(page1) ? 1 : 0)
end
sorted_update if sorted_update != update
end
puts updates.filter_map { |update| order_update(update) }.sum { |update| update[update.length / 2] }
# 4681