Code for the Advent of Code event
aoc advent-of-code
at rust 53 lines 830 B view raw
1#!/usr/bin/env ruby 2# frozen_string_literal: true 3 4class Elf 5 attr_reader :id 6 7 attr_accessor :previous, :next 8 9 def initialize(id) 10 @id = id 11 end 12 13 def delete! 14 @next.previous = @previous 15 @previous.next = @next 16 end 17end 18 19def make_elves(count) 20 elves = count.times.map { |i| Elf.new(i + 1) } 21 elves.each.with_index do |elf, i| 22 elf.previous = elves[(i - 1) % count] 23 elf.next = elves[(i + 1) % count] 24 end 25 elves 26end 27 28elves = make_elves $stdin.readline.strip.to_i 29 30SIZE = elves.size 31 32start = elves.first 33 34while start.next != start 35 start.next.delete! 36 start = start.next 37end 38 39puts "(1) #{start.id}" 40 41elves = make_elves SIZE 42 43start = elves.first 44mid = elves[SIZE / 2] 45 46SIZE.times do |i| 47 mid.delete! 48 mid = mid.next 49 mid = mid.next if (SIZE - i).odd? 50 start = start.next 51end 52 53puts "(2) #{start.id}"