require 'set' @input = File.read("3.input").split("\n") def prio(char) if char.ord >= 'a'.ord then return char.ord - 'a'.ord + 1 else return char.ord - 'A'.ord + 27 end end def part1() score = 0 for sack in @input do left, right = sack.slice(0, sack.length / 2), sack.slice(sack.length / 2, sack.length) right.each_char do |char| if left.include? char then score += prio(char) break end end end puts score end def part2() score = 0 @input.each_slice(3) do |group| sets = group.map {|sack| Set.new(sack.chars)} result = sets[0] & sets[1] & sets[2] score += prio(result.to_a[0]) end puts score end part1() part2()