From 6078e7b72a2b4a21d087d245531ff324f654281d Mon Sep 17 00:00:00 2001 From: Guillaume Dott Date: Tue, 6 Dec 2022 11:59:50 +0100 Subject: [PATCH] Resolve days 2 to 6 --- 02/input | 2500 ++++++++++++++++++++++++++++++++++++++++++++++++++ 02/script.rb | 69 ++ 03/input | 300 ++++++ 03/script.rb | 23 + 04/input | 1000 ++++++++++++++++++++ 04/script.rb | 24 + 05/input | 512 +++++++++++ 05/script.rb | 63 ++ 06/golf.rb | 1 + 06/input | 1 + 06/script.rb | 21 + common.rb | 4 + 12 files changed, 4518 insertions(+) create mode 100644 02/input create mode 100755 02/script.rb create mode 100644 03/input create mode 100755 03/script.rb create mode 100644 04/input create mode 100755 04/script.rb create mode 100644 05/input create mode 100755 05/script.rb create mode 100644 06/golf.rb create mode 100644 06/input create mode 100755 06/script.rb diff --git a/02/input b/02/input new file mode 100644 index 0000000..5525ccf --- /dev/null +++ b/02/input @@ -0,0 +1,2500 @@ +B Y +A Z +C Z +A Y +A Y +B Y +C Y +A Y +B Y +B Y +A Y +B Z +B Y +A Y +C Y +B X +B Y +B Y +B Y +C Y +B Y +A Y +B Y +A Y +B Y +C Y +A Y +B X +B Y +B Y +B X +B Y +C Y +B Y +C Z +A X +B Y +B Y +A Z +B X +C Y +C Z +B Y +B Y +A Y +B X +B Y +B Y +B X +B Y +C Y +A Y +B Y +C Y +C X +B X +B X +A Z +C Y +B Y +C Z +B X +B Y +B Y +B X +B Y +B Z +B Y +B Y +B X +B Y +B X +C X +B Y +B X +A Y +B Y +B X +B Y +A Y +B X +B X +B Y +A Y +B Y +B Y +B Y +C Z +B X +B Y +B X +B X +B Y +B X +C Z +B Y +B Y +B Y +B Y +B Y +B X +A Y +B Y +C Y +C Z +A Y +B Y +A Y +C Z +B Y +B X +B Y +C X +A Y +B X +B Y +B X +B X +B X +A Y +C Z +B Y +A Y +B X +A Y +B Y +A Y +B X +B Y +B Y +B Y +B X +B X +C Z +B Z +B Y +B X +C Y +C Y +C Z +C X +C Y +B Y +B X +A Y +A Y +B X +C Z +B X +C X +B X +B Y +B Y +A Z +B Z +C Y +C Y +B Y +B Y +C Y +C Y +C Z +B Y +B X +B Y +B Y +C Y +B Y +B Y +B Y +B Y +B Y +C Y +A Z +B X +B Y +C Z +B Y +C Y +B Y +B X +C Y +B Y +B X +C Y +B Y +B Y +B Y +A Y +B X +B X +B Y +B Y +B X +C Z +B Y +A Y +A Y +B X +C X +A Y +B X +B X +B Y +B Y +A Y +C Y +C Z +C Y +B Y +B Y +A Y +A Y +A Y +B Y +B Y +A X +B Y +B Y +B X +B X +C Z +B X +B X +A Y +A Y +A Y +B Y +B Y +C Y +B X +A Y +B Y +C Z +B X +A Y +C Z +A Y +B X +C Y +B Y +B Y +C Y +B X +B X +B Y +B Y +B Y +B Y +A Y +B X +B X +B Y +A Y +B Z +A Y +B Y +C Y +B Y +B Y +B X +C Z +B Y +B Y +B X +B X +C Z +B Y +A Y +B Y +B X +C Y +A Z +C Z +B Y +B Y +B X +C Y +C X +B X +C Y +C Z +B X +B Y +B Y +C Z +B X +C X +A Z +A Y +B X +C X +B Y +A Z +A Z +A Y +B X +A Y +B Y +B Y +C Z +B X +A Z +B Y +B X +A Y +B Y +C Y +B Y +B X +B X +A Z +B Y +B Y +C Z +B X +B X +B Y +C Z +B X +B X +C Z +B X +A Y +B X +C Z +A Y +C X +B Y +B X +B Y +B Y +C Y +B X +A Z +A Y +B X +A Z +B X +B Y +B Y +A Z +C X +B Y +B Y +B Y +A Z +B Y +B X +C Y +C Z +B X +B Y +B Y +B Y +C Y +A Z +B Y +C Z +C X +B Y +C Y +B Y +B X +B Y +B Y +A Y +B Y +B Y +C Z +A Z +B X +C Y +B Y +B Y +B Y +A Y +A Y +B Y +A Y +B Y +A Y +B X +C Y +B Y +C X +A X +B X +A Y +C Y +B Y +A X +B X +A Z +B X +B Y +B Y +B X +B Y +B Y +B X +A Y +A Z +C Z +B Y +B Y +B X +C Z +C Z +B Y +A Y +B X +C Z +A Y +B X +B Z +B Y +B Y +B Y +B X +B Y +B X +B X +B Y +C Y +B Y +B Y +B Y +B Y +B Y +C Z +B X +B Y +B Y +B Y +B X +B X +C Y +B X +B X +C Z +B Y +B Y +B Y +B Y +B Y +C Y +B Y +B Y +B Y +B X +B Y +B X +B Y +B Y +C X +B Y +C X +B X +C Z +C X +B Y +A Y +A Z +A Y +C Y +B X +B Y +B Y +C Z +A Z +B Y +B Y +B Y +B Y +B Y +B Y +B Y +C Y +B Y +C Y +C X +B X +B X +C Z +A X +B X +B Y +A Y +B X +B Y +A Z +B Y +C Y +B X +B Y +B Y +C Y +C Y +B Y +B X +B X +B Y +B Y +B Y +B Y +C Z +B X +B Y +B Y +B X +B Y +B X +B X +B Y +B X +B Y +B Y +C Y +B X +B Y +B Y +B Y +A Y +B Y +A Z +B Y +C Y +C Y +B Y +B X +A X +B Y +A Y +B X +B Y +B Y +B X +C Y +C Z +B X +B Y +A Y +C Y +A Z +C Y +B Y +B Y +B Y +B X +C Y +B Y +B Y +A Y +A X +B Y +B X +B Y +B Y +A Y +B X +C X +B Y +A Y +C Y +B Y +B Y +A Y +C Y +A Y +C Y +B Y +B X +C Y +C Y +B Y +B Y +A Y +B Y +B Y +B Y +C Z +B X +B Y +B X +B X +A X +A Y +B Y +B X +A Z +B X +A Y +B Y +C Y +C Y +C Y +B Y +A Y +A Y +B Y +B Y +B Z +B Y +B X +A Y +B X +A Z +B Y +B Y +B X +B Y +C Y +A Z +B Y +C X +C Y +B Y +B Y +C X +B Y +A Y +A Y +C Z +B X +B X +B X +B X +B Y +C Z +B X +C Y +A Y +B Y +A Y +B Y +A Y +B Y +B Y +C Y +B Y +B Y +B X +B Y +B X +B Y +B X +B Y +A Z +C X +B X +C X +B X +A Y +C Y +B X +C Y +B X +B X +C Z +C Y +B X +B X +B X +B Y +C Y +B X +B X +A Z +B Y +B Y +C Y +B X +C Z +C Y +A Y +B X +C Y +C X +B Y +B Y +A X +B Y +B X +B Y +B X +C Y +B X +A Y +B Y +B X +B Y +B Y +B Y +C Y +C Y +C Y +C Y +B X +B Y +A Z +B X +B X +B Y +B Y +C Z +B Y +B X +B Y +B X +C Y +B Y +C Z +A X +B X +B Y +C Y +C X +B X +B X +B Y +B Y +B Y +B X +B Y +B Y +B X +C Z +B Y +B Y +B X +B X +B Y +B X +C Z +A Z +C X +C X +B Y +B X +A Y +B Y +B X +C Z +A X +B X +B Y +B X +B X +B Y +B Y +A Z +B X +A Y +A Y +B Y +B X +B Y +C Y +A Y +A Y +B X +B Z +C Y +C Y +B Y +C X +B X +C Z +C Z +B Y +C X +A Y +B Y +B X +A Y +B Y +C X +B Y +B X +B Y +C Z +A X +A Z +B Y +B Y +B X +B X +A Y +B Y +B X +B Y +C Y +B Y +B X +C Z +C X +C Y +A Y +B Y +A Y +B Y +B Y +B X +B X +A Y +A Y +B Y +B Y +B Y +A Y +B Y +B Y +B Y +C Z +A Z +C Y +B Y +B X +C Y +A Z +B X +B Y +A Z +C Y +B Y +B X +B Y +B Y +A Y +B X +B Z +B X +B X +B X +B X +B Y +B Y +B X +B Y +C Y +C X +C Z +B Y +B Y +C Y +A Y +B X +B X +B Y +B X +B Y +B Y +A Y +B Y +B Y +B Y +B Y +A Y +B X +C Z +B Y +B Y +B Y +B X +B Y +C Y +B X +B X +A Y +A X +A Y +C X +C Y +B Y +B Y +C Y +B X +B Y +B Y +C Y +B X +C X +B X +C Y +B Y +B X +B X +B Y +C X +B X +B Y +B X +B X +B Y +B X +B Y +B Y +B Y +C Y +B Y +B Y +C Z +B Y +B X +C Y +B Y +B Y +B X +B Y +A Y +B Y +A Y +B Y +B Y +A Z +B X +B Y +B Y +C Z +B X +B X +B Y +B Y +B Y +B X +C Y +C Y +B X +B Z +A X +B Z +C Y +B X +B X +A X +B Y +B X +C Z +C Y +B X +B Y +B Y +B Y +C Z +B Y +C Y +C Y +A Y +B X +B Y +B Y +B Y +A X +B Y +B Y +B X +B X +A Y +B X +B Y +A Z +B Y +C Z +B X +B Y +B Y +A Y +A Y +B Y +B Y +B Y +B Y +C Y +C Z +B X +B X +B Y +B Y +B X +B X +A X +A Y +B Y +B Y +B X +B Y +A Y +B Z +B X +C Z +B Y +B X +B X +B Y +B Y +B Y +C Y +C X +B X +C Z +B Z +B X +B X +C Z +C Y +B X +A Z +C Y +A Y +B X +B Y +C Z +B Y +B Y +B X +B Y +C Z +B Y +A Y +B X +B X +B X +C Y +B X +B Y +B X +B Y +B Y +A X +C Y +A Y +C Y +B X +B Y +B X +B X +B Y +B Y +B Y +B Y +B Y +B Z +B Y +A X +C Z +B X +A Y +C Z +B Y +C X +A Y +C Y +C X +B Y +B X +B X +C Z +C Y +A Z +C Y +A Y +B Z +A Y +B X +C X +A Z +C X +B Y +C X +B Y +A Y +A X +B X +B Y +B X +B X +B X +A Y +B Y +B X +B Y +A X +B Y +C X +B Y +B X +B Y +A Y +B X +B Y +B X +B Y +B X +B Y +B Y +A Z +A X +B Y +C Z +B Y +B Y +B Y +B Y +C Y +B Y +A Y +A Y +C Z +C Y +B Y +A Y +B Y +B X +A Y +C Y +B Y +B Y +A Y +B Y +A X +C X +B Y +B Y +C X +B Y +B X +A X +B Y +B Y +B Y +B X +B X +A Z +B Y +A X +B X +A Z +B X +C Z +B Y +B Y +B Y +B X +B Y +B Y +C Y +B Y +B X +A Y +C Z +B Y +B X +A Y +C Y +B X +B Y +B Y +C Z +A Y +B X +B Y +B X +B X +C X +B Z +C Y +B Y +B Y +B X +B Y +C Y +C Y +C Y +B Y +A Y +C Z +B Y +C X +C Y +B Y +B Y +A Z +B X +A Y +A Y +A Z +B X +A Y +C Z +B Y +B Y +A X +B X +B Y +C Z +B Y +B Y +B X +B Y +B X +B X +A X +C Y +C Y +C Y +B Y +B Y +C Z +B Y +B X +C X +B Y +C Z +B X +B Y +B Y +B Y +B X +B Y +B X +B X +B Y +B Y +B Y +B Y +B X +B Y +B Y +C Z +B X +B Y +C Y +B X +B Z +B Y +C Z +C Y +B Y +A Z +A Y +B X +B Y +C Y +A X +A Y +B X +B Y +C Z +B Y +C X +A Y +C Y +B Y +B X +B Y +B Y +B Y +B X +B Y +C X +A Z +B X +C Y +A Y +B X +B Y +B X +B Y +C X +A Y +A Y +C Z +B Y +C Y +B Y +B Y +B Y +B Y +B Y +C Y +A Y +B Y +B X +C Y +B Y +B Y +A Z +B Y +B Y +B X +B Y +B Y +B X +A Y +A Z +B X +B X +C Y +B Y +B X +C Y +B Y +A X +B X +B Y +A Z +B Y +B Y +B Y +B Y +B X +A X +B X +C Y +B Y +B Y +B X +C Y +B Y +B X +B Y +B X +A X +B Y +A Y +B X +C X +B Y +C Z +B Y +B Y +C Y +B Y +C X +B Y +B X +A Z +B Y +B X +B Y +A Y +B Y +B X +B X +B X +B Y +B Y +B Y +A Y +C X +B X +B X +C Z +B Y +A Y +A Z +A Y +B Y +B Y +B X +C X +C Y +C Z +B Y +B Y +B Y +B Y +B Y +B X +C Y +B Y +B Y +B X +B X +B Y +B Y +A Y +A Y +A Y +B X +B X +C Y +B Y +A Z +B X +C Y +B Y +B X +B Y +B Y +A Y +A Y +B Y +B Y +B X +B X +A Y +A X +A Z +C X +A Z +B X +B Y +C Y +A X +B X +C Z +B Y +C Y +A Y +C X +B Y +C X +A Y +B Y +B X +B Y +A X +B X +B X +B Y +B Y +B Y +B X +B Y +B X +B Y +A X +B Y +B X +B Y +B Y +B Y +B X +B X +A Y +B Y +A Z +B Y +B X +C Z +B X +B Y +B Y +B Y +B X +C Y +B Y +B Y +A Y +B X +B X +B Y +B Y +A Y +B Y +B X +B Y +B X +B Y +C X +C Y +B X +B X +B X +C Z +B Y +B Y +B X +B X +B Y +A Y +B Y +C X +A Y +B Y +B Y +C X +B X +A Y +C X +B Y +B X +C Z +B X +B Y +A Y +B Y +B X +C Y +A Y +B Y +A X +B Y +C Y +C X +B Y +B X +A Z +B Y +B Y +B X +B Y +B Y +B X +B Y +C Y +B X +B Y +B X +B X +C Y +B X +B X +A Y +B X +B Y +B Y +B Y +B Y +B Y +B Y +B Y +C X +B X +B X +A Y +B Y +A Y +B X +B Y +A Y +B Y +A Z +B X +A Y +C Z +A Y +A Z +B X +B Y +A Y +B X +B X +B Y +B Y +A Z +A Y +B X +C Y +B Y +B Z +C X +C X +B X +A Y +B X +B Y +B Y +A X +B Y +A X +B Y +A Y +B X +B X +A Z +A Y +A Y +C Z +B Y +B Y +C Z +B Y +B X +C Y +B Y +B X +A Y +B Y +B X +C X +C X +B Y +A Y +B Y +B Y +B Y +B X +A Y +B Y +B Y +A Y +B Y +B X +B X +C Y +C X +B Y +C X +B Y +C Y +B X +B Y +B X +B Y +B Y +B X +B Y +B Y +C Y +B X +B Y +B X +B Y +A Y +B X +A Y +B X +B Y +B X +C X +C Y +B Y +B X +B Y +B Y +B X +B Y +B Y +A Y +B Y +B X +B Y +B X +C Y +A Y +B Y +B X +B Z +B Y +B X +C Y +B Y +C Y +C Y +B X +C Z +B X +C Y +B Y +A Y +B Y +A X +B Y +B Y +B Y +B Y +A Z +B Y +B Y +A Y +C Y +B Y +B X +B Y +B X +B Y +B Z +B X +B X +B Y +B Y +B Y +B X +B Y +B X +B Y +B Y +A Y +C Z +B Y +B Y +B X +B X +B X +B Y +A Y +A Y +B X +B Y +B X +A X +B Y +B Y +C Y +A Y +C Z +A Z +A Y +B Y +B Y +B Y +B Y +B Y +C X +B Y +A Y +C X +C Y +B X +A Z +C Z +A Z +C Y +B X +B Y +B Y +B X +B Y +A Z +C Z +C X +B X +B Z +A Y +C Y +C Y +C Y +A Y +C X +B X +C Y +C Y +B Y +B Y +A Y +B Y +A Y +A Y +B X +B X +C Y +B Y +C Y +B Y +B Z +B Y +A Y +B X +B Y +A X +B X +B Y +B Y +C Y +B Y +C Z +B Z +A Y +A Y +A Y +B Y +B X +B Y +A Y +C X +B X +B Y +B X +C X +B Y +B X +B Y +B Y +B X +A Y +A Y +B Y +B Y +B Y +A Z +B Y +B Y +B Y +B Y +B Y +B X +B Y +B Y +B Y +B Y +B Y +B X +B X +B X +A X +C Y +C X +C Z +C Y +B X +B Y +A Z +B Y +C Y +B Y +B X +B Y +A Y +B X +B X +B X +C Y +B Y +B Y +B Y +B X +B Y +B Y +B Y +B Y +B Y +B Y +C X +B Y +A X +B X +C Z +B X +B Y +B X +B Y +C Y +B Y +B Y +B X +A Z +B Y +A X +B Y +C Z +C Y +B Y +B Y +B Y +C X +B Y +B Y +B X +A Y +C Z +B Y +B X +B Y +B Y +B Y +B X +B Y +B Y +B Y +C X +B X +B X +C Z +B Y +B Y +B X +A Z +B Y +B Y +C Y +C Y +A Y +C Y +A Y +B Y +B X +B Y +B X +C Y +B Y +B Y +B Y +B Y +B Y +C X +B X +B X +B Y +C X +C Z +B X +A Y +C Z +B X +B X +C Y +C Y +A Y +B Y +B X +B Y +B Y +A Z +A Z +B Y +B Y +B Y +B Y +B Y +B Y +B Y +B X +B Y +C Y +B Y +B X +A X +B Y +A Y +A Y +B Y +B Y +B X +B Y +B Y +C Y +A Y +B X +B X +B X +B Y +B Y +B Y +B Y +B X +B X +A Y +B X +B X +B X +B X +B Y +B X +A X +C Y +B Y +B Y +A Y +B Y +B X +C X +C Y +A Y +B Y +A Z +C Y +B Y +B Y +B Y +B X +B X +B Y +C X +B X +B Y +C X +B X +A Y +B Y +B X +B Y +B Y +B X +B Y +B Y +C Y +B X +B X +B X +A Y +B Y +B X +C Y +C Y +B X +A Y +B Y +C Y +B X +B Y +B X +B X +B Y +C Y +A Y +C Y +B X +C X +B Y +B X +A Y +C Y +B Y +B Y +B Y +C Z +C Y +A Z +A Y +B Y +B Y +B Y +B Y +A Y +B X +B Y +B Y +C Y +C X +B Y +B Y +B Y +B Y +B X +B X +B X +C Z +B Y +B Y +C Y +B X +B Y +B Y +A Z +B Y +C Z +B X +A Y +B X +B Y +A Y +A Z +A Z +B Z +B Y +B Y +A Y +C Z +B Y +C Z +B X +B Y +B Y +B Y +B Y +C Y +B X +B X +B X +B X +B X +B Y +A Z +A Y +B Y +B Y +B Y +C X +B Y +A Y +B Y +B Y +B X +B Y +C Y +A Z +A Y +C Y +C Z +B X +A Z +B X +B X +B Z +B Y +C Y +A Y +B Y +B Y +B X +C Z +B Y +B Y +A Z +A X +B Y +B X +B Y +B X +B X +B X +B X +A Y +B Y +A X +B X +B X +B Y +B X +B Y +B Y +A Y +B Y +C Y +A Z +A Y +B X +B Y +A Y +C X +B Y +C Y +B X +B Y +A Y +B Y +A Z +B Y +B Y +A Y +B X +C Y +B Y +B Y +C Z +B X +B Z +B Y +A Y +B Y +C X +B Y +B Y +B Y +B Y +B Y +C Z +C Z +B Y +C Y +C Z +A X +B Y +A Y +B X +B X +B Z +B X +A Y +B Y +B Y +B Y +A Z +C Y +B Y +B Y +C Y +C Z +C X +B Y +A X +B Y +A Y +C X +B Y +B Y +B Y +B Z +B X +B X +C Y +B X +B X +C Z +B Y +B X +B X +B Y +B Y +B X +C X +B Y +B Y +B X +A Y +B Y +C Y +B Y +A X +B Y +A Y +A Y +B Y +B X +B X +C X +B Y +B X +A Y +C X +A Y +B X +B Y +B Y +C Z +B X +B Y +B X +B Y +B Y +A Z +B Z +B Y +B Y +C Y +C X +C Y +C Y +B Y +B Y +B Y +C Y +A Z +A Z +B Y +B X +A Y +B X +B Y +A Y +B X +B Y +B X +C X +B Y +B Y +B X +B X +A Z +A Y +B Y +A Y +B Y +B X +B X +A Y +B X +B Y +B Y +B X +C X +C X +B Y +B Y +A Y +B X +B Y +B Y +B Y +B Y +C Y +B Y +C Z +B Y +B Y +C X +B X +B Y +B Y +B X +B X +B Y +B Y +B Y +B X +A Z +B Y +B X +C Z +B X +B Y +A Z +C Z +A Z +B X +B Y +B Y +B Y +B X +B Y +C Y +C X +C Y +A X +B Y +B Z +B Y +B Y +B Y +A Y +B X +B Y +C Y +B Y +B X +B X +B Y +B Y +B Y +C Z +B Y +B X +B Z +B X +B Y +B Y +B X +B X +A Y +B X +B X +B X +A Y +B X +B X +B Y +B X +A X +B Y +B Y +C Y +B X +B Y +B X +B X +C Y +B Y +B Y +B X +A X +C Y +C X +A Y +B X +B Y +B Y +B Y +B Y +B X +B Y +B Y +B Y +B Y +C Y +C Z +B Y +C X +B X +B Y +A Z +C X +B X +B Y +B Y +B X +B Y +B Y +B Y +B Y +B Y +B Y +B Y +C Y +B Y +C Y +B X +A Z +B Y +B X +A Y +B Y +B X +A Y +B X +B X +B X +B Y +B Y +B X +B Y +A Z +B Y +B Y +B Y +B Y +B Y +B Y +B Y +B Y +B X +B Y +B Y +A Y +B Y +B X +B X +C Y +C X +B Y +A Y +C Z +B X +B X +B Y +C Y +A Y +B Y +B Y +B X +B Y +B X +C Y +C Y +B Y +B X +B X +B Y +C Y +B Y +C Y +B Y +B Y +C Y +A Y +B Y +A Z +C X +B Y +B Y +B X +B X +C Z +B Y +B Y +B Y +B X +B X +A X +B X +B Z +B Y +B X +B X +B Y +B X +B X +B Y +B Y +B Y +B Y +A Y +B Y +B X +B Z +B Y +A X +A X +A Y +B Y +B Y +C Y +A Y +C Y +B Y +B X +B Y +B Y +B X +B Y +A Y +B Y +B Y +B X +B Y +A Y +B X +B Y diff --git a/02/script.rb b/02/script.rb new file mode 100755 index 0000000..5c2f678 --- /dev/null +++ b/02/script.rb @@ -0,0 +1,69 @@ +#!/usr/bin/env ruby + +require_relative '../common' + +class Day02 < Day + WIN = 6 + DRAW = 3 + LOSE = 0 + + class MovePart1 + def self.game + { + "X" => new("A", "C", 1), + "Y" => new("B", "A", 2), + "Z" => new("C", "B", 3) + } + end + + def self.score(input) + game[input[2]].score(input[0]) + end + + def initialize(opponent_letter, beat_letter, score) + @opponent_letter = opponent_letter + @beat_letter = beat_letter + @score = score + end + + def score(played_letter) + match_result = if @opponent_letter == played_letter + Day02::DRAW + elsif played_letter == @beat_letter + Day02::WIN + else + Day02::LOSE + end + + match_result + @score + end + end + + class MovePart2 + SCORES = { + "A" => 1, + "B" => 2, + "C" => 3 + } + + def self.score(input) + if input[2] == "X" + Day02::LOSE + SCORES[SCORES.keys[SCORES.keys.index(input[0]) - 1]] + elsif input[2] == "Y" + Day02::DRAW + SCORES[input[0]] + else + Day02::WIN + SCORES[SCORES.keys[(SCORES.keys.index(input[0]) + 1) % SCORES.keys.size]] + end + end + end + + def part1 + stdin.map { |i| MovePart1.score i }.sum + end + + def part2 + stdin.map { |i| MovePart2.score i }.sum + end +end + +Day02.run diff --git a/03/input b/03/input new file mode 100644 index 0000000..6cef3e4 --- /dev/null +++ b/03/input @@ -0,0 +1,300 @@ +LLBPGtltrGPBMMsLcLMMVMpVRhhfCDTwRwRdTfwDllRRRDhC +gNFJHJFgtZFJjZJHNNFWZWZwwDjCwSDhfCDbdwjfwDTTDT +gmQNZnZNHWnqmQpLtVLMBsPpBqrL +HlHldQtHlctzppdQtjdczHhJRnnhGNVmVRJmVjCVFCNh +LgWNgggZJZGFhCZr +DbqPswwMvDPqzlBNHtzfHdwd +tJgtJwwCtNvPHHPtHzDsdRTsBRDDWgWTgT +QhLQjLGjZQFlFZmnmGLDrzWfRldrTrzTBRWTzs +bFFmFZjhSFHvBCvCvJpb +MSGcvnvMGMJgWJDpdndZwBnppfCp +VPVfQQVbshZNZwdNDwNs +LtLbjmQRLmVhQtTbfgWjJgFFcrqqrGSqWg +fHfCNCwwHfGhcntntrrgHrQnrn +FVqpSpbPpjSVMjqvVmVvMzlzwJnbtnnlzQQlrWzJgt +PTqqRRPSRSmqSpPpSpRZwGCLGscCNLZZZTNdNZ +pQQQslVSVzzCQnZSlplzbLcHZHcrrrbZqFbZjbFm +gWtvPgdMDDtFDHHjJJbbccbrLW +MhNvwwDfDfdtvRQnpFNNTlSRSn +ZTnSnTTzqvFmVzvWWm +ClpCgltHNrtgsHdpLCHtDCNLVvQvVwVmwcsWQGMMQvcGcFcv +JmrgCHCNJtlmHmNhnJjnnnjJhPfhSJ +BgRRZTgHHvRTRmRNLNNhQWlmGFfJlWlhsQshpF +qPqSSttwnnzqqqwtVrPwMthFsJllJJlGhpJhWJQlhVQd +MjMwScnDPzcwjtqDtztnctrvgNZTTvCvLgvQbLbvjTBvBg +SWQSbbqTTbPcfMZSwZZwwn +dghjghmNDmGsGgdnfmtMRCLCCRncfc +pJDJNdsNMMhpssgdprBTBzWlpBWlllWb +TwNLNZTwWCWLwWCSTZSLzWHGrDHHPmGdDHvndGdNfvMm +BgpjtpgjBjVbRjQRhVsDnvgGgPnGdrmvnMDfrf +rhRjRssQJplRtVbpthblbbLSLzFCJZFqLLFWCzqcqzLL +PBrdPMtBPvCQBVBjCfWPqSHbszhGGnsfSG +JpmDwJgWJgNzmShhmfSGzh +pRwNcNpFZNZRWgcNplpjVCMVjdvdMQtCMLZjMZ +lDrcnnlLqLRcDDZRLjFVTHzGCLGVPzGPVWGB +pNwHpdmsNJsbpwsbzJTCPWTVFzzQTWCQ +vbhswdtdwfdsmtNSssHwvllvMcZjnjcnZqlgMDZglM +GVVtJGtzVFsVsDTH +mQRgcBRmRLnBjrtFjCCrHmFF +gqpBnlRpgZcvdSdlMdSvMt +tMSCNGSflffNhnnGqlPPsrzWPrTrVpWr +bZHbmDBQmbDZQdbDcRFZZBTTWWWwqVzszWjrFPVwrzqq +HQBLHmQVQLDdCggMfgMNLvNG +HHNDzNJPJPmdPcNGGGhnhwnVhCQBwBjQ +bsSbLfrLtRSLRSRRRsBwhCpfpCzlwCBVjlCV +zvvsvqLtZqLtzRsqTrggRMHJNWJgHHHNJcgWNPdHcH +qgbNvqbgmmZgZLvZqgnZzlpzpzHtVPzttGPrrnnl +jwswGjQDMsQMjdBwdcjCHVtcPVpCVCrPlVSrpc +GsFWBfhGBfDFDFWqNbLNqbgvqbbvfN +HgwWqtcqHNWgnHcNNCfvJCCJJfJGvnPfrR +sbDhZSmdBbsSdmSDdrjjffRvdjPrprCd +vvZbSFFlFHtqFqqWNc +ZRjnbRsHlncZGjTRTfFVSQBQppQvvFBHpF +zrLwMdhDhqJJttDQSldQVPQSlSfPlV +hCWWCzqWnmcZlRRW +HfgfQflHjWgRQRdRBWVsnbvvscbbbwvmbHncSc +tJGLtPPGZPwVvSSPhw +CLGTLZqJtMGqLDFFDZZJFZJpWjRpVNRWpllDpjlBfgVjlp +rhhGZZhLNhPmfJqvfLlq +dHRTHRHQQWcTCRTHmmjJgfqqlGmgWgql +CCwRzTRRdCCRSQwzRcppprZtrMhGBMZMnDSt +WfffvnSnfSBshwsjhlvGlh +ZHpFNTmppVmNzVVmmFMZzbwwjHGrGlPhCGrljbgHsg +pLZMmqVsZVMMVVscDfdtSSStqcRRdn +RhRbLzRLHLCPmzznHLbzCRTJhdTVSJJVSjdFFNFFNTJv +MGgMfpMsBgpnMtGfnfwBtDBjFVdNSSSFdvJSQSpTJdJjNv +lMsBgDMsblmRblnz +ClNcJZttLfLvvRQzQWwRQN +hrpMdqMspsrGDdMphhdMMMMHBmRWmSVrRVzVTzQBQvSmzVWV +ppHDMGhMMDbGMdDMGbgFbgbMlJJnjjZtZfLPcfcngZfPPfCR +ZRslLRgCclZLZzQghQhfrbfGbJ +pVSHpBBBBDVDqDBldVzfrMzQbfSTSJrzzJrJ +DqqHnBDlpNDVVnpnjtDtNjCvFLcsFFPZRcPsNNmPcFcP +LmLWSmSRNdcpcRHFHrWzWHbMbwZlZlPSbTjlwPbTPJTf +DttBsvhnhqvGGBhGtBVNBVqJlPwslMMPJwTjZbbZPTfbPs +CDthQvVNVFCHHWCFdr +RRtCWSzQZdRMrtRWrSztMggcGDfQTcfFTGqTLgGDLc +bnVhnvPHhhdJJBTLDGcDTcBvvD +pmbnhmPPmHwdCjmdrRtCdj +lTPzwhzmHpTvrDCDHJnsNN +tdgtbMMBbWdFbtqJCnsrqnMMDsrq +FjWdtgLSWttWtLSWtDWBjGGmwGlzTRwPTQGhlQQm +wcbnTtTppNLrntznTBBccCGrVldRrZqdqRCZdFZCVZ +JfHDgjgPPfRRgRlLRddR +jhDhhLMfmJjMjDbNSTzbbbtmttmN +CfGlvzpvpTjzzCWjvDlfvbbJbCRSdSRhsSQCMhdbhR +wqrSmrLHHNcLqrrLBNsndssnnhPshnsQwbnJ +NtcmBLcNVDWzjSvWtv +vZPCSCvCJffvVvmCmPqCSlDSscczHDRcwcHzRlRHHs +LFGFNnGrdQttNMFpzpMRRDslsJwsJH +gjtLnFBJrLvhZvCbZhqB +DBcjVFjDhQMSJVZbHZbl +nfmsqppnLfTnfmMmzppwgllSrbSHHtllqbtSwZ +TRzTnfRWnfdzWssfnRfRpncQPBhdDjjDCPcMQcCBGPPj +NSjWCHjNHjpPWPpSFWdtqBMBBFVBvqvJGJwqBt +gQllgDrnhQQDGRshRsZfVtVMRqwMtccVJcBtvRqw +DQrzrDzhQgrsZLrZjWSSHNTWCjjNGTLH +CgdcCFcbTbBzPgmNRmpptP +rsZtsvVvHZZzPmqVNPzNmV +HZjrwrjnjtHSHwDGdFhCdhWWJnWchCFJ +RMTqQMRJqPtBtGBPtWjN +ssHfSfShCwwbhsbHhhsmSfhSGNpCpNCjBBBLptcGtpzBBBWW +HnwrSFwffHsFwrSSjfHglJJlTgZdFdgZRZTDDM +pDLDWlDSlJDmzSJnDScRPLGGvqFqLPccGLgv +CZHfwNMVNjsHNNqPgcbcBbRQGQ +dCffZCjVCdCHHTmnlSgTlTSrlStp +bFtlLCvLlVjpCGPJndrrMMCDDCnrMg +hRsTwcZcBjZRJrfMDnsHrJnH +mNZqcTSSBTScNzVQFtGtjpFtjmGG +bjHdLrHjRWpDCtLzhzps +lZcGfTvQcQfvlqqcNCcBvVwtGzmzthmwmpthMDmswgMt +NcqflNQTBTTvvQSvqSVvQJbHPHbHCRJdndJPSHjWHb +CVmRncrRVrhcmsBgfmtfdJsJmt +bZHvZZDJwpWtdZgtGNGd +vSbwHDMFMJqPQqQvvSPQqpSwjRcTVTLjLRhVCLFLjLFnFzCC +mtffsmBwfwBDBmmsLsHqtpftGrMVMPSMPsVvhNvFrGPMvjNV +TQTQCRWjJcdcQQSPrhhPSvVGPF +cTRJCnldWJZlTgbWgbdbpqfqmppjmtljpqzmjpLw +NNPmrmPWmrSSNNPmnglghmCvLCCflh +LFbsDQMQFtQFHbQHqhvnngCftpcllptJgJ +bDjsGqLLdRVjPZPP +tgrbBQlbtRblwtRGrbCNswDDCsvFszpssCss +SJVMhSZfHvpdhphN +SMLpWZSSZMjfgGBgRtbQgljQ +HsHHNDDHzHDDjsVBBZqtWBrSNcPwQvccvvdhPclSrQSc +fGCFCgpgTfnTmgTFLFgccclhwQhwrzSwSwrCrr +pmLJGfMRpFmfFMzmgGmRpgmVqWJDqZqqHtjBBVDBBqqssJ +mBTfcfCCmpBCCSzNQScQSTfddhdtwgttjghNwGtGdgwGtd +HvvqbvMLnFZVVPjJGRGzGRjZtwgw +VFHFbsFHHSmzQBmsmT +ZNmZCmNHHzzmPPzlbplvhbQh +GDSwldfdvggPfLvQ +ddqrtlnJDJlnjScRmMRCFHTHtFZF +FPvglHSPcpNcFNSHFHNvZjdmbwdbzZtzsHDzbsbj +MMnBLCCWBJCnrCVWCBstTZdZmdTtbDLswTtZ +BMDnRCrnGhPPSgcgpG +nsbgpbdrjMdGqnNRRWWRww +tZZhPzCJhsJBtJPllJBCtCvwwcwwWLvWvwWRThcGcqLq +mlBmZQPZmlppbgMmfssg +RFdZTHFCdvjhgGnFqj +zQLtNQpzNNtNpDtDPWLNMmGfBcjgjlgjhBnvcfnBvfjp +PtmLsPzQVWzWDswCSwHbRZsGZw +nPsfnPsFhTGjqGnmQppG +RZhBbNwbBRZHZSCCHQqSpCpqqm +VMbgNWRWMDfhtFJT +RWhRPDhBHZWgZghRZwZgGJPGdncFdLcdLCjscFcjCjNLLj +mQfSrlfTVqmSVTTTrprfFLqcdLHsLHFnvsFFqnNd +TtQmVHmMrbMWRggRPJZP +TTlCTVTdcpBlcchF +ZLhwSMZhqhtqwqLjFcBvFmvvssGBmmjj +LwSMRtqMHnqhhRZRRtJSVTgggVPdTdrVbQDJgTPW +CGFFWFFVgjfzgVfcJCcgTCcBBWqSqMMBMBShhwMLMwSSMq +fmQnflldltBZqlwqNZpB +dvtnvmtRtsPbzCfTHjHcPzGf +hzshzfshVhthgMmRsFRvFqmm +PDDcZWlWBbplvmRRGtlvqQ +ncjnDjbScnBWZjDVfwjfrrVtwLjzhr +QRWvffVVGfDhNNjzGZLLcGGZ +rgtpSSHpPrHSspvNLFlzTgNLlFglcc +SSpbMHpvmwMQhMBR +dHLtBqPCtPBHNsbRNdNNsZVN +nQwntMwJWhwWjvcjDMlntRsNpgSbNNpglFpVggbSVF +QDhJWwhzJtTqLzCmtT +PSLqTqrCrRvCSJWLdLwdVWdQWL +zNjHQnnHjHznnbDMnMMMdVZcpZZJpZWcdJFZ +BntfgNbzfBtHzgnbbbPPSstlQSSGGrlGsrTT +QpBNsBzztgqVtdmp +jvrhGljRhSTlGGvjwjSwGjRvHVdqLttrMgMbtMMMVmdqqHfV +ChTvTvljmCsQQQnNsQ +CQCNSQHHgCtNHCNHHNDJcBJwLPtJBGhMPPPJwM +zRTqmsdRRzrmdzVRpzPwcjdwwhLjMBMGBBLw +hprmzRmblTzTVTVrlbrmVHNWNnCZFWNNFZlnDFSWgQ +hGGqwwdwMqsRDGRBzlvDzB +LTNTfcCFFFCcNHFFBzRSZRBlzHPSZdvD +nLVTFNfVVLLWnwnwdrdbhnrhrr +hlTpcDTpHmHwDmMbbdMMMGTPdGPR +ZzFqNSQqHvBvzzqjFHtvSGRRMPQsJGJWRGWPMRdRsM +BZjLNqNqzVVHgLVgll +ZHHBzSZPVqghJgSnBhqJRQLRRMvQpwZvfNQRMMMp +ctFCDmdDWmDGNRFMpRlwwQPP +PrsmDmCGjtcmdjGtVqBSjJhnSbHnnghH +QmZHTjmmHRmmdPRvHdVlPdrNNLqWzffbRtqpzfWtWsWNNW +gwMcgnMGFGCjJLqfbtNtzzssCW +DwMFGBwcBFjhBBhcDSJQQVQTPldTvPlVVZQSdQ +NRTGfNffLghStLRR +QlnWsdJWmnbWnVqWbWqHPSpmjgCjtSwhPjgtptLS +JWchnllHqQJzGTZfTcFNDN +VtdtcTVVCRctVdJclCVtpphpPhNGDwNPmThwWmgG +ZjZMFnfBqqMjHZHMzBnzgPGwDmhmhDPfQNGPQGfD +BbgsnFgMgMlVdJtlcVSs +tlBMdBnClhLJnTbgph +PhDDczqDGPqsHGrRGPWHGPzcFJNLTTJZLNbNLfFZgTbffL +sHsmzzrGmPrRDRHqhHwmjBVtllwtdMdBSBtl +QscfZsGsVjVtqGmlzvRMvl +ThJNCHPTDDhHHJTJPHmlSMTtTTlBvlnMSzqn +HhCdrHrCcpmmdVmb +WPPBPvRWzvhWhWzGWtBqBSTLDZhgFSTCDgSgZZDCZs +flbJmMJnjdMqNdfZZrFZZNFZgrrsTZ +nQnqJlJdlQMMbVnVmdMplVnnBwcBPGttzQcvtHcWwWtHRHvB +LLsmpJTWCJmJppCmgHCCLjbFtRFghzjfjcjcZttbRg +SZlMPBdBtQfFSbSF +nPqldlDwlBVnvdLWJVsmVNZCCVmJ +HWvNVtHWJjHJsSgHsHzsDsmf +RwZGPFGMQgzpTGSD +PZMlwwqhFPPZqwFhPwnFbMjWJNNBtWNVJlCJJWJjWWzj +frBSzJDtztfNVGwRzVgGhqsV +MPMmjPWGMMmPCQCcbmRwVhTgVwTTqjvRTLww +cFpcMGFplDHfBHFS +gtjhjLffmgjgmbgVfbNdqFJMJMNbbwrwqq +sWHHPSJsHzTZzTGsCdrqCNNddGdGFGRC +ZpzHHTZWzsSSnBBPsTBnLVcpQfcJcQVQDQfcDfQt +qMPqChqjQPRCMqlBrmGmLbPSsTbSvz +nWNHZFVZZttWpfHsGSbBGTbWBSGmSm +nZfpVfdZdtFHnwVHZtNwZhCJRJhcCdDcQhCqDSSCQc +LlwSlZrftFSMpfLCdltTmmmSDmJqmssDVJBmJB +cRcGGhpvDTmTDgsG +nNPcjpWbNzjRRcWhbzWjvnLMddMLCwtdtMttddtrCdMz +NszSsDCMSDzdZpCMCSMpNszfTvJhlvmlmrTfrhlhHPrmhD +FRWBgRjWwqFWQFBBWjVncjRTvJfvvJvVrHhmVrHhmrdJTh +wnwnqwRGFqdbNNtCGpCp +zgsBvPVVDDrDtDgt +nTHldmJQNTTfflcJNrQlHWpmDDFDFhWpWCLtFbphCm +nTTNMlNfHQZTQPGSzVVZSVPSwr +bPLbtPpwsJhlpnhnnLNNZDWhRNzWQrWWffNr +SczqFdFHSTFjmMSMFVqFGCWWNRrWQQQRZCVWgQQgrZ +dFdzFGHvjmqGMFwwLLsPnvBspnsn +lwJwwmblVdvjbbbJvVnlmjGTTNTLqffpqDJffqGLqDLD +ZtWgPtRMtQRQnTGDQNTTqL +gCztMgWgchHhvwlllbnl +cCwSSCVbqwCCWSbZMmGdtBllWBfdlvdt +jzRsJjhPjnLthJNNpmpvmvvMfGvjQpGv +nPHPFgRHLtCHZrqTcq +dVJwCJGCVrQQGTNtLtGm +hWWgDHBzWWWpZlhWBssLDTDsQTLLtswswL +gPhBHpjwHcljpggwwWqvbFvdCVRqPPnnqVRb +zRRRRNqzpQZNNRRmRcZscQcCDmCTTTDGfTbfGhrTCTrbFF +HMvMtjgtLHVlLVfhCGfrfhJhhrvh +LBgStjnHBjLVgggBgHndnSNNQdNWcQQNGZccwsccdQpw +jLRqmZNGtZtvZvHzPfCvSSzhCP +QbwDVHFrVbDVrDFbzPwSThSfddhWPWzS +rpnFDccHFHtZNmMmRntj +RFVdzzlNtrwSTltb +hHGcqqBcGLQZffHhMwSswSWGrnnbMStC +cgqLBgQgpgbbPbPz +lfcgglhfTvmlBvclbgztnSRtSmttwRJwptWR +FMjDjsdNDjNMQLFFLCMQdtwGGzRwzpGwzdWzzJpGhn +ZQVNsVZMPsVhCQsFCFsHHlqlcBZrHHfBflbHBB +vGGQQdwNCTJfQJHJbM +FFqmzghlzhgqjlFqzZhmhPlRgBDLLRTTcHMbRcJHBLcgRH +qFrPjnhZmqnhZZjhhmpPzZmtvbpwtdvsSCCsGwdNwvwNCp +nrFdSHScdRwvdvRm +NNpPLJJbNbppCvmzbHTbmsTw +fWLHPlPtpMNBgGQgqggQSMGc +BcHtrBcnjflfHslsrnltbTgvMwpWnnWpwwwCwCCRRW +dzGhLSSGDdPNgLLdPWTqWWRMqwRWpvzMMv +VPZZNhhNSSDhLNSLdFZBVgBbjHcgsgfrbBJbfs +VMnWjjWTnNNCzzhblbbjlj +FmHwfFHqpDrJzPQLPLbCDs +GrdFfHqqSmmwHSqHfpdMNTtTtZCMMZtTRggGZR +QRlnlTphqNfqdjZNmd +rDtPmGctFrcgDjJcNjvNJNCcNw +bgGDtgDbBWBSBVlblmVmsRMmLM +CcQTQTrrmfQQhZZBpZpSSZ +JFqSvLlLbWggDvDDFHjsdnshBZpjHBBhBW +FgJqNvLRMlMMDDblrtfrTCStmCVtNttz +MRRbbddqtHbMZbqMHHTFTFgwZglWPfgsZWgW +LCcLjzCNGNcvpvLTFPmzlFsfTgFlgs +NhNGcrCGrsrvcDpvVcSbtHQJQbnQbSdHMtJV +bfMfBFcWFsWZHBWRPQpRqdwmMpmddm +rSShvvVTNVhvVCCvThDlSvCwpGCmRmGQmPwmpLRLRdpq +DhRzzVNVVgSzTFcgtnbHnHbfBB +HsTGHHvlvvGTGlHBvlbZstrVrwNjrjVStwVVZR +PPmgcFJPFcFWmWMgdNtVtQZtDVDVdZZjjR +LLqWnMnmNvlBLCTzCT +qTttLqLvGCQqCDlhml +FJjzrRBrpjRWrCwrBrrwpRbbDzgghSmmNhPQhgNshmDSzSNm +bJBrbFRjBVnWBrRBnHLfHGfdVtvHttcCdT +mTzjGPmPPmPNjNBTvlJRlNJzZqrzrSZZSpcZqpgcgcggFr +QWCwwMwWWhVZFbpQDSpSJS +stMMsWwMwVWtwJTNNPvvRmTsNPsl +gGFFNWMMNFTBlLpGpSll +qvccssdDwDbhMhzwHLppTSHLrdBpBVLV +PhJhzhMJzwDJwhZZtZQJCjgWtFjZ +pGqWfqqGcspGqWqppHprpTrzhCzttMBCtbtJmtJbSBvWBt +QDnVPgVPgDCJBMhmBJgv +NlZwFlnnPLLlFwDlDlnPPFFHTMTdMZjTTcjsqqcsdfGdcp +HLzZfHWWQwpgVHjVHr +JlMlMGGDMtJGdtJhqtlccDgVCSTFFSCSDTggpvFTjSgS +JcGRMlthtlVNMJRfzWsPnQsnnZNZns +zVfvMpsbtQmtBlFWBZ +lLSrlNTNRSFRFhhHRmPR +dnSJjjwJJGwwnzVlvpszvccM +SmlcCrpnrnznGzSBBSfzNbtsQsWZQcFbWctcbbZb +JHgwJPjvdghbbWdDZGNLZb +JjghvvhRwhwJVhHTzmfRfzGSMrzBfnGC +JbCmrbnzmntnVJjbCHJJFQFvqgJgQgqLDQ +NGhhhhPMGhWsSSchWlNsCLBBlLFQCgqvgCFFgQBg +PdcNWWcdGdPssPPNTSNNtzbTwjntzbbVwtZpCVnb +tGNgtsNQHsJmwwzddmQw +hMhhDBwMhDDfCRRBjFDDTTWjdWmrmdWqjlmmmjJz +RSpSSBhppDhRncRLswZLGvtGvNcNtL diff --git a/03/script.rb b/03/script.rb new file mode 100755 index 0000000..d16f37f --- /dev/null +++ b/03/script.rb @@ -0,0 +1,23 @@ +#!/usr/bin/env ruby + +require_relative '../common' + +class Day03 < Day + def self.priority(char) + (("a".."z").to_a + ("A".."Z").to_a).index(char) + 1 + end + + def part1 + stdin.map(&:chars).map do |rucksack| + self.class.priority((rucksack[0..(rucksack.size / 2) - 1] & rucksack[(rucksack.size / 2)..]).first) + end.sum + end + + def part2 + stdin.map(&:chars).each_slice(3).map do |group| + self.class.priority group.inject { |res, g| res & g }.first + end.sum + end +end + +Day03.run diff --git a/04/input b/04/input new file mode 100644 index 0000000..3c36420 --- /dev/null +++ b/04/input @@ -0,0 +1,1000 @@ +8-82,3-96 +13-95,99-99 +4-92,5-93 +16-80,16-80 +23-36,6-10 +82-98,24-83 +48-48,47-48 +58-81,58-80 +14-14,13-98 +46-66,45-46 +38-73,37-72 +46-99,47-47 +15-59,6-56 +13-54,12-53 +60-61,60-71 +4-97,2-97 +6-94,6-94 +47-48,38-48 +10-95,10-95 +84-87,86-86 +51-88,70-84 +3-52,51-53 +21-55,21-21 +55-84,31-56 +18-18,19-75 +63-76,64-77 +44-94,93-98 +9-62,2-4 +29-34,28-33 +14-97,15-98 +10-56,10-56 +3-92,4-93 +44-92,45-93 +7-73,6-72 +12-96,12-12 +17-83,82-83 +8-94,9-97 +1-96,2-96 +82-93,4-81 +45-62,3-62 +91-96,3-81 +69-87,68-95 +43-67,44-55 +2-99,87-97 +41-47,40-48 +84-99,21-84 +9-47,8-46 +7-86,31-37 +44-95,28-99 +1-96,6-94 +79-79,1-80 +44-62,44-62 +17-17,16-62 +19-80,19-19 +31-54,12-53 +62-91,90-99 +1-99,3-99 +28-63,29-63 +46-78,61-78 +16-24,23-91 +25-77,24-24 +58-99,57-98 +46-86,8-87 +44-44,45-77 +36-71,51-71 +26-79,25-79 +4-69,44-53 +33-78,95-99 +46-67,23-47 +16-51,15-50 +72-91,28-72 +96-98,10-97 +4-98,3-98 +3-98,8-96 +92-96,6-93 +62-99,97-99 +2-2,1-24 +23-25,24-90 +14-77,14-78 +95-95,3-96 +18-78,8-17 +34-92,33-91 +4-4,4-4 +28-59,32-60 +30-32,20-31 +75-80,6-76 +17-78,41-78 +9-94,9-94 +52-67,51-68 +63-97,78-96 +85-89,10-86 +1-52,51-51 +8-74,7-93 +58-73,26-74 +3-96,96-97 +14-30,15-29 +13-77,12-76 +99-99,7-93 +13-94,93-93 +3-54,1-54 +50-90,50-91 +58-58,57-72 +17-18,18-91 +2-30,6-30 +91-92,74-92 +32-82,31-83 +41-52,42-53 +93-96,60-93 +53-70,53-70 +69-97,69-70 +3-54,3-55 +41-55,6-56 +46-48,47-48 +10-42,9-9 +75-80,3-76 +43-56,44-44 +60-61,60-69 +31-93,32-92 +12-63,13-62 +94-95,46-95 +68-68,1-69 +22-89,18-95 +14-32,17-33 +10-75,9-76 +31-96,31-97 +85-85,5-86 +22-31,21-30 +23-77,3-94 +44-44,45-45 +86-93,14-93 +67-99,67-97 +38-95,37-94 +19-21,20-24 +71-71,11-72 +8-47,9-47 +45-78,46-46 +8-9,7-8 +95-97,4-96 +25-78,78-79 +68-68,68-85 +68-78,10-89 +6-80,5-6 +9-88,8-8 +13-92,63-93 +97-97,73-98 +8-45,8-8 +3-93,9-92 +93-93,28-94 +8-78,9-79 +8-95,1-95 +39-66,39-65 +3-32,2-33 +24-36,4-89 +36-96,36-96 +9-73,9-10 +72-87,72-75 +11-97,12-96 +50-79,78-79 +93-93,80-94 +35-95,23-94 +1-89,89-98 +15-97,15-97 +67-86,42-86 +18-49,17-48 +6-93,10-87 +35-56,66-77 +14-99,14-98 +48-62,18-63 +37-57,36-38 +4-6,5-72 +59-93,59-94 +25-69,25-70 +8-78,77-77 +73-73,74-91 +23-34,34-63 +35-96,91-96 +32-71,33-70 +60-81,61-78 +2-80,80-81 +16-85,35-57 +29-70,66-67 +68-84,55-84 +26-66,27-27 +29-74,28-80 +89-91,49-90 +34-35,34-54 +13-96,12-96 +20-45,19-56 +48-97,49-96 +68-70,12-69 +4-95,94-94 +20-84,19-83 +32-34,33-96 +23-53,24-52 +9-11,9-9 +29-30,30-63 +20-80,20-56 +76-95,1-76 +2-68,1-67 +3-60,59-59 +2-22,3-23 +78-92,82-91 +29-99,39-99 +38-46,26-33 +42-61,60-60 +23-23,24-24 +92-96,29-92 +8-90,89-89 +21-29,16-29 +6-75,6-74 +9-11,10-38 +46-80,18-90 +59-65,58-58 +9-91,8-90 +87-91,88-91 +11-95,91-96 +38-95,38-97 +12-97,8-64 +49-54,42-93 +90-90,88-91 +44-80,43-43 +29-88,30-87 +91-93,63-92 +3-83,2-3 +17-94,93-95 +8-91,3-7 +1-92,1-93 +98-99,37-95 +31-31,31-63 +1-96,1-97 +49-94,49-81 +19-84,18-85 +14-91,91-93 +30-41,41-50 +22-39,38-44 +17-93,5-98 +2-79,3-3 +63-93,39-93 +86-86,59-88 +37-47,37-38 +6-68,1-68 +97-98,84-95 +86-88,1-87 +17-87,17-81 +30-55,32-34 +4-4,5-89 +6-97,97-99 +15-97,14-98 +95-96,67-93 +14-39,13-40 +5-78,77-78 +12-48,13-38 +67-83,20-88 +5-90,4-91 +52-74,53-73 +11-96,29-96 +11-27,12-27 +16-47,15-48 +91-99,13-90 +35-89,36-36 +9-12,3-12 +19-19,20-78 +18-78,17-17 +10-42,11-11 +16-16,15-86 +16-34,20-34 +19-99,3-72 +32-88,33-89 +76-78,21-75 +25-65,25-66 +8-93,8-94 +8-9,8-55 +61-67,22-67 +10-63,36-62 +5-93,5-5 +13-88,68-77 +9-30,8-30 +87-89,24-88 +20-51,47-51 +57-59,12-58 +25-75,16-94 +92-95,46-92 +31-94,32-95 +1-76,3-76 +7-59,8-69 +26-58,27-57 +16-59,15-63 +47-49,21-48 +25-68,24-88 +89-89,48-90 +21-72,71-71 +66-79,65-78 +54-55,54-55 +45-88,8-89 +38-68,56-67 +2-82,37-65 +17-73,17-73 +74-80,11-81 +10-56,1-99 +32-72,11-31 +7-40,6-65 +5-49,48-57 +14-15,15-81 +61-83,91-96 +19-87,20-86 +6-67,6-68 +49-95,48-48 +26-28,27-32 +39-62,39-39 +1-78,4-78 +23-87,35-35 +1-1,2-79 +9-40,10-40 +11-96,3-12 +69-72,3-73 +70-85,16-70 +76-84,42-75 +52-53,10-53 +3-15,4-14 +13-83,12-13 +19-76,68-75 +25-43,25-43 +55-60,55-60 +25-52,5-24 +1-91,90-90 +61-79,60-60 +33-39,33-39 +5-14,4-4 +65-67,66-79 +8-9,8-98 +3-86,85-85 +10-42,9-43 +2-25,87-98 +4-77,3-3 +34-87,34-98 +72-77,71-71 +78-97,25-78 +8-9,8-15 +3-97,1-5 +65-90,40-66 +13-77,51-77 +95-97,5-93 +21-61,20-60 +37-96,35-98 +28-96,42-96 +13-81,12-80 +63-70,40-66 +73-93,92-97 +30-87,31-88 +79-94,80-80 +42-56,1-43 +16-41,15-42 +16-74,16-74 +52-59,51-60 +77-82,26-76 +3-13,9-12 +2-77,1-78 +4-86,5-86 +1-80,2-31 +31-95,31-83 +38-70,71-81 +36-77,1-78 +9-86,87-94 +9-56,11-56 +1-96,1-95 +81-88,81-83 +11-74,11-75 +4-97,6-89 +25-78,24-79 +12-36,13-37 +6-97,20-97 +2-91,90-92 +64-67,66-90 +36-44,36-37 +23-23,22-24 +36-66,37-61 +23-33,29-32 +32-97,32-97 +30-95,38-95 +12-99,34-89 +13-98,15-94 +11-90,10-91 +68-94,67-93 +13-93,12-94 +11-91,10-12 +62-72,56-62 +23-70,24-69 +93-93,7-94 +21-67,66-72 +14-44,13-43 +57-81,58-82 +20-73,72-86 +34-34,33-51 +14-21,20-22 +17-41,17-42 +37-64,36-68 +22-89,22-97 +3-86,3-4 +81-91,14-82 +47-90,89-91 +11-56,5-56 +34-80,35-65 +18-62,19-61 +84-96,23-95 +83-87,33-69 +83-91,76-91 +23-60,22-22 +5-7,4-8 +21-22,21-94 +11-56,12-12 +15-81,14-15 +5-5,6-69 +41-73,41-74 +4-22,3-23 +10-97,25-91 +31-37,30-30 +40-69,25-69 +49-72,49-50 +16-76,75-77 +64-95,63-96 +33-86,33-86 +26-26,25-57 +7-91,12-91 +19-97,18-96 +19-70,18-70 +3-98,1-65 +9-55,55-96 +34-83,51-84 +3-6,7-98 +23-24,23-25 +16-85,16-84 +35-97,36-98 +4-12,9-12 +2-98,1-97 +6-79,80-81 +4-5,4-25 +41-53,40-70 +6-94,7-7 +1-96,2-95 +8-83,7-8 +9-31,10-45 +21-57,20-58 +20-78,19-77 +10-10,11-98 +11-77,6-78 +94-95,93-96 +55-84,56-85 +31-78,42-78 +4-88,92-98 +5-74,74-93 +1-98,1-99 +6-84,18-28 +3-90,1-92 +20-92,19-19 +91-91,90-90 +7-99,7-99 +11-95,12-52 +8-8,7-90 +6-70,5-10 +26-92,91-93 +64-90,65-89 +90-92,31-91 +6-7,6-99 +21-75,10-92 +1-95,74-96 +59-64,61-61 +7-15,4-14 +4-97,4-98 +60-60,61-90 +2-99,6-99 +19-84,19-83 +3-36,4-35 +28-37,27-95 +8-9,8-89 +41-58,41-69 +7-72,4-80 +1-20,19-79 +16-67,16-66 +4-5,5-99 +7-20,8-19 +5-99,4-98 +19-37,18-37 +11-33,30-33 +51-70,69-69 +56-96,50-56 +21-79,20-80 +78-78,3-79 +73-97,72-72 +8-80,7-81 +17-18,17-88 +50-83,36-50 +18-20,8-19 +25-31,26-30 +10-92,9-91 +58-98,59-85 +5-95,96-96 +20-97,19-21 +8-97,7-8 +4-83,75-84 +1-68,1-69 +18-38,18-38 +89-93,21-90 +6-84,7-85 +20-90,90-93 +80-90,87-91 +12-96,6-11 +56-77,55-76 +26-28,5-62 +5-87,6-65 +37-39,5-38 +5-5,6-56 +5-94,5-93 +46-63,47-63 +7-88,6-87 +20-93,37-93 +12-97,5-99 +37-87,37-87 +26-99,17-25 +26-70,22-70 +68-70,48-69 +23-31,24-24 +17-32,30-30 +18-18,8-19 +41-58,37-59 +16-61,15-61 +4-98,4-4 +4-4,4-96 +27-61,26-61 +21-29,22-24 +11-14,10-15 +65-99,65-66 +12-95,11-11 +8-99,9-98 +43-58,55-56 +50-51,35-69 +39-39,40-76 +50-52,18-51 +3-88,3-89 +46-53,46-79 +45-88,44-87 +23-95,22-24 +2-90,3-89 +7-7,7-39 +1-85,3-49 +62-69,45-68 +63-94,63-94 +1-2,2-53 +24-73,25-74 +22-69,13-69 +1-97,82-98 +2-41,41-81 +10-96,11-97 +56-71,70-72 +2-75,2-75 +31-49,31-50 +21-81,19-81 +68-69,15-69 +39-39,39-39 +30-30,30-31 +55-83,55-82 +82-83,59-83 +49-74,49-49 +18-39,17-38 +14-80,22-80 +10-78,9-10 +32-90,11-97 +19-73,9-18 +65-73,66-73 +47-68,49-68 +41-71,40-70 +20-37,30-37 +2-25,24-95 +36-84,44-85 +64-64,10-65 +13-60,12-61 +89-89,17-90 +35-86,34-94 +34-34,33-41 +20-44,32-32 +1-61,3-97 +50-51,50-96 +29-30,30-61 +2-96,96-99 +9-32,3-32 +20-29,23-28 +18-62,18-76 +90-95,43-89 +42-80,26-96 +43-93,42-81 +13-97,14-99 +46-90,45-89 +1-93,93-94 +5-5,6-84 +86-89,35-86 +25-79,24-80 +17-25,18-24 +10-79,47-59 +7-72,2-6 +15-61,15-62 +6-28,29-92 +52-69,70-70 +3-4,3-97 +69-88,1-98 +13-18,19-32 +83-85,18-84 +9-29,8-28 +55-89,90-90 +24-71,30-71 +94-96,45-94 +3-3,4-84 +13-98,12-12 +5-95,94-96 +4-70,5-69 +23-90,22-89 +56-62,61-62 +39-84,84-84 +44-60,45-61 +49-58,4-87 +16-36,17-37 +44-45,44-79 +46-61,60-62 +4-61,4-34 +78-78,77-93 +38-93,3-92 +67-85,70-72 +87-87,5-88 +5-30,4-31 +56-88,51-57 +5-75,72-72 +11-64,14-65 +34-83,33-35 +80-99,27-81 +31-82,30-81 +62-62,63-63 +12-85,16-85 +19-43,17-44 +41-42,41-81 +6-79,7-80 +22-84,83-85 +19-19,20-20 +11-98,97-99 +8-76,25-55 +53-53,53-71 +12-79,12-44 +79-85,84-86 +33-46,1-76 +8-77,7-76 +5-69,6-69 +37-57,50-58 +82-84,6-83 +2-98,3-99 +33-36,19-82 +19-92,18-93 +5-5,6-97 +1-38,2-37 +15-19,15-19 +45-77,44-46 +2-59,21-60 +41-66,38-65 +15-48,10-15 +8-97,7-99 +23-95,95-98 +59-60,2-60 +29-30,29-30 +18-62,24-62 +6-97,6-98 +5-92,91-91 +98-98,13-99 +16-80,5-16 +1-77,2-67 +5-75,5-75 +70-70,5-71 +30-71,13-90 +30-82,74-80 +9-10,9-98 +9-90,9-9 +62-64,61-63 +14-51,15-63 +68-97,67-69 +80-92,2-81 +1-97,1-98 +5-96,5-96 +15-44,33-39 +29-84,83-84 +6-24,7-91 +6-27,7-28 +5-97,1-99 +68-77,30-76 +7-82,63-63 +3-71,2-70 +6-36,6-6 +4-62,3-63 +47-98,46-47 +34-62,36-61 +3-69,1-70 +66-96,65-97 +21-69,38-46 +10-40,37-38 +42-96,43-43 +19-57,20-48 +50-91,78-91 +45-67,44-67 +7-86,85-87 +2-95,94-94 +46-46,45-98 +33-85,99-99 +81-82,77-82 +41-43,42-63 +7-64,6-63 +3-4,3-88 +26-97,23-97 +1-2,1-93 +6-77,6-7 +44-49,46-92 +46-80,19-79 +70-95,22-71 +77-95,28-65 +1-18,19-73 +48-97,30-97 +20-44,45-81 +15-82,16-81 +2-33,3-32 +94-95,94-97 +23-36,22-29 +14-50,13-51 +46-50,7-45 +74-89,41-75 +16-31,30-30 +77-99,5-78 +1-70,1-70 +17-74,17-74 +48-49,48-77 +29-95,67-68 +30-30,29-31 +95-98,26-96 +1-4,5-95 +62-62,33-63 +7-85,80-81 +34-77,34-83 +27-84,28-83 +25-45,38-45 +4-99,3-4 +94-96,14-95 +25-99,24-24 +14-88,14-89 +1-9,8-99 +86-92,47-66 +36-37,22-54 +9-91,10-90 +5-61,8-89 +14-96,15-15 +3-94,49-93 +2-19,2-20 +62-97,13-99 +94-96,5-95 +1-75,6-76 +17-81,19-82 +35-93,59-98 +9-42,7-41 +3-5,4-98 +84-93,3-84 +1-64,4-64 +13-86,13-86 +34-89,33-90 +77-79,65-78 +57-59,14-58 +54-58,53-55 +78-86,85-86 +47-99,47-99 +26-43,24-30 +1-63,62-85 +87-87,87-88 +31-82,30-31 +58-84,34-85 +44-67,45-68 +7-11,8-8 +7-69,68-68 +4-85,86-86 +56-57,57-89 +13-92,12-92 +1-96,13-26 +56-66,56-91 +37-37,6-38 +74-98,26-75 +3-83,82-84 +2-97,19-98 +90-96,38-96 +4-21,5-21 +42-95,41-41 +28-28,1-35 +6-73,5-57 +28-90,90-94 +3-83,3-82 +5-5,6-59 +22-23,21-50 +35-61,34-61 +7-87,7-87 +20-93,19-94 +9-78,8-78 +3-61,2-3 +45-61,61-73 +19-72,18-73 +78-97,77-98 +19-91,15-20 +36-36,37-67 +33-93,54-93 +13-63,12-90 +3-99,7-97 +18-78,14-17 +85-99,28-99 +48-99,49-98 +40-68,12-67 +16-51,15-85 +94-98,79-95 +65-69,50-68 +41-42,42-75 +7-43,8-44 +26-95,26-96 +2-99,7-36 +49-53,1-99 +25-25,25-35 +47-83,47-48 +49-52,49-49 +26-94,13-25 +6-72,7-71 +16-33,2-28 +3-51,3-51 +9-66,50-66 +37-91,25-98 +4-96,3-95 +67-73,48-72 +22-86,23-86 +40-49,45-52 +53-68,55-66 +38-50,37-49 +1-86,5-85 +35-62,36-62 +7-62,12-86 +15-30,14-16 +47-65,48-65 +3-85,50-84 +15-98,14-16 +56-66,56-57 +29-30,29-51 +6-45,5-46 +49-93,21-92 +11-38,11-37 +9-42,18-27 +29-38,28-80 +7-8,8-91 +66-70,65-71 +20-91,21-21 +22-83,23-82 +5-38,6-39 +26-28,27-97 +5-65,1-85 +14-94,15-94 +20-97,21-96 +95-99,11-78 +21-83,22-84 +5-91,5-90 +39-40,40-86 +9-54,8-53 +8-99,61-71 +29-38,28-50 +18-96,19-97 +5-80,4-81 +7-99,40-54 +95-95,4-96 +80-89,36-79 +2-63,56-69 +7-29,42-99 +11-23,1-23 +13-52,12-51 +18-96,19-97 +20-68,20-67 +3-95,1-95 +3-88,2-89 +31-32,31-88 +8-98,8-98 +5-98,4-6 +2-2,3-96 +27-69,27-69 +2-96,1-3 +5-87,3-57 +20-42,19-43 +7-8,8-8 +10-60,11-67 +16-81,19-81 +74-84,73-83 +13-93,92-92 +68-70,42-69 +33-34,33-63 +7-70,6-70 +13-88,14-87 +8-41,40-67 +50-85,51-86 +27-61,30-61 +63-73,72-73 +4-53,55-80 +3-72,4-71 +4-98,3-98 +38-64,37-65 +42-42,39-41 +77-88,87-90 +45-86,85-87 +4-87,4-87 +21-22,21-57 +28-92,30-91 +4-13,1-77 +13-36,35-72 +7-8,8-62 +8-68,14-78 +24-92,4-92 +10-50,39-47 +4-57,3-56 +31-31,5-30 +41-41,29-42 +65-97,3-96 +43-75,74-76 +94-94,3-95 +28-48,29-47 +62-72,6-72 +20-97,19-96 +46-59,38-58 +55-86,56-87 +29-56,30-55 +2-90,4-89 +15-15,9-14 +10-92,91-91 +63-63,62-64 +66-70,8-98 +44-92,1-91 +2-80,8-42 +36-50,37-52 +4-54,5-53 +5-88,3-88 +60-96,61-97 +11-24,10-24 +81-83,9-82 +4-97,3-98 +36-76,35-77 +34-40,18-43 +68-69,24-78 +84-86,80-89 +39-94,22-79 +57-93,72-93 +59-78,79-91 +7-97,8-98 +7-27,6-88 +1-6,7-15 +13-86,13-14 +25-27,3-26 +33-75,74-75 +68-87,68-69 +72-96,72-97 +23-36,32-35 +97-99,32-77 +23-64,64-86 +82-84,48-83 +1-93,1-93 +83-93,14-93 +12-97,96-98 +3-22,4-59 +32-77,31-76 +25-92,62-89 +18-20,19-33 +34-73,65-72 +31-82,32-82 +3-92,92-97 +1-99,1-98 +4-98,4-4 +13-84,14-83 +13-61,62-98 +14-15,15-48 +29-76,75-77 +22-75,23-85 +5-5,4-87 +7-51,20-80 +14-65,2-13 +78-85,78-98 +7-97,8-97 +11-67,6-10 +5-72,4-97 +96-99,19-97 +33-48,6-49 +24-24,25-47 +25-82,24-81 +3-91,7-91 +7-72,8-71 +10-35,9-11 +2-2,2-99 +30-41,31-42 +10-66,2-66 +4-77,1-77 +13-13,14-89 +79-86,86-91 +4-86,3-87 +47-92,47-92 +18-32,17-33 diff --git a/04/script.rb b/04/script.rb new file mode 100755 index 0000000..b0c3f81 --- /dev/null +++ b/04/script.rb @@ -0,0 +1,24 @@ +#!/usr/bin/env ruby + +require_relative '../common' + +class Day04 < Day + def part1 + stdin.map do |pair| + pair.split(',').map { |elve| first, last = elve.split('-'); first.to_i..last.to_i } + end.select do |pair| + pair.first.cover?(pair.last) || pair.last.cover?(pair.first) + end.size + end + + def part2 + stdin.map do |pair| + pair.split(',').map { |elve| first, last = elve.split('-'); first.to_i..last.to_i } + end.select do |pair| + pair.first.include?(pair.last.first) || pair.first.include?(pair.last.last) || + pair.last.include?(pair.first.first) || pair.last.include?(pair.first.last) + end.size + end +end + +Day04.run diff --git a/05/input b/05/input new file mode 100644 index 0000000..7227e79 --- /dev/null +++ b/05/input @@ -0,0 +1,512 @@ +[S] [T] [Q] +[L] [B] [M] [P] [T] +[F] [S] [Z] [N] [S] [R] +[Z] [R] [N] [R] [D] [F] [V] +[D] [Z] [H] [J] [W] [G] [W] [G] +[B] [M] [C] [F] [H] [Z] [N] [R] [L] +[R] [B] [L] [C] [G] [J] [L] [Z] [C] +[H] [T] [Z] [S] [P] [V] [G] [M] [M] + 1 2 3 4 5 6 7 8 9 + +move 6 from 1 to 7 +move 2 from 2 to 4 +move 2 from 7 to 4 +move 6 from 4 to 3 +move 1 from 5 to 1 +move 3 from 8 to 3 +move 15 from 3 to 4 +move 6 from 5 to 9 +move 14 from 4 to 2 +move 3 from 2 to 7 +move 1 from 2 to 7 +move 9 from 9 to 1 +move 3 from 2 to 1 +move 7 from 6 to 7 +move 1 from 6 to 8 +move 2 from 9 to 1 +move 9 from 2 to 3 +move 8 from 3 to 9 +move 1 from 1 to 4 +move 1 from 8 to 6 +move 1 from 6 to 2 +move 5 from 9 to 8 +move 2 from 9 to 1 +move 1 from 4 to 2 +move 17 from 1 to 9 +move 1 from 3 to 1 +move 3 from 2 to 3 +move 2 from 4 to 5 +move 12 from 7 to 3 +move 16 from 9 to 2 +move 5 from 7 to 5 +move 2 from 1 to 2 +move 1 from 3 to 6 +move 1 from 4 to 6 +move 1 from 7 to 3 +move 1 from 6 to 3 +move 7 from 3 to 4 +move 5 from 8 to 3 +move 1 from 6 to 7 +move 7 from 3 to 4 +move 6 from 3 to 1 +move 2 from 4 to 8 +move 1 from 5 to 2 +move 10 from 4 to 5 +move 3 from 5 to 2 +move 2 from 8 to 9 +move 5 from 2 to 8 +move 1 from 3 to 5 +move 2 from 5 to 8 +move 12 from 5 to 7 +move 1 from 4 to 2 +move 5 from 9 to 4 +move 1 from 2 to 5 +move 6 from 1 to 3 +move 6 from 3 to 5 +move 10 from 7 to 4 +move 2 from 7 to 3 +move 4 from 7 to 6 +move 1 from 9 to 5 +move 12 from 2 to 1 +move 1 from 8 to 7 +move 3 from 7 to 4 +move 4 from 4 to 8 +move 7 from 5 to 3 +move 1 from 2 to 4 +move 10 from 1 to 5 +move 2 from 1 to 2 +move 4 from 6 to 7 +move 8 from 8 to 3 +move 5 from 4 to 9 +move 12 from 3 to 8 +move 4 from 3 to 8 +move 2 from 9 to 2 +move 3 from 5 to 4 +move 1 from 3 to 5 +move 1 from 7 to 6 +move 14 from 4 to 6 +move 6 from 5 to 9 +move 8 from 2 to 8 +move 3 from 5 to 7 +move 21 from 8 to 4 +move 16 from 4 to 9 +move 8 from 6 to 2 +move 4 from 6 to 1 +move 1 from 4 to 6 +move 2 from 4 to 8 +move 3 from 1 to 8 +move 2 from 4 to 6 +move 1 from 6 to 2 +move 3 from 8 to 4 +move 2 from 2 to 5 +move 2 from 5 to 7 +move 1 from 8 to 9 +move 1 from 4 to 9 +move 1 from 1 to 6 +move 3 from 6 to 3 +move 3 from 2 to 3 +move 1 from 4 to 6 +move 3 from 6 to 7 +move 10 from 9 to 7 +move 1 from 4 to 7 +move 6 from 8 to 3 +move 1 from 6 to 8 +move 2 from 2 to 5 +move 1 from 2 to 1 +move 1 from 8 to 9 +move 1 from 2 to 8 +move 1 from 1 to 9 +move 7 from 9 to 1 +move 1 from 8 to 5 +move 7 from 1 to 7 +move 3 from 5 to 8 +move 3 from 7 to 2 +move 1 from 8 to 4 +move 1 from 2 to 4 +move 2 from 4 to 6 +move 5 from 3 to 1 +move 9 from 7 to 2 +move 6 from 3 to 8 +move 8 from 2 to 7 +move 2 from 6 to 4 +move 2 from 1 to 7 +move 2 from 1 to 4 +move 24 from 7 to 4 +move 4 from 8 to 9 +move 2 from 7 to 5 +move 1 from 5 to 2 +move 1 from 3 to 8 +move 4 from 2 to 8 +move 13 from 9 to 2 +move 2 from 8 to 6 +move 3 from 9 to 6 +move 26 from 4 to 2 +move 1 from 5 to 7 +move 2 from 6 to 2 +move 2 from 4 to 1 +move 7 from 2 to 1 +move 15 from 2 to 6 +move 8 from 2 to 8 +move 4 from 6 to 8 +move 9 from 2 to 9 +move 13 from 6 to 7 +move 6 from 1 to 9 +move 2 from 2 to 4 +move 4 from 1 to 6 +move 3 from 8 to 3 +move 1 from 4 to 9 +move 2 from 6 to 7 +move 1 from 4 to 3 +move 3 from 3 to 2 +move 14 from 7 to 4 +move 5 from 9 to 5 +move 9 from 8 to 5 +move 7 from 9 to 6 +move 2 from 5 to 6 +move 2 from 9 to 2 +move 10 from 5 to 1 +move 1 from 3 to 1 +move 2 from 8 to 1 +move 1 from 9 to 2 +move 1 from 7 to 5 +move 4 from 2 to 1 +move 1 from 9 to 8 +move 3 from 4 to 1 +move 1 from 8 to 6 +move 12 from 1 to 5 +move 1 from 1 to 6 +move 1 from 7 to 5 +move 4 from 6 to 9 +move 2 from 2 to 4 +move 1 from 9 to 6 +move 1 from 1 to 5 +move 2 from 9 to 7 +move 10 from 6 to 5 +move 1 from 6 to 7 +move 20 from 5 to 1 +move 1 from 7 to 9 +move 2 from 9 to 1 +move 3 from 5 to 1 +move 2 from 8 to 4 +move 2 from 8 to 7 +move 1 from 5 to 9 +move 1 from 8 to 4 +move 22 from 1 to 7 +move 5 from 4 to 8 +move 1 from 5 to 9 +move 19 from 7 to 4 +move 2 from 9 to 1 +move 1 from 5 to 9 +move 10 from 1 to 8 +move 1 from 9 to 1 +move 1 from 8 to 3 +move 8 from 4 to 7 +move 1 from 5 to 6 +move 3 from 4 to 5 +move 1 from 5 to 9 +move 11 from 7 to 4 +move 4 from 4 to 9 +move 1 from 6 to 2 +move 1 from 3 to 9 +move 5 from 9 to 4 +move 5 from 7 to 9 +move 23 from 4 to 2 +move 17 from 2 to 7 +move 2 from 2 to 8 +move 4 from 4 to 7 +move 1 from 4 to 5 +move 2 from 5 to 2 +move 5 from 8 to 9 +move 5 from 2 to 7 +move 9 from 7 to 5 +move 11 from 9 to 2 +move 1 from 4 to 3 +move 5 from 8 to 7 +move 3 from 8 to 5 +move 2 from 1 to 3 +move 2 from 3 to 9 +move 1 from 5 to 8 +move 5 from 7 to 5 +move 15 from 5 to 4 +move 2 from 8 to 1 +move 2 from 5 to 1 +move 4 from 4 to 1 +move 1 from 8 to 7 +move 8 from 2 to 1 +move 4 from 2 to 8 +move 2 from 7 to 4 +move 5 from 8 to 6 +move 5 from 7 to 9 +move 4 from 6 to 5 +move 7 from 4 to 8 +move 1 from 6 to 1 +move 1 from 3 to 1 +move 2 from 5 to 1 +move 7 from 1 to 5 +move 5 from 1 to 3 +move 4 from 7 to 9 +move 4 from 3 to 9 +move 2 from 9 to 7 +move 6 from 9 to 2 +move 1 from 4 to 1 +move 1 from 3 to 5 +move 1 from 2 to 5 +move 5 from 9 to 4 +move 4 from 4 to 6 +move 1 from 8 to 9 +move 8 from 4 to 3 +move 7 from 7 to 3 +move 5 from 1 to 3 +move 11 from 5 to 9 +move 1 from 7 to 6 +move 2 from 3 to 5 +move 1 from 3 to 1 +move 3 from 6 to 2 +move 2 from 5 to 1 +move 2 from 1 to 2 +move 3 from 1 to 5 +move 5 from 9 to 2 +move 2 from 6 to 8 +move 2 from 3 to 8 +move 4 from 9 to 7 +move 3 from 5 to 2 +move 2 from 1 to 8 +move 1 from 9 to 8 +move 1 from 9 to 2 +move 4 from 7 to 9 +move 11 from 8 to 7 +move 1 from 8 to 2 +move 6 from 9 to 7 +move 3 from 7 to 1 +move 13 from 2 to 7 +move 24 from 7 to 1 +move 2 from 2 to 6 +move 1 from 8 to 3 +move 1 from 9 to 3 +move 5 from 2 to 4 +move 1 from 2 to 5 +move 1 from 6 to 2 +move 1 from 6 to 3 +move 1 from 2 to 4 +move 3 from 7 to 3 +move 2 from 1 to 7 +move 2 from 3 to 8 +move 2 from 7 to 8 +move 9 from 3 to 2 +move 3 from 4 to 8 +move 1 from 5 to 1 +move 9 from 2 to 1 +move 3 from 4 to 9 +move 1 from 7 to 8 +move 6 from 3 to 9 +move 2 from 1 to 5 +move 15 from 1 to 3 +move 13 from 3 to 9 +move 11 from 1 to 4 +move 5 from 4 to 1 +move 6 from 3 to 6 +move 4 from 4 to 8 +move 6 from 1 to 4 +move 1 from 5 to 2 +move 1 from 2 to 1 +move 3 from 4 to 2 +move 2 from 8 to 5 +move 2 from 4 to 2 +move 9 from 9 to 3 +move 9 from 3 to 5 +move 2 from 9 to 4 +move 5 from 2 to 6 +move 1 from 1 to 8 +move 1 from 4 to 1 +move 10 from 9 to 2 +move 9 from 2 to 4 +move 10 from 4 to 1 +move 3 from 1 to 3 +move 4 from 1 to 2 +move 5 from 2 to 4 +move 2 from 5 to 2 +move 4 from 1 to 7 +move 10 from 5 to 4 +move 2 from 2 to 4 +move 1 from 9 to 2 +move 2 from 3 to 5 +move 1 from 3 to 5 +move 3 from 6 to 7 +move 8 from 4 to 9 +move 6 from 6 to 1 +move 4 from 9 to 5 +move 2 from 9 to 1 +move 1 from 2 to 6 +move 6 from 5 to 2 +move 3 from 7 to 9 +move 4 from 8 to 2 +move 1 from 7 to 9 +move 1 from 5 to 3 +move 2 from 7 to 4 +move 1 from 7 to 1 +move 14 from 1 to 9 +move 1 from 1 to 9 +move 1 from 3 to 8 +move 3 from 2 to 5 +move 2 from 4 to 2 +move 6 from 8 to 1 +move 1 from 2 to 1 +move 5 from 1 to 9 +move 1 from 1 to 7 +move 2 from 8 to 5 +move 1 from 5 to 4 +move 1 from 6 to 1 +move 8 from 2 to 7 +move 2 from 6 to 1 +move 9 from 9 to 5 +move 11 from 4 to 8 +move 4 from 7 to 4 +move 6 from 4 to 6 +move 1 from 7 to 4 +move 6 from 6 to 7 +move 1 from 5 to 9 +move 6 from 8 to 9 +move 8 from 9 to 5 +move 1 from 4 to 5 +move 15 from 9 to 3 +move 3 from 1 to 4 +move 6 from 7 to 2 +move 3 from 4 to 9 +move 2 from 7 to 3 +move 1 from 7 to 3 +move 1 from 7 to 2 +move 2 from 8 to 1 +move 3 from 8 to 5 +move 2 from 1 to 7 +move 8 from 3 to 6 +move 3 from 6 to 5 +move 1 from 6 to 1 +move 10 from 5 to 7 +move 6 from 5 to 4 +move 4 from 2 to 4 +move 6 from 5 to 1 +move 6 from 1 to 8 +move 2 from 9 to 2 +move 2 from 9 to 7 +move 6 from 3 to 7 +move 1 from 3 to 5 +move 1 from 1 to 9 +move 2 from 8 to 1 +move 2 from 5 to 4 +move 3 from 3 to 7 +move 10 from 4 to 6 +move 1 from 9 to 7 +move 12 from 7 to 3 +move 12 from 3 to 8 +move 2 from 1 to 5 +move 1 from 1 to 3 +move 13 from 8 to 1 +move 7 from 7 to 1 +move 13 from 6 to 9 +move 1 from 7 to 4 +move 6 from 5 to 3 +move 3 from 4 to 3 +move 6 from 3 to 1 +move 10 from 9 to 4 +move 2 from 7 to 6 +move 8 from 1 to 9 +move 3 from 2 to 9 +move 1 from 3 to 5 +move 1 from 3 to 5 +move 1 from 1 to 4 +move 6 from 9 to 3 +move 2 from 6 to 7 +move 4 from 9 to 5 +move 4 from 1 to 6 +move 1 from 2 to 4 +move 6 from 1 to 4 +move 3 from 9 to 3 +move 3 from 6 to 8 +move 3 from 8 to 7 +move 5 from 5 to 1 +move 1 from 3 to 9 +move 1 from 9 to 5 +move 1 from 3 to 2 +move 2 from 5 to 1 +move 1 from 6 to 9 +move 1 from 6 to 3 +move 2 from 9 to 7 +move 2 from 8 to 1 +move 1 from 3 to 2 +move 1 from 2 to 5 +move 1 from 7 to 1 +move 7 from 7 to 9 +move 12 from 1 to 9 +move 1 from 5 to 2 +move 1 from 7 to 1 +move 13 from 4 to 7 +move 1 from 9 to 4 +move 5 from 7 to 3 +move 4 from 9 to 1 +move 8 from 7 to 9 +move 3 from 2 to 3 +move 4 from 3 to 7 +move 5 from 4 to 6 +move 3 from 9 to 4 +move 10 from 1 to 5 +move 3 from 4 to 7 +move 16 from 9 to 2 +move 3 from 9 to 2 +move 6 from 5 to 3 +move 4 from 6 to 2 +move 1 from 4 to 6 +move 2 from 6 to 8 +move 1 from 5 to 2 +move 1 from 5 to 8 +move 7 from 7 to 2 +move 16 from 2 to 1 +move 1 from 5 to 1 +move 10 from 2 to 8 +move 14 from 8 to 5 +move 2 from 2 to 6 +move 1 from 2 to 5 +move 2 from 2 to 1 +move 8 from 1 to 7 +move 4 from 1 to 7 +move 2 from 1 to 7 +move 5 from 3 to 2 +move 1 from 1 to 6 +move 2 from 2 to 5 +move 4 from 1 to 7 +move 1 from 2 to 8 +move 1 from 2 to 8 +move 3 from 6 to 7 +move 10 from 7 to 5 +move 1 from 2 to 8 +move 27 from 5 to 9 +move 1 from 5 to 6 +move 1 from 6 to 4 +move 1 from 4 to 3 +move 3 from 3 to 7 +move 4 from 3 to 6 +move 2 from 6 to 4 +move 3 from 8 to 1 +move 2 from 6 to 1 +move 12 from 7 to 8 +move 2 from 3 to 9 +move 1 from 9 to 2 +move 1 from 2 to 8 +move 2 from 1 to 2 +move 6 from 3 to 8 +move 1 from 7 to 4 +move 15 from 9 to 5 +move 7 from 9 to 4 +move 1 from 2 to 1 +move 16 from 8 to 2 +move 8 from 5 to 2 +move 24 from 2 to 9 +move 3 from 1 to 2 +move 24 from 9 to 1 +move 5 from 5 to 9 +move 3 from 4 to 1 +move 1 from 7 to 6 +move 1 from 6 to 3 +move 1 from 3 to 2 +move 3 from 2 to 3 +move 1 from 5 to 6 +move 1 from 2 to 7 diff --git a/05/script.rb b/05/script.rb new file mode 100755 index 0000000..b5d1c46 --- /dev/null +++ b/05/script.rb @@ -0,0 +1,63 @@ +#!/usr/bin/env ruby + +require_relative '../common' + +class Day05 < Day + class Store + def self.parse(input) + stacks_data = input.take_while { |line| line != "" } + instructions_data = input.drop_while { |line| !line.start_with?("move") } + + stacks = stacks_data.pop.tr_s(' ', ' ').strip.split(' ') + crates = stacks_data.reverse + + Store.new(stacks.map do |stack| + [ + stack, + crates.map { |row| row[1 + 4 * (stack.to_i - 1)] } + .take_while { |crate| crate != " " } + ] + end.to_h, instructions_data) + end + + attr_reader :stacks + + def initialize(stacks, instructions) + @stacks = stacks + @instructions = instructions + end + + def parse(instruction) + count, from, to = instruction.match(/move ([0-9]+) from ([0-9]+) to ([0-9]+)/).captures + [from, to, count.to_i] + end + + def move_one_by_one(from, to, count) + count.times { stacks[to] << stacks[from].pop } + end + + def move_multiple(from, to, count) + stacks[to] += stacks[from].pop(count) + end + + def result_part1 + @instructions.each { |instruction| move_one_by_one(*parse(instruction)) } + stacks.map { |_,v| v.last }.join + end + + def result_part2 + @instructions.each { |instruction| move_multiple(*parse(instruction)) } + stacks.map { |_,v| v.last }.join + end + end + + def part1 + Store.parse(stdin).result_part1 + end + + def part2 + Store.parse(stdin).result_part2 + end +end + +Day05.run diff --git a/06/golf.rb b/06/golf.rb new file mode 100644 index 0000000..3dc0edf --- /dev/null +++ b/06/golf.rb @@ -0,0 +1 @@ +[4,14].each_with_object($<.read.chars){|i,s|p i+s.each_cons(i).find_index{_1.uniq==_1}} diff --git a/06/input b/06/input new file mode 100644 index 0000000..f86c568 --- /dev/null +++ b/06/input @@ -0,0 +1 @@ +hrbbjllllspssblslvvrdrbbpbbmcccfppvbbwvbbmrmjrjrfrgfgbffgfqfqlltlwttscsncscchssrppffvwwvvpnnwwwpvwvhhnvhhbttvzzdlzdlzzwmmjhhznnjdnnnqddbtdbdbsdsmdsdrrdpdwpdppgcgqgcctftsfszslljbljbjwbwbnwnqqrnnztntmtrmmzwzdwzwgwwwjhjsjgjtjjhpjhhppqzqdqffrvrtvvsmmgwmgwgbbclltctptzpzhpzptzppcfpcfftflfzftztddzgzmmfsmsrmmsstttvbvmbvvsmsqmqlldjdtthwtwbwggrzzjrzrcctffsshqshhpthhlnhlhqhdqqrwrmmcttpfttzfzgzdgdzzwrrtsrrsnrnccrbbsssbpbjjvzzwlwtwjwsjwjggzqgzzrsszzjnzjzwjzzcrzczncnqqztzfzhfhvvtjvjdvjjmrjrppvzppczpczcggshghvhnhhsrsnsdszzdpzpzlpzzhwwmnwmwmcwwfnwfwjjcbcncllcsllqdqzzhqhmqmbbjvjjwwcjjpnpllzfzddtmtccqrcrtrwrpphpmpplslmltthnnvhhvrvbblhhrrdqqmbqqgtqggdgcdcvvsbsswvvpggbbtftlflglzlmlbbfhhrshswhshffhhdnnrfrvrmrnrprrmfmpmnpnfnggvvcncdcrczrzccpmmssrbbdjdtdrdwrrwhrrvrtvvszvvwvzzmhhjhhwlhlqlvlttzftztdtstftrfrdddmtmzzsqzqvvpdpdcpcncnrrtntznzrzgznztnznhhsqqnrqrhhlzhzthhfddrzdrrqmqggcmmllnjjvwwjccfjfqfcfzccwvcwvcvjcjtjtnnqsqmqrmrzrszrszzfwfggnmmcdmdjmmhwwgfwfnwnlwwcffsrffvnvbvnvwnwgnwnmmbzbmbpplmplpspzpmzpzdzgzrzrtrjrbbppwvwgwmggqwgghqqshhcwcqwcqcfcbbnsnrrtztzrtrvtvhthzhmmrqqrwqqsjqjcctgtwthhqmmnffmgmdgdlgljjhwjwggrqqfrqqjvqvhqqgsqsgsttmrrbprbppmjppslpsllvlfvlvrvhvtqmrjcdzwsbzfmgmwmwqwhztqrsdzhqjqvbjbntnbndflthljcczdmmhszfgsplrtlqnfzbrlqngwdqtfwcmrdjrsmdpmjmqwrbwfjzwnvqhfmlqtvvnlfzbfccwslqpbzzjccbvrzhghqwtvqgwrmsfzqnmnqqjsjtpcmngpqgllfsnpqtjjbqcdppnsmtwrslnrbqtwvnbctzvwfmgctscmzjbqqgqdwbpzmrdwgfcjzftzgmfcjhchbnmnqnrgtqngwrmncjvptqqdtjtgtpzzdrfsdgmwlwrjnqldbwrqjrhwcczlzvlhpgrnwzhbwjnpthggczfgtrjnzvnlfdfbwcnzfbwlwlmgnnjnpvhbhqgnzhqsnmvbcftsmrcgpvnnnmgnrvpbzlpwnbwpzmwpgqvbfgjwfrjqnvvgmqwwcfddqmdznmfhpjcfgptqdqwmplrglbwlmsqzjshrlhflcjvptgrcfhjfgqmlfzrtphpbvcqzwpcnwljjdlmqzhcctqshdngrgtlfsrfccdtlvmqcdgnpcvphdsrpzfzwclvsqcpzqlfvvqzggdhpfzdvhshglvfzfmcllrdfjfsjtngjgddcpqnlmrnplwtlvwdvzftltnsnspcdztgqhlhvvbnwvnmhscfnqbngpvprzfrjcmfpfzfftrlnwgllhnjndpjdrwcgqpcgcqngnbfzlvzvhnqdjthflmwvppmbdssddmgsbgrqnpjzrjpzdddqgsdlmwnhhpjbthclvqhgrsnrbqgtnsjhncnzbhrdgftvbptrqssvsqfpqnddhmgwcrfqndqjsqgffmhdvqhjrdlmrlcqctqccprwlbqgqrwmtfhwmfjfqzdqbsdsjbtsvfvgbsrvqwnqqqqthpsqgcfslsqtnjwtsrcdcctggdghrjwpbfccrtwgszwbrsjswmjmjbcqrsgbcfsdjzsbjnnssnddnnvwgftlrqvphnqcgjszscrlhhjnljlqcjqtqfwbmdmrgdlcqqwmbsmsdhpplvlfglqwspbfptlbzqjwhqmfvzvsvpjclcdzsbvntmhdqdvhghcmmflpjbglsghbswdshtsbdrgpsrsclrmfwwqbrgdjsqztgttqpwhnfhszlgbfpzhczsnwqflmshlgbrpmdzgpqwtsbssgfjbtrwbmztlwwfmsdgpgfgdjfdccwlfgztbcbqjvjtvslmddjplrswwcszspgplsrhrnwnmrrfbcgdmntcrlvnfqtwwcczsglrhtrfqnmhvgzjpmlplqvqhmnfgvzqcmzhqszgslvndqtqhvrbvbmclbcbjdswvcjrzgfdmdwnnlzlzqcffsrqdfmmpzfnmdsnqlpcrhzsdnsflblcjsfsgcnsspftjrlmdjsmfpqtmlgfvnlfnjscsgwzwvpjrvvclhsbqldlnmtglhbjfwlzmvrbvgtprfjbjhhnlqnbrswwlqtcgrjrltdrnfrjhrntllptlsbhqrwvdsfrlghtfcndznzjwcgmtdvffltgrdmljlqhdtmdvnfsfsrvdpmhlrrsttvqlwfptddwbpfrbclwwzmfpttmrmmqzjnbbnnfvzwmmcfshvrlbdbjzprftbqvdsghnnzwbjccpthdsvsdlgvphsgjdqjwsgmzqnqpqvgqjvwgjtzpmqqwnlwrwhqqjjclcbhjgpwhqdclwmqfmwbwmwwvcbhfznfhcfbprfcdqlbcttnvgnjwswcmpbrghtzgdbppbprffzjgvddzpwmdctrhnrfzdfhtmnfrsfdqvzcnrtncflhvldcndwqtvbggmwlzhchlcwtcbqcvlfhdwljgddwpvcfczvfqmphgtdsnsqwdpvvmwnwqjbrjwbdhhgtffphsdrvspsbgmfrmwmhnrgqdfppzgfpgmqjcsnglczgwhjthfhztzrlpgzjhcfrjpjvtjptptbvflftjtcfhmbwlhlbhvnjnbfmwjrgbvvhmdlncdgncgfjcnnpdljfcjsmsfscqpwsgcmlhhqmldsnjfrrqpghwncmgwgnjsdtvbhrbbnmpqjrrctqqnqzztmbqmdsgdvmmlwmbvprllzgntnmttrlzrttmjjlrwpwmtfznmwnsjmjhjdnsppfhcrjpzhjqzdtdbsjshfzzvrwvjbjbgtsfpgggbdztczwlhpmthfjdgsbrvlwmlrvgdrpjzccwmgpcnqqzmqdjqmwsrzwsmtmdjdhmjrwfwnzlmfnqtcgtslwtlnwhvmqntmglhntnsjlnmzfvfdztcfwmpchsrsdmqvqcwljzrmmssjvbmvvnmqlbsdwnrbmqctdtmfzlgfzpmjcnftgftvjpfbwwmzfdrrwjwcfwfcfmzbbnppgjrmbcvmvnjpdrzmvndvddtvshlnjjwgtsvnwtwnhcbfpnthpjlrhgrqccdgppjvdqjwqrfrrgnvhfwvjhnwhntnpmghphrtgqhwtbrqhqljfdjbgnlgmqqgfcqpqfhcpgspdbvlbfjvlrgmtjztwdzlrhqwwtcpdvsqgssjbjjgqlwbcctzzqvvmdzpfrmspmqhtzwgcfsslpnhpjfwqrrfbwbndrvhnnsjnlvlvqdsgwzjsrprhgtvsfbhbcpljdczbtdwzcnhzntrwcrjctmhtjfdlthznzmqblppzcqgpjhlzjrmcvpptfjjzltdhmvwphwlccscwrwfcqpqwwrzcmnltzdcfvtjrcvsqwtchrmdfzjmzjfhppjzbhglwqggzqqnspfmzrfwrqdqdrsdbsdhcgdqrrnjlwrqhfhpzjhrvjndqphndnnnbwhrjvqrrbvlhhbljjcwmfpvnhcszfshlsnczgtcfhjslbhzczdqdmdnvqdzhbmbpcnbntwgllfscrcwhfrgtfvftmwhbgfhjzjrbvvwc diff --git a/06/script.rb b/06/script.rb new file mode 100755 index 0000000..392d239 --- /dev/null +++ b/06/script.rb @@ -0,0 +1,21 @@ +#!/usr/bin/env ruby + +require_relative '../common' + +class Day06 < Day + def part1 + find_marker 4 + end + + def part2 + find_marker 14 + end + + private + + def find_marker(size) + size + stdin.join.chars.each_cons(size).find_index { |chars| chars == chars.uniq } + end +end + +Day06.run diff --git a/common.rb b/common.rb index d12c5bc..065f249 100644 --- a/common.rb +++ b/common.rb @@ -41,4 +41,8 @@ class Day INPUT end end + + def stdin + @stdin ||= ARGF.readlines.reject { |line| line.start_with? "#" }.map(&:chomp) + end end