Code for the Advent of Code event
aoc
advent-of-code
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}"