From 33567160ec9fcec9e9e7011444d128b73a6e0ac2 Mon Sep 17 00:00:00 2001 From: Jeremy Kaplan Date: Tue, 3 Dec 2019 22:37:25 -0800 Subject: [PATCH] 2019: Day4 Part 2 --- 2019/day4/part2.rb | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 2019/day4/part2.rb diff --git a/2019/day4/part2.rb b/2019/day4/part2.rb new file mode 100644 index 0000000..d303598 --- /dev/null +++ b/2019/day4/part2.rb @@ -0,0 +1,40 @@ +# frozen_string_literal: true + +input = '' # TODO +range = Range.new(*input.split('-').map(&:to_i)) + +def pairwise(arr) + arr[0...-1].zip(arr[1..]) +end + +def runs(digits) + runs = [] + ref = digits.first + run = ref.to_s + digits[1..].each do |d| + if d == ref + run += d.to_s + else + runs << run + ref = d + run = ref.to_s + end + end + runs << run +end + +count = range.count do |n| + # 1. All numbers in this range are six digits + # 2. All numbers in this range are in this range + + digits = n.digits.reverse + + # 3. Two adjacent digits are the same + double = runs(digits).any? { |run| run.length == 2 } + + # 4. Going from left to right, the digits *never decrease* + monotonic = pairwise(digits).none? { |pair| pair.last < pair.first } + + double && monotonic +end +pp count