aboutsummaryrefslogtreecommitdiff
path: root/2022/day2.rb
diff options
context:
space:
mode:
Diffstat (limited to '2022/day2.rb')
-rw-r--r--2022/day2.rb116
1 files changed, 116 insertions, 0 deletions
diff --git a/2022/day2.rb b/2022/day2.rb
new file mode 100644
index 0000000..bc4ade5
--- /dev/null
+++ b/2022/day2.rb
@@ -0,0 +1,116 @@
+TEST_S = <<-EOF
+A Y
+B X
+C Z
+EOF
+
+def score(picked_item, outcome)
+ fail "Wrong picked item '#{picked_item}'" unless picked_item
+ outcome_score = case outcome
+ when :win
+ 6
+ when :draw
+ 3
+ when :lose
+ 0
+ end
+ picked_score = case picked_item
+ when /A|X/
+ 1
+ when /B|Y/
+ 2
+ when /C|Z/
+ 3
+ end
+ #puts "#{outcome_score} + #{picked_score}"
+ return outcome_score + picked_score
+end
+
+def guessed_strategy(line)
+ outcome_map = {
+ 'A X' => :draw,
+ 'A Y' => :win,
+ 'A Z' => :lose,
+ 'B X' => :lose,
+ 'B Y' => :draw,
+ 'B Z' => :win,
+ 'C X' => :win,
+ 'C Y' => :lose,
+ 'C Z' => :draw
+ }
+ return outcome_map[line]
+end
+
+def correct_strategy(item1, item2)
+ return :win if item2 == 'Z'
+ return :draw if item2 == 'Y'
+ return :lose if item2 == 'X'
+end
+
+def what_to_choose(oponent_shape, outcome)
+ case outcome
+ when :draw
+ return oponent_shape
+ when :win
+ case oponent_shape
+ when 'A'
+ return 'B'
+ when 'B'
+ return 'C'
+ when 'C'
+ return 'A'
+ else
+ fail "Don't know this shape '#{oponent_shape}'"
+ end
+ when :lose
+ case oponent_shape
+ when 'A'
+ return 'C'
+ when 'B'
+ return 'A'
+ when 'C'
+ return 'B'
+ else
+ fail "Don't know this shape '#{oponent_shape}'"
+ end
+ else
+ fail "Don't know this outcome '#{outcome}'"
+ end
+end
+
+def part1(filename)
+ score = 0
+ File.open(filename) do |f|
+ scores = f.readlines.map do |line|
+ item1, item2 = line.chomp.split()
+ outcome = guessed_strategy(line.chomp)
+ score(item2, outcome)
+ end
+
+ score = scores.sum
+ end
+ score
+end
+
+def part2(filename)
+ score = 0
+ File.open(filename) do |f|
+ scores = f.readlines.map do |line|
+ item1, item2 = line.chomp.split()
+ outcome = correct_strategy(item1, item2)
+ shape = what_to_choose(item1, outcome)
+ score(shape, outcome)
+ end
+
+ score = scores.sum
+ end
+ score
+end
+
+#puts part1('./day2-test.txt')
+#puts part1('./day2.txt')
+
+
+puts 'Part2'
+puts part2('./day2-test.txt')
+puts part2('./day2.txt')