#!/bin/env ruby # frozen_string_literal: true require 'pry' def score(opponent, me) base = case me when :rock 1 when :paper 2 when :scissors 3 end return 3 + base if opponent == me outcome = 0 outcome = 6 if (opponent == :rock) && (me == :paper) outcome = 6 if (opponent == :paper) && (me == :scissors) outcome = 6 if (opponent == :scissors) && (me == :rock) outcome + base end input = File.readlines('./input').map(&:strip) guide = input.map do |pair| pair.split.map do |letter| case letter when 'A', 'X' :rock when 'B', 'Y' :paper when 'C', 'Z' :scissors end end end scores = guide.map do |pair| score(pair[0], pair[1]) end puts "Part 1 Solution: #{scores.sum}" ## Part 2 def wins_to?(throw) case throw when :rock :paper when :paper :scissors when :scissors :rock end end def loses_to?(throw) case throw when :rock :scissors when :paper :rock when :scissors :paper end end guide2 = input.map do |pair| pair.split.map do |letter| case letter when 'A' :rock when 'B' :paper when 'C' :scissors when 'X' :lose when 'Y' :draw when 'Z' :win end end end guide2.map! do |opponent, outcome| throw = case outcome when :draw opponent when :win wins_to?(opponent) when :lose loses_to?(opponent) end [opponent, throw] end scores2 = guide2.map do |pair| score(pair[0], pair[1]) end puts "Part 2 Solution: #{scores2.sum}"