[2023][ruby][4.*]
change ppzkqrrkpozsowtszzrzsropkvruvozm
commit 98719a887e00053a87bbb435cae4122ae36d8ceb
author Alpha Chen <alpha@kejadlen.dev>
date
parent qynnzqxx
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