Day 2: Rock Paper Scissors

Reference

Part One

library(tidyverse)

input <- read_lines(file = "inputs/2022/02.txt")

guide <- tibble(original = input) |> 
    separate_wider_delim(cols = original,
                         delim = " ",
                         names = c("opponent", "me")) |> 
    mutate(opponent = case_match(opponent,
                                 "A" ~ "Rock",
                                 "B" ~ "Paper",
                                 "C" ~ "Scissors"),
           me       = case_match(me,
                                 "X" ~ "Rock",
                                 "Y" ~ "Paper",
                                 "Z" ~ "Scissors"))

score <- function(opponent, me) {
    if (me == "Rock")
        score <- 1 + case_match(opponent,
                               "Rock"     ~ 3,
                               "Paper"    ~ 0,
                               "Scissors" ~ 6)
    
    else if (me == "Paper")
        score <- 2 + case_match(opponent, 
                                "Rock"     ~ 6,
                                "Paper"    ~ 3,
                                "Scissors" ~ 0)
    
    else if (me == "Scissors")
        score <- 3 + case_match(opponent,
                                "Rock"     ~ 0,
                                "Paper"    ~ 6,
                                "Scissors" ~ 3)
    
    return(score)
}

guide |> 
    mutate(score = map2_int(opponent, me, score)) |> 
    summarise(total = sum(score)) |> 
    pull(total) |> 
    cat()
## 12458

Part Two

guide <- tibble(original = input) |> 
    separate_wider_delim(cols = original,
                         delim = " ",
                         names = c("opponent", "outcome")) |> 
    mutate(opponent = case_match(opponent,
                                 "A" ~ "Rock",
                                 "B" ~ "Paper",
                                 "C" ~ "Scissors"),
           outcome  = case_match(outcome,
                                 "X" ~ "lose",
                                 "Y" ~ "draw",
                                 "Z" ~ "win"))

me <- function(opponent, outcome) {
    if (opponent == "Rock")
        me <- case_match(outcome,
                         "lose" ~ "Scissors",
                         "draw" ~ "Rock",
                         "win"  ~ "Paper")
    
    else if (opponent == "Paper")
        me <- case_match(outcome,"lose" ~ "Rock",
                         "draw" ~ "Paper",
                         "win"  ~ "Scissors")
    
    else if (opponent == "Scissors")
        me <- case_match(outcome,
                         "lose" ~ "Paper",
                         "draw" ~ "Scissors",
                         "win"  ~ "Rock")
    
    return(me)
}

guide |> 
    mutate(me    = map2_chr(opponent, outcome, me),
           score = map2_int(opponent, me, score)) |> 
    summarise(total = sum(score)) |> 
    pull(total) |> 
    cat()
## 12683