Day 6: Signals and Noise

Reference

library(tidyverse)

input <- read_csv(file = "inputs/2016/06.txt", col_names = "original")

Part One

mode <- function(x, na.rm = FALSE) {
  if (na.rm) x <- x[!is.na(x)]

  ux <- unique(x)
  return(ux[which.max(tabulate(match(x, ux)))])
}

splitted_strings <- input |> 
    mutate(char = str_split(string = original, pattern = "")) |> 
    unnest_wider(col = char, names_sep = "_")

splitted_strings |> 
    summarise(across(-original, mode)) |> 
    unite("error_corrected", everything(), sep = "") |> 
    pull(error_corrected) |> 
    cat()
## xhnqpqql

Part Two

least_common <- function(x, na.rm = FALSE) {
  if (na.rm) x <- x[!is.na(x)]

  ux <- unique(x)
  return(ux[which.min(tabulate(match(x, ux)))])
}

splitted_strings |> 
    summarise(across(-original, least_common)) |> 
    unite("error_corrected", everything(), sep = "") |> 
    pull(error_corrected) |> 
    cat()
## brhailro