From 958353d5398af4276f6510b44ff0af4d0513d4a7 Mon Sep 17 00:00:00 2001 From: Alpha Chen Date: Sat, 8 Dec 2018 21:23:37 -0800 Subject: [PATCH] [2018][ruby][09.1] speedrun --- 2018/ruby/day_09.rb | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 2018/ruby/day_09.rb diff --git a/2018/ruby/day_09.rb b/2018/ruby/day_09.rb new file mode 100644 index 0000000..64f4068 --- /dev/null +++ b/2018/ruby/day_09.rb @@ -0,0 +1,35 @@ +ARGF.read.chomp =~ /(\d+) players; last marble is worth (\d+) points/ +num_players = $1.to_i +num_marbles = $2.to_i + +circle = [] +marbles = (0...num_marbles).to_a + +zero = marbles.shift +circle << zero + +current_marble_index = 0 +current_player = 0 +scores = Hash.new(0) + +until marbles.empty? + current_marble = marbles.shift + + if current_marble % 23 == 0 + scores[current_player] += current_marble + index = (current_marble_index - 7) % circle.size + scores[current_player] += circle.delete_at(index) + current_marble_index = index + else + index = (current_marble_index + 2) % circle.size - 1 + index += 1 unless index == -1 + circle.insert(index, current_marble) + current_marble_index = index % circle.size + end + + # puts "[#{current_player + 1}] #{circle.join(" ")}" + + current_player = (current_player + 1) % num_players +end + +p scores.max_by(&:last)