# Advent of Code: Day 18

Only 1 star for me today :(

# Part 1

``````library(readr)

.get <- function(x, envir) {
if (exists(x, envir = envir))
get(x, envir = envir)
else 0
}

snd <- function(note, ..., e) {
freq <- .get(note, envir = e)
res <- setNames(freq, note)
assign("last_played", res, envir = e)
}

set <- function(note, freq, e) {
freq <- guess_num(freq, e)
assign(note, freq, envir = e)
}

guess_num <- function(freq, e) {
if (!grepl("[0-9]", freq)) {
freq <- .get(freq, envir = e)
} else freq <- as.numeric(freq)
freq
}

add <- function(note, freq, e) {
res <- .get(note, envir = e)
freq <- guess_num(freq, e)
set(note, res + freq, e)
}

mul <- function(note, freq, e) {
res <- .get(note, envir = e)
freq <- guess_num(freq, e)
set(note, res * freq, e)
}

mod <- function(note, freq, e) {
res <- .get(note, envir = e)
freq <- guess_num(freq, e)
set(note, res %% freq, e)
}

rcv <- function(note, ..., e) {
if (note > 0)
.get("last_played", envir = e)
}

play_duet <- function(input) {
i <- 1
e <- new.env()
while (i <= nrow(input)) {
if (input\$instruction[i] == "jgz") {
if (.get(input\$note[i], envir = e) > 0) {
i <- i + guess_num(input\$freq[i])
next
} else {
i <- i + 1
next
}
}

if (input\$instruction[i] == "rcv" &&
.get(input\$note[i], envir = e) > 0) {
return(get("last_played", envir = e))
}

invoke_map(input\$instruction[i],
input\$note[i], input\$freq[i], e = e)
i <- i + 1
}

}

delim = " ", col_names = FALSE) %>%
set_names(c("instruction", "note", "freq"))
``````
``````## Parsed with column specification:
## cols(
##   X1 = col_character(),
##   X2 = col_character(),
##   X3 = col_character()
## )
``````
``````## Warning: 2 parsing failures.
## row # A tibble: 2 x 5 col     row   col  expected    actual                                   file expected   <int> <chr>     <chr>     <chr>                                  <chr> actual 1     5  <NA> 3 columns 2 columns 'advent-data/2017-12-18-test-data.txt' file 2     7  <NA> 3 columns 2 columns 'advent-data/2017-12-18-test-data.txt'
``````
``````puzzle_input <- read_delim("advent-data/2017-12-18-data.txt",
delim = " ", col_names = FALSE) %>%
set_names(c("instruction", "note", "freq"))
``````
``````## Parsed with column specification:
## cols(
##   X1 = col_character(),
##   X2 = col_character(),
##   X3 = col_character()
## )
``````
``````## Warning in rbind(names(probs), probs_f): number of columns of result is not
## a multiple of vector length (arg 1)
``````
``````## Warning: 7 parsing failures.
## row # A tibble: 5 x 5 col     row   col  expected    actual                              file expected   <int> <chr>     <chr>     <chr>                             <chr> actual 1    18  <NA> 3 columns 2 columns 'advent-data/2017-12-18-data.txt' file 2    22  <NA> 3 columns 2 columns 'advent-data/2017-12-18-data.txt' row 3    26  <NA> 3 columns 2 columns 'advent-data/2017-12-18-data.txt' col 4    27  <NA> 3 columns 2 columns 'advent-data/2017-12-18-data.txt' expected 5    32  <NA> 3 columns 2 columns 'advent-data/2017-12-18-data.txt'
## ... ................. ... ................................................................... ........ ................................................................... ...... ................................................................... .... ................................................................... ... ................................................................... ... ................................................................... ........ ...................................................................
## See problems(...) for more details.
``````
``````play_duet(input)
``````
``````## a
## 4
``````
``````play_duet(puzzle_input)
``````
``````##    b
## 7071
``````

Tags:

Categories:

Updated: