#!/usr/bin/env ruby # frozen_string_literal: true require "pathname" require "json" def sum_of_numbers(json) case json when Array then json.sum { |e| sum_of_numbers(e) } when Hash then json.sum { |(_, v)| sum_of_numbers(v) } when Numeric then json else 0 end end def sum_of_numbers_nored(json) case json when Array then json.sum { |e| sum_of_numbers_nored(e) } when Hash then json.value?("red") ? 0 : json.sum { |(_, v)| sum_of_numbers_nored(v) } when Numeric then json else 0 end end def main(file_paths) file_paths.each do |file_path| json = JSON.parse(file_path.read) puts "#{file_path} / solution 1: #{sum_of_numbers(json)}" puts "#{file_path} / solution 2: #{sum_of_numbers_nored(json)}" end end main(ARGV.map { |x| Pathname(x) })