aboutsummaryrefslogtreecommitdiff
path: root/day16/part2
blob: e494f1613c199d6a334db3c1e2cecf6b8ec238d1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#!/usr/bin/env ruby

input = gets.chomp.split(',')

startline = %w( a b c d e f g h i j k l m n o p )
line = startline.dup
i = 0

def dodance(line, dance)
  dance.each do |istr|
    case istr[0]
    when 's'
      n = istr[1..-1].to_i
      line = line[-n..-1] + line[0..-n-1]
    when 'x'
      ns = istr[1..-1].split('/').map(&:to_i)
      t = line[ns[0]]
      line[ns[0]] = line[ns[1]]
      line[ns[1]] = t
    when 'p'
      ps = istr[1..-1].split('/')
      i0 = line.index(ps[0])
      i1 = line.index(ps[1])
      line[i0] = ps[1]
      line[i1] = ps[0]
    end
  end
  line
end

loop do
  line = dodance(line, input)
  i += 1
  break if line == startline
end

(1_000_000_000 % i).times do
  line = dodance(line, input)
end

puts line.join