Code for the Advent of Code event
aoc
advent-of-code
1#!/usr/bin/env ruby
2# frozen_string_literal: true
3
4NUMS = ARGF.readlines.map(&:to_i).freeze
5LEN = NUMS.size
6MOD = LEN - 1
7
8def mix(nums, indices)
9 LEN.times do |original_i|
10 current_i = indices.index original_i
11 indices.delete_at current_i
12 indices.insert (current_i + nums[original_i]) % MOD, original_i
13 end
14end
15
16def solve(nums, n)
17 indices = LEN.times.to_a
18 n.times { mix(nums, indices) }
19 zero_i = indices.index nums.index 0
20 [1000, 2000, 3000].sum { |n| nums[indices[(zero_i + n) % LEN]] }
21end
22
23puts solve(NUMS, 1)
24
25KEY = 811_589_153
26NUMS2 = NUMS.map { _1 * KEY }
27
28puts solve(NUMS2, 10)