Skip to content

Instantly share code, notes, and snippets.

@ozjimbob
Created December 5, 2022 23:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ozjimbob/9539139ac536f09030beae19a470129f to your computer and use it in GitHub Desktop.
Save ozjimbob/9539139ac536f09030beae19a470129f to your computer and use it in GitHub Desktop.
data <- readLines("data_05.txt")
# find separator line
blank <- which(data == "")
stacks <- data[1:(blank-1)]
instructions <- data[(blank+1):length(data)]
stacks <- strsplit(stacks,"")
rowlen <- length(stacks[[1]])
nst <- length(stacks)
stacks <- unlist(stacks)
stacks <- t(stacks)
stacks <- matrix(stacks,nrow=rowlen, ncol=nst)
rows <- seq(2,rowlen,by=4)
stack_list <- list()
for(i in 1:nst){
this_row <- stacks[rows[i],]
this_row <- this_row[!this_row==" "]
stack_list[[i]] <- rev(this_row)
}
stack_list2 <- stack_list
# Instructions
get_numbers <- function(x){
this_inst <- strsplit(x," ")[[1]]
this_inst <- as.numeric(this_inst)
this_inst <- this_inst[!is.na(this_inst)]
this_inst
}
inst_list <- lapply(instructions,get_numbers)
#
move_crate <- function(crate_list,s_from, s_to){
the_stack <- crate_list[[s_from]]
the_crate <- the_stack[length(the_stack)]
the_stack <- the_stack[-length(the_stack)]
crate_list[[s_from]] <- the_stack
crate_list[[s_to]] <- c(crate_list[[s_to]],the_crate)
crate_list
}
# Move crates
move_crates <- function(crate_list,number,s_from, s_to){
this_list <- crate_list
for(i in 1:number){
this_list <- move_crate(this_list,s_from,s_to)
}
return(this_list)
}
for(i in 1:length(instructions)){
stack_list <- move_crates(stack_list,inst_list[[i]][1],inst_list[[i]][2],inst_list[[i]][3])
}
for(i in stack_list){
cat(i[length(i)])
}
# part 2
# Move crates
stack_list <- stack_list2
move_crates <- function(this_stack,number,s_from, s_to){
from_stack <- this_stack[s_from][[1]]
to_stack <- this_stack[s_to][[1]]
crates <- from_stack[(length(from_stack)-(number-1)):length(from_stack)]
from_stack <- from_stack[1:(length(from_stack)-(number))]
to_stack <- c(to_stack,crates)
this_stack[[s_from]] <- from_stack
this_stack[[s_to]] <- to_stack
return(this_stack)
}
for(i in 1:length(instructions)){
stack_list <- move_crates(stack_list,inst_list[[i]][1],inst_list[[i]][2],inst_list[[i]][3])
}
for(i in stack_list){
cat(i[length(i)])
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment