From 0d0cc439b0d2a12f5d1e0100e6cde0d5f119f055 Mon Sep 17 00:00:00 2001 From: Alpha Chen Date: Mon, 4 Dec 2023 13:13:32 -0500 Subject: [PATCH] [2023][ruby][4.*] --- 2023/ruby/day_04.rb | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 2023/ruby/day_04.rb diff --git a/2023/ruby/day_04.rb b/2023/ruby/day_04.rb new file mode 100644 index 0000000..6102de2 --- /dev/null +++ b/2023/ruby/day_04.rb @@ -0,0 +1,25 @@ +cards = ARGF.read.scan(/Card\s+(\d+):+((?~\|))\|(.*)/) + .to_h {|id, *v| + [id.to_i, v.map { _1.scan(/\d+/).map(&:to_i) }] + } + +# part one +p cards.values + .map {|winning,card| + winners = (card & winning) + winners.empty? ? 0 : 2 ** (winners.length - 1) + } + .sum + +# part two +wins = Hash.new {|h,k| + winning, card = cards.fetch(k) + winners = winning & card + new_cards = (1..winners.length).map { k + _1 } + + h[k] = winners.empty? ? 1 : 1 + new_cards.sum { h[_1] } +} +p cards.map {|id,(winning,card)| + wins[id] + } + .sum