Code for the Advent of Code event
aoc advent-of-code
at rust 36 lines 885 B view raw
1#!/usr/bin/env ruby 2# frozen_string_literal: true 3 4pairs = ARGF.read.split("\n\n").map { |b| b.lines.map { |l| eval l } } 5 6def check(a, b) 7 return a <=> b if a.is_a?(Numeric) && b.is_a?(Numeric) 8 9 a.each_with_index do |av, i| 10 bv = b[i] 11 return 1 if bv.nil? 12 13 if av.is_a?(Enumerable) && !bv.is_a?(Enumerable) 14 bv = [bv] 15 elsif !av.is_a?(Enumerable) && bv.is_a?(Enumerable) 16 av = [av] 17 end 18 19 if av.is_a?(Enumerable) && bv.is_a?(Enumerable) 20 nested = check(av, bv) 21 return nested if nested == -1 || nested == 1 22 elsif av < bv 23 return -1 24 elsif av > bv 25 return 1 26 end 27 end 28 29 a.size <=> b.size 30end 31 32puts pairs.map.with_index.select { |p, _i| check(p[0], p[1]) == -1 }.map { _2 + 1 }.sum 33 34packets = (pairs.flatten(1) + [[[2]], [[6]]]).sort { check _1, _2 } 35 36puts (packets.find_index([[2]]) + 1) * (packets.find_index([[6]]) + 1)