Advent of code Day 20

Goal: Filter IP Address ban list

Ref: http://adventofcode.com/2016/day/20


In [1]:
library(foreach)

In [2]:
input <- read.table("Data.txt", header = FALSE, sep = "-")
BlockRange <- list()
current <- 0

In [3]:
BlockRange <- list()
original <- input
currentMin <- 0
currentMax <- 0
pMax <- 0
while(length(original)>0){
  notFound = TRUE
  currentMin <- min(original$V1)
  while(notFound){
    tt <- min(original$V1)
    if(currentMax<tt){
      notFound = FALSE
    } else{
      idx <- which(original$V1==tt)
      pMax <- max(original$V2[idx],pMax)
      currentMax <- original$V2[idx]+1
      original <<- original[-idx,]
    }
    
    
  }
  BlockRange[[length(BlockRange)+1]] <- list(currentMin,pMax)
  currentMax  <- min(original$V1)
}


Warning message in min(original$V1):
"no non-missing arguments to min; returning Inf"Warning message in min(original$V1):
"no non-missing arguments to min; returning Inf"Warning message in min(original$V1):
"no non-missing arguments to min; returning Inf"Warning message in min(original$V1):
"no non-missing arguments to min; returning Inf"Warning message in min(original$V1):
"no non-missing arguments to min; returning Inf"
Error in if (currentMax < tt) {: argument is of length zero
Traceback:

In [4]:
first <- 0
firstFound <- FALSE
x <- 1
while(!firstFound){
   if(BlockRange[[x+1]][[1]]>BlockRange[[x]][[2]]){
     first <- BlockRange[[x]][[2]]+1
     firstFound <- TRUE
   }
  x <- x+1
}
cat(first)


31053880

In [5]:
sum <- 0
aa <- foreach(x = 1:(length(BlockRange)-1)) %do% {
  sum <- sum + max(0,(BlockRange[[x+1]][[1]]-BlockRange[[x]][[2]])-1)
}
cat(sum)


117

In [6]:
cat("Q1- The First accepted IP address is : ", first, '\n')
cat("Q2- The total amount of IP address is : ", sum, '\n')


Q1- The First accepted IP address is :  31053880 
Q2- The total amount of IP address is :  117