Advent of Code 2020

15.R 1.1KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. library(hashmap)
  2. input <- as.integer(c(2,0,1,7,4,14,18))
  3. vals <- numeric(0)
  4. sapply(1:2020, function(x) {
  5. if (x <= length(input)) {
  6. vals <<- c(vals, input[x])
  7. return(input[x])
  8. } else {
  9. can <- vals[x - 1]
  10. pos <- which(can == vals[1:(x - 2)])
  11. if (length(pos) == 0) {
  12. vals <<- c(vals, 0)
  13. return(0)
  14. } else {
  15. le <- max(pos)
  16. vals <<- c(vals, x - 1 - le)
  17. return(x - 1 - le)
  18. }
  19. }
  20. })
  21. # Part 2
  22. hasha <- hashmap(as.integer(input[1:(length(input) - 1)]), as.integer(1:(length(input) - 1)))
  23. # hashb <- hashmap(numeric(0), numeric(0))
  24. last <- tail(input, 1)
  25. lb1 <- input[length(input) - 1]
  26. for (x in (length(input)):30000000) {
  27. if ((x %% 10000) == 0) {
  28. print(x)
  29. }
  30. hl <- hasha[[last]]
  31. lb1 <- last
  32. if (is.na(hl)) {
  33. last <- 0
  34. } else {
  35. last <- (x) - hl
  36. }
  37. hasha[[lb1]] <- x
  38. # print(lb1)
  39. }
  40. print(lb1)