Code for the Advent of Code event
aoc
advent-of-code
1#!/usr/bin/env ruby
2# frozen_string_literal: true
3
4MAP = { '(' => ')', '[' => ']', '{' => '}', '<' => '>' }.freeze
5POINTS = { ')' => 3, ']' => 57, '}' => 1197, '>' => 25_137 }.freeze
6SCORE = { ')' => 1, ']' => 2, '}' => 3, '>' => 4 }.freeze
7
8illegal = 0
9scores = []
10
11ARGF.readlines.map(&:strip).each do |line|
12 next_close = []
13 incomplete = true
14 line.chars.each do |char|
15 if MAP.key? char
16 next_close.push MAP[char]
17 else
18 expected = next_close.pop
19 next if char == expected
20 illegal += POINTS[char]
21 incomplete = false
22 break
23 end
24 end
25 scores << next_close.reverse.reduce(0) { |a, e| (a * 5) + SCORE[e] } if incomplete
26end
27
28puts illegal
29puts scores.sort[scores.size / 2]